kaggle机器学习

2017-10-19 00:00:00 gh13uy2ql0N5 阅读数 18052

上周一个叫 Abhishek Thakur 的数据科学家,在他的 Linkedin 发表了一篇文章 Approaching (Almost) Any Machine Learning Problem,介绍他建立的一个自动的机器学习框架,几乎可以解决任何机器学习问题,项目很快也会发布出来。


这篇文章迅速火遍 Kaggle,他参加过100多个数据科学相关的竞赛,积累了很多宝贵的经验,看他很幽默地说“写这样的框架需要很多丰富的经验,不是每个人都有这样的经历,而很多人有宝贵的经验,但是他们不愿意分享,我呢恰好是又有一些经验,又愿意分享的人”。当然这篇文章也是受到争议的,很多人觉得并不全面。


这篇文章,里面提到了一些高效的方法,最干货的是,他做了一个表格,列出了各个算法通常需要训练的参数。


这个问题很重要,因为大部分时间都是通过调节参数,训练模型来提高精度。作为一个初学者,第一阶段,最想知道的问题,就是如何调节参数。


因为分析的套路很简单,就那么几步,常用的算法也就那么几个,以为把算法调用一下就可以了么,那是肯定不行的。实际过程中,调用完算法后,结果一般都不怎么好,这个时候还需要进一步分析,哪些参数可以调优,哪些数据需要进一步处理,还有什么更合适的算法等等问题。


接下来一起来看一下他的框架。


据说数据科学家 60-70% 的时间都花在数据清洗和应用模型算法上面,这个框架主要针对算法的应用部分。


Pipeline


什么是 Kaggle?


Kaggle是一个数据科学竞赛的平台,很多公司会发布一些接近真实业务的问题,吸引爱好数据科学的人来一起解决,可以通过这些数据积累经验,提高机器学习的水平。


应用算法解决 Kaggle 问题,一般有以下几个步骤:


  • 第一步:识别问题

  • 第二步:分离数据

  • 第三步:构造提取特征

  • 第四步:组合数据

  • 第五步:分解

  • 第六步:选择特征

  • 第七步:选择算法进行训练


当然,工欲善其事,必先利其器,要先把工具和包都安好。

最方便的就是安装 Anaconda,这里面包含大部分数据科学所需要的包,直接引入就可以了,常用的包有:


  • pandas:常用来将数据转化成 dataframe 形式进行操作

  • scikit-learn:里面有要用到的机器学习算法模型

  • matplotlib:用来画图

  • 以及 xgboost,keras,tqdm 等。


第一步:识别问题


在这一步先明确这个问题是分类还是回归。通过问题和数据就可以判断出来,数据由 X 和 label 列构成,label 可以一列也可以多列,可以是二进制也可以是实数,当它为二进制时,问题属于分类,当它为实数时,问题属于回归。


第二步:分离数据



为什么需要将数据分成两部分?


用 Training Data 来训练模型,用 Validation Data 来检验这个模型的表现,不然的话,通过各种调节参数,模型可以在训练数据集上面表现的非常出色,但是这可能会是过拟合,过拟合就是太依赖现有的数据了,拟合的效果特别好,但是只适用于训练集,以致于来一个新的数据,就不知道该预测成什么了。所以需要有 Validation 来验证一下,看这个模型是在那里自娱自乐呢,还是真的表现出色。


在 scikit learn 包里就有工具可以帮你做到这些:

分类问题用 StrtifiedKFold


from sklearn.cross_validation import StratifiedKFold


回归问题用 KFold


from sklearn.cross_validation import KFold


第三步:构造特征


这个时候,需要将数据转化成模型需要的形式。数据有三种类型:数字,类别,文字。当数据是类别的形式时,需要将它的每一类提取出来作为单独一列,然后


用二进制表示每条记录相应的值。例如:

record 1: 性别 女
record 2:性别 女
record 3:性别 男


转化之后就是:

女 男
record 1: 1 0
record 2:1 0
record 3:0 1

这个过程 sklearn 也可以帮你做到:


from sklearn.preprocessing import LabelEncoder


或者


from sklearn.preprocessing import OneHotEncoder


第四步:组合数据


处理完 Feature 之后,就将它们组合到一起。
如果数据是稠密的,就可以用 numpy 的 hstack:


import numpy as np

X = np.hstack((x1, x2, ...))


如果是稀疏的,就用 sparse 的 hstack:


from scipy import sparse

X = sparse.hstack((x1, x2, ...))


组合之后,就可以应用以下算法模型:


  • RandomForestClassifier

  • RandomForestRegressor

  • ExtraTreesClassifier

  • ExtraTreesRegressor

  • XGBClassifier

  • XGBRegressor


但是不能应用线性模型,线性模型之前需要对数据进行正则化而不是上述预处理。


第五步:分解


这一步是为了进一步优化模型,可以用以下方法:


PCA:Principal components analysis,主成分分析,是一种分析、简化数据集的技术。用于减少数据集的维数,同时保持数据集中的对方差贡献最大的特征。


from sklearn.decomposition import PCA


对于文字数据,在转化成稀疏矩阵之后,可以用 SVD


from sklearn.decomposition import TruncatedSVD


SVD:Singular Value Decomposition,奇异值分解,是线性代数中一种重要的矩阵分解,它总能找到标准化正交基后方差最大的维度,因此用它进行降维去噪。


第六步:选择特征


当特征个数越多时,分析特征、训练模型所需的时间就越长,容易引起“维度灾难”,模型也会越复杂,推广能力也会下降,所以需要剔除不相关或亢余的特征。

常用的算法有完全搜索,启发式搜索,和随机算法。


例如,Random Forest:


from sklearn.ensemble import RandomForestClassifier


或者 xgboost:


import xgboost as xgb


对于稀疏的数据,一个比较有名的方法是 chi-2:


from sklearn.feature_selection import SelectKBestfrom sklearn.feature_selection import chi2


第七步:选择算法进行训练

选择完最相关的参数之后,接下来就可以应用算法,常用的算法有:


Classification:
Random Forest
GBM
Logistic Regression
Naive Bayes
Support Vector Machines
k-Nearest Neighbors

Regression
Random Forest
GBM
Linear Regression
Ridge
Lasso
SVR


在scikit-learn里可以看到分类和回归的可用的算法一览,包括它们的原理和例子代码。在应用各算法之前先要明确这个方法到底是否合适。


为什么那么多算法里,只提出这几个算法呢,这就需要对比不同算法的性能了。

这篇神文 Do we Need Hundreds of Classifiers to Solve Real World Classification Problems 测试了179种分类模型在UCI所有的121个数据上的性能,发现Random Forests 和 SVM 性能最好。

我们可以学习一下里面的调研思路,看看是怎么样得到比较结果的,在我们的实践中也有一定的指导作用。


各算法比较


但是直接应用算法后,一般精度都不是很理想,这个时候需要调节参数,最干货的问题来了,什么模型需要调节什么参数呢?



虽然在sklearn的文档里,会列出所有算法所带有的参数,但是里面并不会说调节哪个会有效。在一些mooc课程里,有一些项目的代码,里面可以看到一些算法应用时,他们重点调节的参数,但是有的也不会说清楚为什么不调节别的。


这里作者根据他100多次比赛的经验,列出了这个表,我觉得可以借鉴一下,当然,如果有时间的话,去对照文档里的参数列表,再查一下算法的原理,通过理论也是可以判断出来哪个参数影响比较大的。


调参之后,也并不就是大功告成,这个时候还是需要去思考,是什么原因造成精度低的,是哪些数据的深意还没有被挖掘到,这个时候需要用统计和可视化去再一次探索数据,之后就再走一遍上面的过程。


我觉得这里还提到了很有用的一条经验是,把所有的 transformer 都保存起来,方便在 validation 数据集上面应用:



文章里介绍了分析问题的思路,还提到了几条很实用的经验,不过经验终究是别人的经验,只能借鉴,要想提高自己的水平,还是要看到作者背后的事情,就是参加了100多次实战,接下来就去行动吧,享受用算法和代码与数据玩耍的兴奋吧。


推荐阅读

MIT女教授使用AI检测早期乳腺癌准确率97%

拍人更美!谷歌工程师揭秘Pixel 2手机黑科技

华为新品手机发布会全程回顾

超级计算机图像识别率达人类医生水平

一文读懂语音识别史

打造百度AI大脑的80后科学家

