kaggle创办于2010,后被google收购,是一个数据科学、机器学习竞赛和分享平台。
kaggle winner = feature engineering + ensemble + good machine + domain knowledge
feature engineering(取决于对数据领域的了解程度) 为主,ensemble为辅
1. kaggle网站介绍
competitions
面向初学者
- getting started
- 新手上路
- playground
- 有趣的比赛,主要看创意,而非具体的研究问题
- in class
- 学校老师布置的作业,有些是公开的,有些不公开
面向竞赛者
featured
- 解决商业问题,提供奖金
research
- 解决学界前沿问题,有的有奖金
recruitment
- 提供实习,面试机会
datasets
- 比赛所用到的数据集都在这(数据主要为csv格式,提交也是csv)
kernels(类似ipython notebook,文本和代码组成的块,可以评论)
- 支持线上调试和运行你的代码
- 可以看到其他参赛者资源公开的模型代码,学习交流最佳所在
- 分public kernel和private kernel(仅组员可看)
disscussion
- 论坛
- CV score 模型本地交叉验证(cross-validation)的得分
- LB score 提交后的排行榜(Leader Board) 得分。
- public LB 临时排名会抽取提交数据的25%左右
- private LB 比赛结束时会重新进行最终的排名(用剩下的75%的数据)
2. kaggle竞赛排名机制
参赛者每天最多提交5次测试集的预测结果(若原先进行比赛的多个人忽然组队,其提交总数<=比赛开始天数x5),每次提交,kaggle从中抽25%~33%,根据准确率进行临时排名(pubic LB)
结束前,参赛者可指定2个已经提交的结果,kaggle计算每个结果 private LB 得分并自动挑选得分高的一个作为你的最终成绩。
- 可选出同时兼顾准确率和泛化能力的模型
3. 常用模型
-
主流:
- Random Forest 随机森林
- Gradient Boosting 梯度提升树 (难度稍高,但可视化效果会好很多)
- GBDT 梯度决策树 (Gradient Boosted Decision Trees)
- Extra Randomized Trees 极端随机树(随机森林的变种)
- xgboost(梯度提升的高级实现)
-
性能稍差
-
SVM
-
Logistic Regression
-
Linear Regression
-
Neural Networks
-
4. 比赛任务
-
分类
-
回归
-
推荐
-
排序
5. 比赛类型
- 数据挖掘(大部分)
- 分类、回归、预测
- 面对结构化数据(表格数据),包含各种预测问题(预测销量,预测点击率,推荐排序),共性是理解数据,理解问题,从数据中找到有用的信息来预测,故关键在特征上
- 主流算法:
- 梯度决策树(GBDT)
- 现成的包有:xgboost、lightgbm、catboost
- lightgbm速度快,单模型的效果也更好
- 随机森林
- 梯度提升树
- 梯度决策树(GBDT)
- cv图像处理
- 分类、定位、检测、分割
- 主要用到深度学习的技术,基于其进行改进,较少涉及特征
- NLP 文本
- 情感分析(sentiment analysis)
- 主流评价指标(Evaluation Metric)
- Multi-Class Log-Loss
- 常用算法
- TF-IDF 词频-逆文档频率
- Logistic Regression 逻辑斯蒂回归
- Naive Bayesian 朴素贝叶斯
- SVM 支持向量机(数据标准化?)
- xgboost(boosting的一种)
- word2vec
- LSTM
- 库
- NLTK
- gensim(Word2Vec)
- xgboost
- lightgbm
- NLP speech 语音
- 分类
6. kaggle比赛大致流程
-
理解背景
-
EDA(Exploratory Data Analysis)数据探索性分析(数据探索和验证)
-
统计分析(panda)
-
对于数值变量
-
获得统计量(min, max, mean, std,meduim)
-
观察label是否均衡,不均衡的话需进行多抽(over sample)少数类,少抽(down sample)多数类
-
统计数值变量两两之间相关系数
-
-
对于文本变量
- 词频TF、TF-IDF、文本长度
-
-
可视化(matplotlib, seaborn) 理解数据
- 查看目标变量的分布,当分布不平衡时,评分标准和使用模型的不同,可能严重影响性能。
- 对数值变量:Box Plot 直观查看分布
- 对坐标类数据:Scatter Plot 查看分布趋势,和是否有离群点
- 对于分类问题:数据label的不同,用不同颜色绘制,有助于feature的构造
- 绘制变量两两之间的分布和相关系数矩阵
-
target 的预测偏差 90% 是异常值贡献的,
-
-
Data Preprocessing(数据预处理) 在构造feature之前,进行预处理
- 数值变量(Numerical Variable):处理离群点,缺失值,异常值
- 类别型变量(Categorical Variable):转化为one-hot编码
- 独热编码(one-hot Encoding) 使数据变得稀疏
- 对n个状态用n个比特表示 eg: 有3个状态,就是:001、010、100
- 独热编码(one-hot Encoding) 使数据变得稀疏
-
Feature Engineering 特征工程
- 挑选重要的特征 (比如 top10) 进行分析和构建新特征,然后测试,然后扩大范围 (比如 top20) 重复以上过程
-
模型(如果有时间,各种常见的模型都试试)
- 比赛一般先训练一个baseline model(基模型),然后再优化。
- 零模型:不用模型去预测,直接把结果设置为全0或全均值提交。
- 先提交零模型再提交基模型,可以看模型的效果,更方便对模型进行评估
- 如果基模型还不如零模型,可能是太多异常值导致
- 模型选择和交叉验证
- 交叉验证
- 数据分布较随机时,5-fold(5折)就够了,不放心,可提到10折,折数越大,越
-
Ensemble 模型融合(涉及到集成学习:将多个弱学习器结合成一个强学习器)
- 训练完模型后,要考虑模型的效率
- 研究模型学习曲线,判断模型是否存在过拟合或欠拟合现象,做出调整
- 分析模型权重参数,对权重绝对值过高/低的特征,可进行细化或特征组合
- 分析bad-case,是否还有优化的地方
- 模型融合,将多个个体学习器按一定策略结合成一个学习器(集成)
- 有四种思想:
- 主流
- bagging(代表:随机森林RF)
- boosting(提升。代表:梯度提升树GB)
- 不太主流
- stacking(堆叠)
- blending(混合)
- 主流
- 训练完模型后,要考虑模型的效率
-
本地评估体系
trust your cv
- 以本地cv为评估体系,而不是public LB上得分,因为最后的排名是private LB,private LB和public LB的得分不一定是高度一致的。
- eg: 手动校正异常值可以提高public LB得分,但是对private LB 得分无帮助(在public LB中异常点比随机水平高时)
- 以本地cv为评估体系,而不是public LB上得分,因为最后的排名是private LB,private LB和public LB的得分不一定是高度一致的。
-
本地评估体系
trust your cv
- 以本地cv为评估体系,而不是public LB上得分,因为最后的排名是private LB,private LB和public LB的得分不一定是高度一致的。
- eg: 手动校正异常值可以提高public LB得分,但是对private LB 得分无帮助(在public LB中异常点比随机水平高时)
- 以本地cv为评估体系,而不是public LB上得分,因为最后的排名是private LB,private LB和public LB的得分不一定是高度一致的。