斯坦福发布3D街景数据集

谷歌重磅发布43页Waymo无人车报告

3行Python代码完成人脸识别

2018年人工智能将赋能所有行业

初学者必读的八个趣味机器学习项目

AMD深度学习开源战略


长期招聘志愿者

加入「AI从业者社群」请备注个人信息

添加小鸡微信  liulailiuwang


2017-08-14 19:03:13 g11d111 阅读数 24798

这篇文章适合那些刚接触Kaggle、想尽快熟悉Kaggle并且了解项目情况的朋友。本文分为两部分介绍Kaggle,Part One简单介绍Kaggle,Part Two将简单介绍正规的竞赛的项目,大家可以针对性的解决感兴趣的题目。

0、一个小推荐~

目前,在kaggle中应用的最广泛的语言就是python, 相较于传统的机器学习算法, 深度学习算法在kaggle比赛产生了巨大的影响,如果大家想要系统的学习和研究python以及在其基础上的常见的机器学习和深度学习框架和工具包, 那么强烈推荐大家学习CSDN开设的:

人工智能在网络领域的应用与实践:

https://edu.csdn.net/course/play/10319?utm_source=sooner

这个课程我实际听了, 老师的讲授水平很好, 条理清晰,思路明确,例子丰富, 非常值得大家学习借鉴, 在此强烈推荐一波, 让我们一起学习进步~

ps: 如果想要系统学习python的朋友,下面这门课是涵盖了python基础语法、web开发、数据挖掘以及机器学习,是CSDN强力推荐的课程,有需要的朋友可以看看哈:

Python全栈工程师:

https://edu.csdn.net/topic/python115?utm_source=sooner

1、Kaggle简介

Kaggle是一个数据分析的竞赛平台,网址:https://www.kaggle.com/

企业或者研究者可以将数据、问题描述、期望的指标发布到Kaggle上,以竞赛的形式向广大的数据科学家征集解决方案,类似于KDD-CUP(国际知识发现和数据挖掘竞赛)。Kaggle上的参赛者将数据下载下来,分析数据,然后运用机器学习、深度学习、数据挖掘等知识,建立算法模型,解决问题得出结果,最后将结果提交,如果提交的结果符合指标要求(比如logloss,mse等)并且在参赛者中排名第一,将获得比赛丰厚的奖金(都是以美元为单位哦!)。

下面以图文的形式介绍Kaggle:

这里写图片描述
Kaggle的正规项目分为四类,
分别是:FeaturedResearchRecruitmentGetting Started。下面,分别介绍

Featured

Featured译为“号召”,召集数据科学高手去参赛,这里面的竞赛平均难度是比较高的,而且项目涉及到的大部分是企业或政府的实际需求。
这里写图片描述
目前这类项目有129个,为正式的Kaggle项目比例最大的一部分。

Research
香蕉黄对应的是Research,奖金少一点。这个类别的比赛和Featured一样,是有奖竞赛,难度自然不小,作为入门者,可以先做做练习赛(Getting Started)
这里写图片描述

Recruitment
Recruitment是一些顶尖的公司用于招聘数据科学家来帮助公司解决难题的。这些公司(如Facebook、Airbnb等)会提出一些问题,来考察各路大神的算法和解决方案的可行性,最终给出工作offer。这一块着重是对于尖端数据科学人才的考验。
这里写图片描述

Getting Started
Getting Started是入门赛,最典型的是大家应该都听过的
Titanic: Machine Learning from Disaster泰坦尼克号预测乘客死亡情况
这里写图片描述

2、Kaggle各类项目简介

本节以最主要的两类项目为例进行分析,其他类别(Getting Started,Recruitment等)的项目分析如有需要,可以联系我qq。

Featured

Featured以最近两年的项目(30个)进行分析,大家可以选择自己感兴趣去实际做一下,或者使用别人的kernel来调整。
这里写图片描述
这里写图片描述

Zillow Prize: Zillow’s Home Value Prediction (Zestimate)

这里写图片描述
问题目标:预测加州三郡(LA Orange Ventura)未来某个时间段内的房屋价格
问题类型:回归问题(Regression);时间序列分析;特征工程
问题特点:考虑影响房价的因素,并根据时间段做时间序列分析;可以使用Xgboost或LightGBM框架来做。

Passenger Screening Algorithm Challenge

这里写图片描述
问题目标:提升美国国土安全部(DHS)的威胁评估算法
问题类型:分类问题(Classification);监督学习
问题特点:机场安检的威胁评估算法,考虑的数据量很大,而且要求保证算法的速度。

Carvana Image Masking Challenge
这里写图片描述
问题目标:自动识别图片中汽车的边界
问题类型:计算机视觉(CV)
问题特点:边界处理,模型提取。

Instacart Market Basket Analysis
这里写图片描述
问题目标:预测Instacart的客户将会再次购买的产品
问题类型:推荐系统 (Recommendation System)
问题特点:根据用户行为建模,预测出跟用户相性好的产品。

Planet: Understanding the Amazon from Space
这里写图片描述
问题目标:根据卫星数据预测人类在亚马逊雨林的足迹
问题类型:计算机视觉(CV);时间序列分析(Time-Series Analysis);动态规划(DP)
问题特点:非常综合的问题,即涉及到图像处理,又与图算法有关。

Mercedes-Benz Greener Manufacturing
这里写图片描述
问题目标:优化奔驰车在测试时的时间
问题类型:回归问题(Regression);模式识别(Pattern Recognition)
问题特点:维度灾难(curse of dimensionality)

Sberbank Russian Housing Market
这里写图片描述
问题目标:预测俄罗斯的房地产市场波动情况
问题类型:回归问题(Regression)
问题特点:多层次的特征,不仅限于房屋状况,还与国内经济状况有关的特征,综合分析。

NOAA Fisheries Steller Sea Lion Population Count
这里写图片描述
问题目标:根据航拍图像内容,研究算法分析图片中有几个海狮
问题类型:计算机视觉(CV);模式识别(Pattern Recognition)
问题特点:典型的计算机视觉和边界识别的综合问题。

Intel & MobileODT Cervical Cancer Screening
这里写图片描述
问题目标:预测女性宫颈癌类别
问题类型:分类问题(Classification);计算机视觉(CV)
问题特点:图像识别,确定宫颈癌类别。

Quora Question Pairs
这里写图片描述

问题目标:根据问题内容,定位已经被回答过的类似问题
问题类型:聚类(Cluster);自然语言处理(NLP)
问题特点:避免用户问重复的问题,也节省答题人的时间。

Google Cloud & YouTube-8M Video Understanding Challenge
这里写图片描述
问题目标:训练一个分类器,为视频做标签
问题类型:分类问题(Classification);深度学习(DL)
问题特点:噪声数据;主特征提取

The Nature Conservancy Fisheries Monitoring

这里写图片描述
问题目标:根据视频内容,识别鱼的种类
问题类型: 计算机视觉(CV);分类问题(Classification);深度学习(DL)
问题特点:模式识别加上Deep Learning的内容。

Data Science Bowl 2017

这里写图片描述
问题目标:提高肺癌预测的准确性
问题类型: 计算机视觉(CV);模型识别(Pattern Recognition);分类问题(Classification)
问题特点:根据高分辨率的肺部扫描精准判断病变是否为癌变。

Dstl Satellite Imagery Feature Detection

这里写图片描述
问题目标:从高空图像中准确辨别各种特征
问题类型:计算机视觉(CV);深度学习(DL)
问题特点:根据卫星图像对地球上的物体进行识别。

Two Sigma Financial Modeling Challenge

这里写图片描述
问题目标:预测未来经济走势(只要算法)
问题类型: 算法(Algorithms)
问题特点: 根据世界的不确定性,科学预测未来的经济发展和机会。

Outbrain Click Prediction

这里写图片描述
问题目标: 预测文章的哪部分是全球读者更喜欢的(有意愿点击的)
问题类型: 推荐系统(Recommendation System);自然语言处理(NLP)
问题特点: 文本相似度分析,新闻热度分析。

Santander Product Recommendation

这里写图片描述
问题目标:为Santander用户推荐产品
问题类型:推荐系统(Recommendation System)
问题特点:个性化的产品推荐,依据用户行为建模。

Bosch Production Line Performance

这里写图片描述
问题目标:预测Bosch的内部失败率
问题类型:分类问题(Classification)
问题特点:根据上千种检测手段,预测某批产品失败的可能性。

Predicting Red Hat Business Value

这里写图片描述
问题目标:根据用户的特点和活动情况,分析其对RedHat的商业价值
问题类型:分类问题(Classification)
问题特点:用户价值分析

TalkingData Mobile User Demographics

这里写图片描述
问题目标:根据用户的手机使用情况,地理位置等信息对用户做画像
问题类型:用户画像(User portrait);聚类(Cluster)
问题特点:特征维数多且不同尺度;聚类分析。

Grupo Bimbo Inventory Demand

这里写图片描述
问题目标:宾宝希望最大化销量的同时,减少从烘焙店返还过期未销售的食品
问题类型:动态规划(DP)
问题特点:根据商店的销量情况和返还率,设计每家店的供货分配算法。

Ultrasound Nerve Segmentation

这里写图片描述
问题目标:根据颈部超声图像识别神经结构
问题类型:计算机视觉(CV);分类问题(Classification)
问题特点:根据超声图像自动识别神经结构

State Farm Distracted Driver Detection

这里写图片描述
问题目标:计算机视觉能否发现驾驶员分心?
问题类型:分类问题(Classification);计算机视觉(CV)
问题特点:利用视频实时追踪驾驶员,判断驾驶员是否出现注意力不集中的现象。

Avito Duplicate Ads Detection

这里写图片描述
问题目标: 欺骗性、重复性的广告检测
问题类型: 分类问题(Classification);计算机视觉(CV)
问题特点: 相似度分析。

Draper Satellite Image Chronology

这里写图片描述
问题目标: 根据五天的卫星图片,预测卫星图片拍摄的时间顺序
问题类型: 计算机视觉(CV)
问题特点: 需要额外的特征,比如白天和晚上,图片的变化情况等等。

Expedia Hotel Recommendations

这里写图片描述
问题目标: 在用户数据不全的情况下,根据用户的搜索情况,预测用户可以预定的酒店类型(100种)
问题类型: 分类问题(Classification)
问题特点: 数据不全;日志数据分析。

Santander Customer Satisfaction

这里写图片描述
问题目标: 预测银行客户对交易体验的感觉(好/坏)
问题类型: 情感分析;分类问题(Classification)
问题特点: 根据上百维未知的特征,来预测客户的体验,筛选特征的重要程度。
Home Depot Product Search Relevance

这里写图片描述
问题目标: 预测Home Depot网站相关的搜索结果
问题类型: 推荐系统(Recommendation System);聚类(Cluster)
问题特点: 产品相似度分析。

BNP Paribas Cardif Claims Management

这里写图片描述
问题目标: 加速BNP Paribas Cardif公司的出险赔付流程
问题类型: 优化问题
问题特点: 1、什么样的索赔更容易得到赔付?2、索赔所需要的额外信息?

Prudential Life Insurance Assessment

这里写图片描述
问题目标: 简化个人购买保险业务的难度
问题类型: 聚类(Clsuter);非监督学习;NLP
问题特点: 噪声数据;把相似的保险方案归并成一套,供消费者选择,以免消费者懵掉。

Research
这里写图片描述
这里写图片描述

Research的项目进行分析,大家可以选择自己感兴趣去实际做一下,或者使用别人的kernel来调整。

Personalized Medicine: Redefining Cancer Treatment

这里写图片描述
问题目标:根据给定数据,预测基因变种属于哪一类
问题类型:分类问题(Classification);NLP;监督学习
问题特点:对临床数据的处理甚至对专家来说也是复杂和费时的,所以,依据临床数据建立的模型是非常重要的。

Create an image classifier that is robust to adversarial attacksHouse Prices: Advanced Regression Techniques

这里写图片描述
问题目标:针对广告图片稍微变化,就导致分类器分类错误的情况。训练一个鲁棒性强的图片分类器
问题类型:分类问题(Classification);监督学习
问题特点: 避免在线学习中,被人用差不多的图片进行攻击(作为input训练),从而导致分类器性能严重下降的情况。

Imperceptibly transform images in ways that fool classification models

这里写图片描述
问题目标:将图片的内容转换,争取迷惑分类模型(跟②是一个系列的问题)
问题类型:分类问题(Classification)
问题特点: 避免在线学习中,被人用差不多的图片进行攻击(作为input训练),从而导致分类器性能严重下降的情况。

Develop an adversarial attack that causes image classifiers to predict a specific target class

这里写图片描述
问题目标:开发一个广告图片攻击工具,目标是使分类器的效果下降
问题类型:分类问题(Classification)
问题特点: 避免在线学习中,被人用差不多的图片进行攻击(作为input训练),从而导致分类器性能严重下降的情况。

Web Traffic Time Series Forecasting

这里写图片描述
问题目标:预测维基百科(Wikipedia)的页面未来的访问情况
问题类型:回归问题(Regression);时间序列分析(Time-Series Analysis)
问题特点:典型的时间序列分析问题,需要先验知识。

Fine-grained classification challenge spanning 5,000 species.

这里写图片描述
问题目标:相似生物分类识别
问题类型:分类问题(Classification);计算机视觉(CV)
问题特点:大型分类问题;深度学习。

Can you assign accurate description labels to images of apparel products?

这里写图片描述
问题目标:准确的为图片中的明显物品做标注(Label)
问题类型:分类问题(Classification);计算机视觉(CV)
问题特点:深度学习的重要应用;标签相似性处理;照片背景不同处理。

Predict seizures in long-term human intracranial EEG recordings

这里写图片描述
问题目标:根据癫痫患者的脑电图,预测其癫痫发作的情况
问题类型:时间序列分析(Time-Series Analysis)
问题特点:典型的时间序列分析问题,推荐对每个癫痫患者的癫痫模式进行建模,从而有针对性的安排人照顾。

How Much Did It Rain? II

这里写图片描述
问题目标:跟How Much Did It Rain?一样,预测降雨量
问题类型:分类问题(Classification);时间序列分析(Time-Series Analysis)
问题特点:将降雨量限定在一定范围内,满足一个范围的话,对应的类设为1。

Right Whale Recognition

这里写图片描述
问题目标:根据航拍照片,预测图片中是否有濒危动物脊美鲸(right whales)
问题类型:分类问题(Classification);计算机视觉(CV)
问题特点:类似于物体检测的情况。

Grasp-and-Lift EEG Detection

这里写图片描述
问题目标:根据EFG信号进行手势识别
问题类型:分类问题(Classification)
问题特点:噪声数据

ECML/PKDD 15: Taxi Trajectory Predictiont’s Cooking?(Ⅰ)

这里写图片描述
问题目标:根据出租车当前运行轨迹,预测其目的地
问题类型: 计算机视觉(CV);动态规划(DP)
问题特点:涉及到图运算和拓扑学的内容

ECML/PKDD 15: Taxi Trip Time Prediction(Ⅱ)

这里写图片描述
问题目标:根据出租车当前运行轨迹,预测本次行程时间
问题类型: 计算机视觉(CV);动态规划(DP);回归问题(Regression)
问题特点:涉及到图运算和拓扑学的内容

15.071x - The Analytics Edge (Spring 2015)

这里写图片描述
问题目标:预测纽约时报哪篇博文最受欢迎
问题类型: 分类问题(Classification)
问题特点:多维度分析

Microsoft Malware Classification Challenge (BIG 2015)

这里写图片描述
问题目标:基于文件内容和特点对恶意软件进行分类
问题类型: 分类问题(Classification)
问题特点:神经网络(NN)

BCI Challenge @ NER 2015

这里写图片描述
问题目标:根据脑波数据预测对应的单词和图像是否对应
问题类型: 分类问题(Classification);FFT(Fast-Fourier analysis)
问题特点:对频域数据进行分析

American Epilepsy Society Seizure Prediction Challenge

这里写图片描述
问题目标:根据颅内EFG信号预测狗的癫痫症状发生情况
问题类型:时间序列分析(Time-Series Analysis);FFT(Fast-Fourier analysis)
问题特点:典型的时间序列分析问题,推荐对每只癫痫狗的癫痫模式进行建模,从而有针对性的安排人照顾;频域分析。

Display Advertising Challenge

这里写图片描述
问题目标:预测广告的点击转化率(CTR)
问题类型: 回归问题(Regression)
问题特点:FFM(field-aware factorization machines),即考虑全局情况的分解机技术。效果特别好。

Click-Through Rate Prediction

这里写图片描述
问题目标:预测广告的点击转化率(CTR)
问题类型: 回归问题(Regression)
问题特点:FFM(field-aware factorization machines),即考虑全局情况的分解机技术。效果特别好。

Africa Soil Property Prediction Challenge

这里写图片描述
问题目标:预测土壤的物理化学成分
问题类型: 回归问题(Regression)
问题特点:特征维数多;官方示例是用贝叶斯加性模型做的。

UPenn and Mayo Clinic’s Seizure Detection Challenge

这里写图片描述
问题目标:根据颅内EFG信号预测癫痫症状发生情况
问题类型:时间序列分析(Time-Series Analysis);FFT(Fast-Fourier analysis)
问题特点:典型的时间序列分析问题,推荐对每只癫痫狗的癫痫模式进行建模,从而有针对性的安排人照顾;频域分析。

DecMeg2014 - Decoding the Human Brain

这里写图片描述
问题目标:预测视觉刺激对人脑活动的影响
问题类型:时间序列分析(Time-Series Analysis);FFT(Fast-Fourier analysis);计算机视觉(CV);二分类问题(Binary Classification)
问题特点:问题㉑的升级版

MLSP 2014 Schizophrenia Classification Challenge

这里写图片描述
问题目标:通过MRI扫描预测是否患有精神分裂症(schizophrenia)
问题类型: 分类问题(Classification);计算机视觉(CV)
问题特点: 利用不同切面的核磁共振图像来进行诊断;多模态分析。

KDD Cup 2014 - Predicting Excitement at DonorsChoose.org

这里写图片描述
问题目标:对慈善项目进行评级,决定是否捐赠
问题类型: 分类问题(Classification)
问题特点: 多维度分析,类似信用评级问题。

Greek Media Monitoring Multilabel Classification (WISE 2014)

这里写图片描述
问题目标:对项目评级,决定是否捐赠
问题类型: 分类问题(Classification);NLP
问题特点: 噪声数据;希腊语。

CONNECTOMICS

这里写图片描述
问题目标:根据1000个神经元的活动情况,判断神经元之前是否有突触连接。
问题类型: 时间序列分析(Time-Series Analysis);计算机视觉(CV)
问题特点: 神经元;树突轴突。

Large Scale Hierarchical Text Classification

这里写图片描述
问题目标: 大规模文本(维基百科)分类问题
问题类型: NLP
问题特点: 可以用LSTM来做。

Galaxy Zoo - The Galaxy Challenge

这里写图片描述
问题目标: 对宇宙中的不同距离的星系的形态进行分类
问题类型: 分类问题(Classification);计算机视觉(CV)
问题特点: 宇宙。

PAKDD 2014 - ASUS Malfunctional Components Prediction

这里写图片描述
问题目标: 预测Asus笔记本未来可能发生故障的部位
问题类型: 分类问题(Classification);
问题特点: 多维度分析(销售时间、销量和修理次数等等)

Loan Default Prediction - Imperial College London

这里写图片描述
问题目标: 构造最优贷款组合(optimal portfolio of loans)
问题类型: 贷款组合;
问题特点: 噪声数据;降维。

Multi-label Bird Species Classification - NIPS 2013

这里写图片描述
问题目标: 根据风声记录预测87类动物(鸟/两栖动物)
问题类型: 语音识别;分类问题(Classification)
问题特点: 声音识别。

Accelerometer Biometric Competition

这里写图片描述
问题目标: 根据加速度记录仪的数据预测其是否属于特定的手机
问题类型: 分类问题(Classification)
问题特点: 手机加速度计数据分析。

AMS 2013-2014 Solar Energy Prediction Contest

这里写图片描述
问题目标: 预测奥克拉荷马每日的太阳能情况
问题类型: 回归问题(Regression)
问题特点: 空间;先验知识。

The Big Data Combine Engineered by BattleFin

这里写图片描述
问题目标: 根据新闻和情感数据分析来预测短期股价的变化
问题类型: 回归问题(Regression);时间序列分析(Time-Series Analysis)
问题特点: 情感分析;金融数据。

RecSys2013: Yelp Business Rating Prediction

这里写图片描述
问题目标: Yelp商业评分预测
问题类型: 回归问题(Regression);NLP
问题特点: 情感分析;多维度分析。

Multi-modal Gesture Recognition

这里写图片描述
问题目标: 多模态手势识别(2D/3D)
问题类型: 计算机视觉(CV)
问题特点: 卷积神经网络;RGB;降维。

The ICML 2013 Bird Challenge

这里写图片描述
问题目标: 根据语音记录识别鸟的类别
问题类型: 语音识别
问题特点: 频域分析。

Challenges in Representation Learning: Multi-modal Learning

这里写图片描述
问题目标: 为图像做Label
问题类型: 计算机视觉(CV);自然语言处理(NLP)
问题特点: 多模态分析(图片/文字);标注。

Challenges in Representation Learning: Facial Expression Recognition Challenge

这里写图片描述
问题目标: 识别图像中人脸表情
问题类型: 计算机视觉(CV);分类问题(Classification)
问题特点: 面部表情分类器;灰度图片。

Challenges in Representation Learning: The Black Box Learning Challenge

这里写图片描述
问题目标: 黑箱预测问题
问题类型: 分类问题(Classification)
问题特点: 数据没有实际意义;降维。

ICDAR2013 - Handwriting Stroke Recovery from Offline Data

这里写图片描述
问题目标: 预测手写签名的轨迹
问题类型: 动态规划(DP);计算机视觉(CV)
问题特点: 笔画方向;左/右撇子。

ICDAR2013 - Gender Prediction from Handwriting

这里写图片描述
问题目标: 预测手写笔记的作者是男还是女
问题类型: 计算机视觉(CV);分类问题(Classification)
问题特点: 性别特征对字体形态的影响;神经网络

Predicting Parkinson’s Disease Progression with Smartphone Data

这里写图片描述
问题目标: 根据用户的手机信息评估帕金斯综合症患者是否有症状发作的迹象/情况
问题类型: 时间序列分析(Time-Series Analysis);语音处理(Speech Processing)
问题特点: 多尺度数据;语音数据处理。

Visualize the State of Public Education in Colorado

这里写图片描述
问题目标: 根据科罗拉多州各学校3年的成绩数据,预测每个学校可能升到好学校的可能性
问题类型: 特征工程(Feature Engineering );回归问题(Regression)
问题特点: 多指标考核;评分标准。

Global Energy Forecasting Competition 2012 - Load Forecasting

这里写图片描述
问题目标: 预测美国20个地区的小时用电量(功率)
问题类型: 回归问题(Regression);时间序列分析(Time-Series Analysis)
问题特点: 多维度分析。

Global Energy Forecasting Competition 2012 - Wind Forecasting

这里写图片描述
问题目标: 预测7个风力发电厂的现在——未来48小时每小时产生的电量
问题类型: 回归问题(Regression);时间序列分析(Time-Series Analysis)
问题特点: 多维度分析。

Data Mining Hackathon on (20 mb) Best Buy mobile web site - ACM SF Bay Area Chapter

这里写图片描述
问题目标: 基于用户的查询记录预测其最感兴趣的Xbox游戏类别
问题类型: 推荐系统(Recommendation system)
问题特点: 词云;关键词分析。

Data Mining Hackathon on BIG DATA (7GB) Best Buy mobile web site

这里写图片描述
问题目标: 基于用户的查询记录预测其最感兴趣的BestBuy产品类别
问题类型: 推荐系统(Recommendation system)
问题特点: 大数据分析;关键词分析。

CPROD1: Consumer PRODucts contest #1

这里写图片描述
问题目标: 自动分辨消费者提到的产品并正确的识别产品的类别
问题类型: 分类问题(Classification);NLP
问题特点: 大数据分析;自然语言处理。

Practice Fusion Diabetes Classification

这里写图片描述
问题目标: 诊断病人是否患有二型糖尿病
问题类型: 分类问题(Classification)
问题特点: 非线性边界。

剩余的项目分析可以联系我的qq获取。

2018-11-28 19:52:48 l7H9JA4 阅读数 611

   作者: 刘威威          

编辑:龚   赛           


前  言

参加kaggle比赛很有趣,可以帮助自己学习到很多有用的技术! 在过去的几年里,Abhay Pawar开发了一些标准方法来探索特征并构建更好的机器学习模型。 这些简单但功能强大的技术帮助他在Instacart Market Basket Analysis:https://www.kaggle.com/c/instacart-market-basket-analysis 竞赛中获得了2%的排名,Abhay Pawar也将其用于实际问题处理中,本文对其方法进行一些总结,以觞读者。


01

特征可视化

在数字数据上构建任何监督学习模型的最重要方面之一是很好地理解这些特征。 查看模型的部分依赖图有助于了解模型的输出如何随任何特征而变化。

640?wx_fmt=png

这些图的问题在于它们是使用训练有素的模型创建的。 如果我们可以直接从训练数据创建这些图,它可以帮助我们更好地理解基础数据。 事实上,它可以帮助我们完成以下所有事情: 
1.理解特征 
2.排除无用的特征 
3.特征工程 
4.特征重要性选择 
5.特征调试 
6.leakage检测和理解 
7.模型监测


为了使其易于访问,我决定将这些技术放入python包featexp中,在本文中,我们将看到它如何用于特征探索。 我们将使用Kaggle的Home Credit Default Risk竞赛中的应用程序数据集。 竞赛的任务是使用给出的数据预测违约者。


02

特征理解

640?wx_fmt=png

如果因变量(目标)是二进制,则散点图不起作用,因为所有点都位于0或1.对于连续目标,太多数据点使得难以理解目标与特征趋势。 Featexp可以创建更好的图形来帮助解决这个问题。 我们来试试吧!


from featexp import get_univariate_plots# Plots drawn for all features if nothing is passed in feature_list parameter.get_univariate_plots(data=data_train, target_col='target', 
                     features_list=['DAYS_BIRTH'], bins=10)

640?wx_fmt=png

Featexp创建数字特征的相等人口区(X轴)。 然后,它计算每个箱中目标的平均值,并在上面的左侧图中绘制它。 在我们的例子中,目标的均值只是违约率。 该图表告诉我们,DAYS_BIRTH(年龄较高)的负值较高的客户的违约率较低。 这是有道理的,因为年轻人通常更有可能违约。 这些图表有助于我们了解该特征告诉客户的内容以及它将如何影响模型。 右侧的图表显示了每个箱柜中的客户数量。


03

排除干扰特征

具有噪声的特征会导致过拟合,但是识别出它们并不容易。 在featexp中,你可以传递测试集并比较训练/测试中的特征趋势以识别有噪声的特征。 该测试集不是实际的测试集。 它是你知道目标的本地测试集/验证集。

get_univariate_plots(data=data_train, target_col='target', data_test=data_test, features_list=['DAYS_EMPLOYED'])

640?wx_fmt=png

Featexp计算在这些图上显示的两个指标,这有助于检测出有噪声的特征: 
1.趋势相关性(见于测试图):如果某个特征不具有相同的趋势,比如跨越火车和评估集的目标,可能导致过度拟合。 发生这种情况是因为模型正在学习一些不适用于测试数据的东西。 趋势相关性有助于了解训练/测试趋势的类似程度,并使用训练和测试中的箱柜的平均目标值来计算它。 上述特征具有99%的相关性。 好像不是噪声特征! 
2.趋势变化:趋势方向的突然和反复变化可能意味着噪音。 但是,这种趋势变化也可能发生,因为该区域在其他特征方面具有非常不同的人口,因此,其默认速率无法与其他区域进行真正比较。


下面的特征不具有相同的趋势,因此具有85%的低趋势相关性。 这两个指标可用于删除有噪声的特征。

640?wx_fmt=png

当存在许多特征并且它们彼此相关时,丢弃低趋势相关特征的效果很好。 它可以减少过度拟合和其他相关特征,避免信息丢失。 同样重要的是不要删除太多重要特征,因为它可能会导致性能下降。 此外,你无法使用特征重要性识别这些噪声特征,因为它们可能非常重要且仍然非常嘈杂!

使用来自不同时间段的测试数据效果更好,因为这样就可以确定特征趋势是否随时间变化。

featexp中的get_trend_stats()函数返回一个具有趋势相关性的数据框,并针对每个特征进行更改。

from featexp import get_trend_stats
stats = get_trend_stats(data=data_train, target_col='target', data_test=data_test)

640?wx_fmt=png

让我们实际尝试在数据中删除具有低趋势相关性的特征,并查看结果如何改进。

640?wx_fmt=png

我们可以看到,降低特征的趋势相关阈值越高,排行榜(LB)AUC越高。 不丢弃重要特征进一步将LB AUC提高至0.74。 它也很有趣,并且关于测试AUC不会像LB AUC那样变化。 确保您的验证策略正确,以便本地测试AUC遵循LB AUC也很重要。 整个代码可以在featexp_demo notebook中找到。


04

特征工程

通过查看这些图表获得的见解有助于创建更好的特征。 只需更好地了解数据就可以实现更好的特征工程。 但是,除此之外,它还可以帮助改进现有特征。 让我们看看另一个特征EXT_SOURCE_1:

640?wx_fmt=png

具有较高EXT_SOURCE_1值的客户具有较低的默认费率。但是,第一个bin(约8%默认率)不遵循特征趋势(上升然后下降)。它只有-99.985左右的负值和大量人口。这可能意味着这些是特殊值,因此不遵循特征趋势。幸运的是,非线性模型在学习这种关系时不会有问题。但是,对于像逻辑回归这样的线性模型,这些特殊值和空值(将显示为单独的bin)应该用来自具有相似默认速率的bin的值来估算,而不是简单地用特征均值来估算。


05

特征重要性

Featexp还可以帮助您衡量特征的重要性。 DAYS_BIRTH和EXT_SOURCE_1都有一个很好的趋势。但是,EXT_SOURCE_1的人口集中在特殊值箱中,暗示该特征对大多数客户具有相同的信息,因此无法很好地区分它们。这说明它可能没有DAYS_BIRTH那么重要。基于XGBoost模型的特征重要性,DAYS_BIRTH实际上比EXT_SOURCE_1更重要。


06

特征调试

查看Featexp的图表可以帮助你通过执行以下两项操作来捕获复杂特征工程代码中的错误:

640?wx_fmt=png

  1. 检查要素的人口分布是否正确。 由于小错误,我个人遇到过多次极端情况。

  2. 在查看这些图之前,总是假设特征趋势会是什么样子。 特征趋势看起来不是你预期的可能暗示某些问题。 坦率地说,这个假设趋势的过程使ML模型更有趣!


07

数据泄露检测

从目标到特征的数据泄漏导致过度拟合。 漏洞特征具有很高的特征重要性。 但是,理解为什么在特征中发生泄漏是困难的。 这时可以通过查看featexp图进一步确定。

以下特征在'Nulls'箱中的默认率为0%,在所有其他箱中为100%。 显然,这是泄漏的极端情况。 仅当客户违约时,此特征才有价值。 基于该特征的原因,这可能是因为一个错误或该特征实际上只为默认者填充(在这种情况下应该删除它)。 了解泄漏特征的问题可以进行更快的调试。

640?wx_fmt=png


08

特征监测

由于featexp计算两个数据集之间的趋势相关性,因此可以很容易地用于模型监控。 每次重新训练模型时,都可以将新的训练数据与经过良好测试的训练数据进行比较(通常是在你第一次构建模型时训练数据)。 趋势关联可以帮助你监控特征是否有任何更改。 它与目标的关系等等。



本文编译自:https://towardsdatascience.com/my-secret-sauce-to-be-in-top-2-of-a-kaggle-competition-57cff0677d3c





 640?wx_fmt=gif

END








往期回顾之作者刘威威


【1】一些fancy的GAN应用

【2】从0到1 实现YOLO v3 (Part one)

【3】从0到1 实现YOLO v3 (part two)

【4】全面解读Group Normbalization-(吴育昕-何凯明 重磅之作)

【5】免费使用谷歌GPU资源训练自己的深度模型

【6】风格迁移原理及tensorflow实现-附代码

【7】手把手教你搭建目标检测器-附代码









机器学习算法工程师


                            一个用心的公众号

640?wx_fmt=jpeg

长按,识别,加关注

进群,学习,得帮助

你的关注,我们的热度,

我们一定给你学习最大的帮助





2018-11-16 11:12:26 weixin_34343000 阅读数 32

a170f5deb812c0418253a629f1740ec6cbfec8c0

我经常被朋友和大学生问到“如何入门机器学习或数据科学”。 

08416d99d7bdc0d8fed7c41a65dfea69c497f07f

所以,这是我的答案……

前言

早些时候,我不太确定。我会说类似“学这门课”或“读这本教程”或“先学Python(这是我做过的事情)”。但是现在,随着我越来越深入这个领域,我开始意识到我采取的措施的缺点。

所以,事后看来,我认为“入门” 机器学习或数据科学的最佳途径可能是通过Kaggle。

在这篇文章中,我将告诉您为什么我这么认为,以及 如果我的推理令您信服,您将如何做到这一点。

注意:我是一名学生。我不是专业的数据科学家或机器学习工程师。我绝对不是Kaggle的专家。所以,请有保留地采纳我的意见和观点。 :-)

但首先,请允许我介绍一下Kaggle并澄清一些关于它的误解。

你可能听说过Kaggle作为一个网站,为机器学习比赛颁发令人难以置信的现金奖励。

b741c67081636fa4cf263e28e96be46763540fac

Kaggle举办的比赛获得最高奖金

(是的,这些是百万美元以上的奖金!)

正是这种名气也引起了很多关于平台的误解,让新手们入门比原来更加犹豫不决。

如果你之前从未听说过Kaggle,也不要担心,因此,不要在意下面提到的任何误解。这篇文章仍然完全有道理。对待下一部分就当我向你介绍Kaggle一样。

误解

1. “Kaggle是一个举办机器学习竞赛的网站”

这是对“Kaggle是什么”的不完整描述!我认为竞赛(以及它们丰厚的现金奖励)并不是Kaggle的真谛。看看他们网站的标题——

5db6bd6ed8f20b6cdbc8a507a96a906d501866b4

竞赛仅仅是Kaggle的一部分

除了举办竞赛,(它目前已经举办过大概300场比赛),Kaggle还主持了3项非常重要的内容:

 ●  Datasets

https://www.kaggle.com/datasets

即使是与任何竞赛都无关的那些:与仅仅300个竞赛(在撰写本文时)相比,它包含9500多个数据集。因此,您可以通过选择任何您感兴趣的数据集来提高您的技能。

395bf1b1ca8c8dc898d39da133eb624a94d2a664

我觉得最有趣的一些数据集

 ●  Kernels:

https://www.kaggle.com/kernels


它们只是Kaggle的Jupyter笔记本版本,反过来,它只是一种非常有效和酷炫的共享代码方式,以及大量的可视化,输出和解释。“内核”选项卡将您带到一个公共内核列表,人们用它来展示一些新工具或分享他们对某些特定数据集的专业知识或见解。

 ●  Learn:

https://www.kaggle.com/learn/overview

此选项卡包含免费且实用的实践课程, 这些课程涵盖了快速入门所需的最低前置课程。他们最好的地方是什么?——一切都是使用Kaggle的内核完成的(如上所述)。这意味着您可以互动和学习……通过数小时的学习材料不再被动阅读!

6a2f8af216d085ec31a3cb12cd32391965f39cca

所有这些共同使Kaggle不仅仅是一个举办比赛的网站。现在,它已成为一个完整的基于项目的数据科学学习环境。在本节之后,我将详细讨论Kaggle的这个方面。

2. “只有专家(具有多年经验的博士或经验丰富的机器学习从业者)才能参加并赢得Kaggle比赛”

30a1bb6ac16b01dc34cd9c90edc5da01c7a26824

如果您这么认为,我恳请您阅读下面这篇文章:

高中生自学成为AI大神——如果你深入到人工智能的世界,你肯定知道谷歌云拥有的平台Kaggle:

https://mashable.com/2017/07/28/16-year-old-ai-genius/

觉得文章太长不想看的,可以浏览下面的文章摘要:

一个高中的孩子仅因为好奇并投入比赛就(或者不那么简单,或许?)成为了Kaggle比赛大神。用他自己的话说:

“我不知道算法背后的所有数学原理,但就实际使用算法而言,我认为对其运作方式有一个合理的了解更为重要。”

3. “在参加Kaggle比赛之前,我应该再参加一些课程并学习先进的机器学习概念,这样我的胜算更大”

机器学习中最重要的部分是探索数据分析(或EDA)和特征工程,而不是模型拟合。事实上,许多Kaggle大神认为,新人会很快掉进复杂的模型的坑里,而事实上简单的模型就可以让你走得很远。

爱因斯坦曾经说过:

“任何一个有智力的笨蛋都可以把事情搞得更大,更复杂。往相反的方向前进则需要天分,以及很大的勇气。”

此外,许多挑战都有结构化数据,这意味着所有数据都存在于整齐的行和列中。没有复杂的文本或图像数据。因此,简单的算法(没有花里胡哨的神经网络)通常是这种数据集的获胜算法。在这种情况下,EDA可能是获胜解决方案与其他解决方案的区别所在。

现在,让我们继续讨论为什么你应该使用Kaggle来入门机器学习或数据科学。

你为什么要从Kaggle开始?

理由1:准确了解入门必备内容

关于Kaggle Learn的机器学习课程不会教你机器学习算法背后的理论和数学。相反,它专注于仅教授在分析和建模数据集时绝对必要的事物。类似地,那里的Python课程不会让你成为Python的专家,但它将确保你了解足够知识以进入下一个级别。

关于Kaggle Learn的机器学习课程:

https://www.kaggle.com/learn/machine-learning

Python课程:

https://www.kaggle.com/learn/python

这样可以最大限度地减少您在被动学习中花费的时间,并确保您已准备好尽快应对有趣的挑战。

理由2:体现了注重实践的精神

我相信做项目是最有效的方式,完成一个项目,你就学会了整个过程。我的意思是说,不是在你学到东西之后搜索相关的项目,而是从项目开始并学习使项目变为现实所需的一切可能更好。

正如惠特尼约翰逊在Masters of Scale podcast中所说:

“基本上,你,我,每个人,我们都想学习,跳跃,然后重复。”

Masters of Scale podcast:

https://mastersofscale.com/stacy-brown-philpot-keep-humans-in-the-equation/

我相信学习这种方式更令人兴奋和有效。

几周前我写了一篇关于上述方法的文章。名为——“ 零基础如何(和为什么)开始构建有用的,现实世界的软件 ”。所以,如果你没有看过可以看一下:

https://medium.freecodecamp.org/how-and-why-to-start-building-useful-real-world-software-with-no-experience-46f265eaf38

5bc9478dc83156f4c0ee2fcc16c3ac27b791623f

我花了一番时间才承认只读一本书不是学习而是娱乐,我相信课程和教程也是如此

但是当你没有一个项目可以实践一波时,这个想法完全没用。做一个有趣的项目很难,因为:

a. 很难找到一个有趣的想法

由于需要有合适的数据集,因此实现数据科学项目的想法似乎更加困难。

b. 我不知道该怎么处理我的知识中的漏洞

有时当我开始某个项目时,感觉就像有很多东西我仍然不知道。我觉得我甚至不知道学习前置课程去构建这个东西的先决条件。我触及到知识盲区了吗?我如何去学习我不知道的东西?

那就是所有的动力开始消失的时候。

c. 我经常被“卡住”

似乎在构建过程中我在消除一个又一个路障。如果能有一群人一起学并知道如何解决这个问题,那就太好了。

以下是Kaggle如何为所有问题提供解决方案:

解决方案a:Datasets和Competitions : 

https://www.kaggle.com/datasets

https://www.kaggle.com/competitions

大约有300个竞赛挑战,全部附带公共数据集,总共9500多个数据集(并且不断增加)这个地方就像是数据科学/机器学习项目的创意宝库。

解决方案b:Kernels和Learn :

https://www.kaggle.com/kernels

https://www.kaggle.com/learn/overview

让我告诉你Kernels是如何使用的。

所有数据集都有一个公共的Kernels选项卡,人们可以在这里发布他们的分析,以造福整个社区。因此,只要您不知道下一步该做什么,您就可以通过查看这些Kernels帖子来获得一些想法。此外,很多Kernels帖都是专为帮助初学者而编写的。

解决方案c:Kernels和Discussion :

https://www.kaggle.com/kernels

https://www.kaggle.com/discussion

除了我刚才描述的公共的Kernel之外,每个竞赛和每个数据集也都有自己的讨论论坛。所以,你总能找个一个提问的地方。

除此之外,在比赛期间,许多参与者撰写了有趣的问题,凸显了数据集的特征和怪癖,一些参与者甚至在论坛上发布了代码性能良好的基准。比赛结束后,获奖者分享他们的获奖方案是很常见的。

就像下面这篇文章写的“向最好的学习”:

http://blog.kaggle.com/2014/08/01/learning-from-the-best/

理由3:解决真实问题的真实数据=>真正的动机

Kaggle上的挑战是由为解决现实问题的公司举办的。他们提供的数据集是真实的。所有奖金都是真实的。这意味着您可以通过解决实际问题来学习数据科学/机器学习并练习您的技能。

af1049059a5fa076bb807b3b76cf5e071d5c7591

如果您以前尝试过竞争性编程,那么当我说这些网站上承载的问题有时太不现实时,您可能会与我联系。我的意思是为什么我要编写一个程序来找出数组中毕达哥拉斯三元组的数量?那要实现什么!?

我并不想断言这些问题很容易;我发现它们非常困难。我也没想要降低托管此类问题的网站的重要性;它们是测试和改进数据结构和算法知识的好方法。

我只是说这对我来说太虚无缥缈了。当您尝试解决的问题是真实的时,您将始终希望努力改进您的解决方案。这将提供学习和成长的动力。这就是参加Kaggle挑战所能获得的。

争论的另一面:“机器学习不是Kaggle竞赛”

我将不再提及本次辩论的另一面,它认为机器学习不是Kaggle比赛,而且Kaggle比赛只代表了实际数据科学工作的“旅游观光”。

好吧,也许这是真的。也许真正的数据科学工作与Kaggle竞赛中的方法不同。我没有以专业的身份工作,所以我不知道如何评论。

但我所做的,很多时候,是使用教程和课程来学习一些东西。每一次,我觉得教程/课程与学习动机之间存在脱节。我会学到一些东西,因为它在教程/课程中存在,并希望它可以在一些遥远的,神秘的未来中使用。

另一方面,当我正在进行Kaggle挑战时,我确实需要不断学习。曾经有一个阶段,我会立即应用我学到的东西,看看它的效果。这给了我学习所有知识的动力和凝聚力。

如何开始?

Kaggle拥有所有那些有野心的现实世界的问题有一个缺点,它可能是初学者进入的一个令人生畏的地方。我理解这种感觉,因为我最近开始在Kaggle上入门。但是,一旦我克服了最初的障碍,我对它的社区以及它给我的学习机会感到非常景仰。

所以,在这里我试着说明如何开始:

第1步:掌握必要的基础知识

选择一种语言:Python或R语言。

完成后,请前往Kaggle Learn快速了解该语言的基础知识,机器学习和数据可视化技术。

Kaggle Learn:

https://www.kaggle.com/learn/overview

18e1979526a42e9d738357f14085d5b0ae98cb1b

关于Kaggle Learn的课程

第2步:找到一个有趣的挑战/数据集

我建议您在开始时选择一个playground比赛或一个比较受欢迎的比赛。通过这种方式,您可以确保找到至少一些旨在帮助新手的公共Kernel帖子。

记住你的目标不是赢得比赛。它是学习和提高您的数据科学/机器学习的知识。

e41aa6c57483405bd85f909992e744a628b845d6

如果您仍不确定,请任选其中一个

第3步:探索公共内核

它们将帮助您了解该领域的一般工作流程以及其他人为此竞赛所采取的特定方法。

通常,这些内核会告诉您机器学习/数据科学中您不知道的内容。当你遇到一个不熟悉的术语时,不要感到沮丧。

了解您需要知道的是知识的第一步。

它们只是您需要学习以帮助您成长的东西。但在你这样做之前……

第4步:开发自己的Kernel

继续自己的分析工作。利用您当前的知识尽可能多地构建。将你在先前步骤中学到的所有内容应用到你自己的Kernel中。

第5步:了解您的需求并返回第4步

现在,你学习了。有时,它只是一篇短文,而在其他时候它可能是一个干货满满的教程/课程。请记住,您需要回到第3步并使用您在Kernel中学到的知识。这样您就可以创建所需的循环——“学习,跨越和重复”!

第6步:返回第3步以完善分析

一旦构建了完整的预测模型,就可以实现此步骤。所以,祝贺你!

现在您可能希望完善分析。要做到这一点,你可以回到第3步,看看其他人做了什么。这可以为您提供有关改进模型的想法。或者,如果你觉得你已经尝试了所有东西,但碰壁了,那么在论坛上寻求帮助可能会有所帮助。

5befcfe2423dc4e027222adc570a3181ccfecf0c

这是一个讨论的例子

https://www.kaggle.com/c/amazon-employee-access-challenge/discussion/4838

棒!

现在去做更多挑战,分析更多数据集,学习更新的东西!

与其他资源的链接

1. 学习Python

Python已经变得非常受欢迎。这意味着有大量优秀的指南和教程可以帮助您开始使用该语言。这是我第一次学习Python时使用的两种资源:

 ●  Python3教程

https://www.python-course.eu/python3_interactive.php

 ●  从O'Reilly学习Python

http://shop.oreilly.com/product/0636920028154.do

显然,这些并没有为学习Python提供明确的资源列表,但这些是我入门时最适合我的资源。

2. 机器学习文章

在深入了解某个领域之前,您可能想知道它是什么。所以,这里有一些文章对机器学习进行了有趣的介绍:

 ●  EliteDataScience上的“如何学习机器学习之自学入门”一篇写得很好的文章,在介绍机器学习方面做得很好,甚至还开设了自学课程!

https://elitedatascience.com/learn-machine-learning

 ●  Vishal Maini的“人类学习机器学习指南”本指南旨在供任何人使用。将讨论概率、统计、编程、线性代数和微积分的基本概念,从本系列获得干货无需预备知识。”

https://medium.com/machine-learning-for-humans/why-machine-learning-matters-6164faf1df12

 ●  Vishal Maini的“最佳机器学习资源”本文是上述系列的一部分。我单独提到它是因为它有一套与机器学习相关的非常好非常全面的链接。

https://medium.com/machine-learning-for-humans/how-to-learn-machine-learning-24d53bb64aa1

 ●  Adam Geitgey的“机器学习很有趣”阅读本系列文章,了解机器学习的优点。虽然这篇比较高深,但它可以作为了解该领域的更多动力。

https://medium.com/@ageitgey

3. 数据科学博客

以下是一些与数据科学相关的好博客,您可以查看:

 ●  方差解释

http://varianceexplained.org/

 ●  成为一名数据科学家

https://www.becomingadatascientist.com

 ●  Mark Meloon

https://www.markmeloon.com/

 ●  Julia Silge

https://juliasilge.com/blog/

好吧那么。谢谢你的阅读。我希望这对你有所帮助。

我真的相信通过做项目来学习是一种非常有益的体验,但这很难。Kaggle让你轻松自如。Kaggle竞赛负责提出任务,为您获取数据,将其清理成一些可用的形式,并有一个预先定义的指标来优化。

但正如其他人所指出的那样,这是数据科学家80%的工作。所以,虽然Kaggle是一个开始你旅程的好工具,但仅仅把你带到最后是不够的。您需要在数据科学产品组合中展示其他内容。

如何构建数据科学产品组合:

https://towardsdatascience.com/how-to-build-a-data-science-portfolio-5f566517c79c

因此,我正在尝试创建一个社区——Build to Learn。在这里,人们可以分享他们的项目想法(欢迎稀奇古怪的想法!)或对工具的渴望,并在其他成员的帮助下构建它们。它是由Web开发人员,移动应用程序开发人员和机器学习工程师组成的社区。因此,无论您的想法或问题属于哪个领域,您都可以期待与其他成员一起获得至少一些帮助。


原文发布时间为:2018-11-15
本文作者:NITYTESH AGARWAL
本文来自云栖社区合作伙伴“数据派THU”,了解相关信息可以关注“数据派THU”。
2019-02-26 15:17:55 artist_244926 阅读数 158

Kaggle_机器学习_实例1_titannic

#-*- coding:utf-8 -*-
import time
start_time = time.clock()

import pandas as pd
import numpy as np
from pandas import Series, DataFrame
import matplotlib.pyplot as plt
import sklearn.preprocessing as preprocessing
from sklearn.ensemble import RandomForestRegressor
from sklearn import linear_model

pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

data_train = pd.read_csv("C:/Users/13369/Desktop/kaggle/kaggle/Kaggle_Titanic/Train.csv")
### 使用 RandomForestClassifier 填补缺失的年龄属性
def set_missing_ages(df):
    # 把已有的数值型特征取出来丢进Random Forest Regressor中
    age_df = df[['Age', 'Fare', 'Parch', 'SibSp', 'Pclass']]
    # 乘客分成已知年龄和未知年龄两部分
    known_age = age_df[age_df.Age.notnull()].values
    unknown_age = age_df[age_df.Age.isnull()].values
    # y即目标年龄-将每个人的年龄提取出来
    y = known_age[:, 0]
    # X即特征属性值-除开年龄之外,其他的所有信息都提取出来
    X = known_age[:, 1:]
    # fit到RandomForestRegressor之中
    rfr = RandomForestRegressor(random_state=0, n_estimators=2000, n_jobs=-1)
    rfr.fit(X, y)
    # 用得到的模型进行未知年龄结果预测
    predictedAges = rfr.predict(unknown_age[:, 1::])
    # 用得到的预测结果填补原缺失数据
    df.loc[(df.Age.isnull()), 'Age'] = predictedAges
    return df, rfr
#判断cabin是是否存在,转换成yes与no的形式
def set_Cabin_type(df):
    df.loc[(df.Cabin.notnull()), 'Cabin'] = "Yes"
    df.loc[(df.Cabin.isnull()), 'Cabin'] = "No"
    return df

data_train, rfr = set_missing_ages(data_train)#这是对训练集做的年龄补充
data_train = set_Cabin_type(data_train)
#对cabin,embarked,sex,pclass做one—hot处理
dummies_Cabin = pd.get_dummies(data_train['Cabin'], prefix= 'Cabin')
dummies_Embarked = pd.get_dummies(data_train['Embarked'], prefix= 'Embarked')
dummies_Sex = pd.get_dummies(data_train['Sex'], prefix= 'Sex')
dummies_Pclass = pd.get_dummies(data_train['Pclass'], prefix= 'Pclass')
df = pd.concat([data_train, dummies_Cabin, dummies_Embarked, dummies_Sex, dummies_Pclass], axis=1)#以横轴的形式对应合并,没有的值定位Nan
df.drop(['Pclass', 'Name', 'Sex', 'Ticket', 'Cabin', 'Embarked'], axis=1, inplace=True)#经过one—hot之后需要删除原来的数据,并且剔除无用的数据
#对年龄,fare做标准化处理
scaler = preprocessing.StandardScaler()
age_scale_data = np.array(df['Age']).reshape(-1, 1)
age_scale_param = scaler.fit(age_scale_data)
df['Age_scaled'] = scaler.fit_transform(age_scale_data, age_scale_param)
fare_scale_data = np.array(df['Fare']).reshape(-1, 1)
fare_scale_param = scaler.fit(fare_scale_data )
df['Fare_scaled'] = scaler.fit_transform(fare_scale_data , fare_scale_param)
#只保留regex里面有显示
train_df = df.filter(regex='Survived|Age_.*|SibSp|Parch|Fare_.*|Cabin_.*|Embarked_.*|Sex_.*|Pclass_.*')
train_np = train_df.values
y = train_np[:, 0]# y即Survival结果
X = train_np[:, 1:]# X即特征属性值
clf = linear_model.LogisticRegression(C=1.0, penalty='l1', tol=1e-6)# fit到RandomForestRegressor之中
clf.fit(X, y)
"""接下来对测试集做同样的数据补充操作"""
data_test = pd.read_csv("C:/Users/13369/Desktop/kaggle/kaggle/Kaggle_Titanic/test.csv")
data_test.loc[(data_test.Fare.isnull()), 'Fare'] = 0
tmp_df = data_test[['Age','Fare', 'Parch', 'SibSp', 'Pclass']]
null_age = tmp_df[data_test.Age.isnull()].values
# 根据特征属性X预测年龄并补上
X_test = null_age[:, 1:]
predictedAges = rfr.predict(X_test)#对测试集做年龄补充
data_test.loc[(data_test.Age.isnull()), 'Age' ] = predictedAges
#以上为补齐缺失的年龄值
#以为为做one_hot处理
data_test = set_Cabin_type(data_test)
dummies_Cabin = pd.get_dummies(data_test['Cabin'], prefix= 'Cabin')
dummies_Embarked = pd.get_dummies(data_test['Embarked'], prefix= 'Embarked')
dummies_Sex = pd.get_dummies(data_test['Sex'], prefix= 'Sex')
dummies_Pclass = pd.get_dummies(data_test['Pclass'], prefix= 'Pclass')
#删除多余项+标准化age与fare
df_test = pd.concat([data_test, dummies_Cabin, dummies_Embarked, dummies_Sex, dummies_Pclass], axis=1)
df_test.drop(['Pclass', 'Name', 'Sex', 'Ticket', 'Cabin', 'Embarked'], axis=1, inplace=True)
age_data = np.array(df_test['Age']).reshape(-1, 1)
df_test['Age_scaled'] = scaler.fit_transform(age_data, age_scale_param)
fare_data = np.array(df_test['Age']).reshape(-1, 1)
df_test['Fare_scaled'] = scaler.fit_transform(fare_data, fare_scale_param)
test = df_test.filter(regex='Age_.*|SibSp|Parch|Fare_.*|Cabin_.*|Embarked_.*|Sex_.*|Pclass_.*')
#出结果
predictions = clf.predict(test)
print(predictions)
#保存结果
# result = pd.DataFrame({'PassengerId':data_test['PassengerId'].values, 'Survived':predictions.astype(np.int32)})
# result.to_csv("logistic_regression_predictions.csv", index=False)

end_time = time.clock()
#做曲线拟合
print("the final time is:", end_time - start_time)

# 用sklearn的learning_curve得到training_score和cv_score,使用matplotlib画出learning curve
def plot_learning_curve(estimator, title, X, y, ylim=None, cv=None, n_jobs=1,train_sizes=np.linspace(.05, 1., 20), verbose=0, plot=True):
    from sklearn.model_selection import learning_curve
    """
    画出data在某模型上的learning curve.
    参数解释
    ----------
    estimator : 你用的分类器。
    title : 表格的标题。
    X : 输入的feature,numpy类型
    y : 输入的target vector
    ylim : tuple格式的(ymin, ymax), 设定图像中纵坐标的最低点和最高点
    cv : 做cross-validation的时候,数据分成的份数,其中一份作为cv集,其余n-1份作为training(默认为3份)
    n_jobs : 并行的的任务数(默认1)
    """
    train_sizes, train_scores, test_scores = learning_curve(estimator, X, y, cv=cv, n_jobs=n_jobs, train_sizes=train_sizes, verbose=verbose)
    train_scores_mean = np.mean(train_scores, axis=1)
    train_scores_std = np.std(train_scores, axis=1)
    test_scores_mean = np.mean(test_scores, axis=1)
    test_scores_std = np.std(test_scores, axis=1)

    if plot:
        plt.figure()
        plt.title(title)
        if ylim is not None:
            plt.ylim(*ylim)
        plt.xlabel(u"训练样本数")
        plt.ylabel(u"得分")
        plt.gca().invert_yaxis()
        plt.grid()
        plt.fill_between(train_sizes, train_scores_mean - train_scores_std, train_scores_mean + train_scores_std,alpha=0.1, color="b")
        plt.fill_between(train_sizes, test_scores_mean - test_scores_std, test_scores_mean + test_scores_std,alpha=0.1, color="r")
        plt.plot(train_sizes, train_scores_mean, 'o-', color="b", label=u"训练集上得分")
        plt.plot(train_sizes, test_scores_mean, 'o-', color="r", label=u"交叉验证集上得分")
        plt.legend(loc="best")
        plt.draw()
        plt.gca().invert_yaxis()
        plt.show()
    midpoint = ((train_scores_mean[-1] + train_scores_std[-1]) + (test_scores_mean[-1] - test_scores_std[-1])) / 2
    diff = (train_scores_mean[-1] + train_scores_std[-1]) - (test_scores_mean[-1] - test_scores_std[-1])
    return midpoint, diff

# plot_learning_curve(clf, u"学习曲线", X, y)

(1)小组很多人都是0.7s左右,而我的运行时4s
(2)只是单纯的出结果,并没有做交叉验证
(3)模型融合没有实现

借鉴https://www.bilibili.com/video/av42834527