分类
Ensemble Learning 集成学习
XGBoost
论文:XGBoost:
- a scalable tree boosting system
- higgs boson discovery with boosted trees
tgboost (github.com/wepe/thboost) 轮子,参考
LightGBM
GBDT
Random Forest
- RF和GBDT
- 一般,RF整体模型的训练和调参主要关注降低方差,所以可以设定较少的子模型并适当提高子模型的复杂度,并且可以适当降低子模型间的相关度
- GBDT主要关注降低偏差,所以可以设定较多的子模型并适当降低子模型的复杂度,但降低子模型间的相关度起到作用则较小
Logistic Regression
Deep Neural Network
SVM
问题
- 集成树算法在数据挖掘比赛中表现比较好
- 数据特点:
- 混合类型
- 缺失值
- 含离群点
- 长尾分布
- 数据特点:
注意:
训练前应对训练集做归一化/标准化,同时对测试集做相同操作
scaler = sklearn.preprocessing.StandardScaler().fit(train)
scaler.transform(train)
scaler.transform(test)
训练集和测试集的划分
- 训练集数据的数据采样模拟真实的测试环境,少偏差
- 样本整体分布一致,K-fold的CV即可
- 样本整体分布不一致,如受时间影响等
- 使用随机划分的方法常会带来严重的过拟合
- 如果数据呈现明显的时间序列特征,可采用滑窗法。
常见模型融合(降低模型方差)方法
- 融合基础:多个有差异性的基本模型
- 常用方法:
- 线性加权融合
- Rank融合 (适合排序评估指标,如AUC)
- Stacking (相对更健壮?)
- Blending (stacked ensembling, 比Stacking简单,能防止信息泄露,缺点:只用了数据一部分,可能会对留出集过拟合)
- 具体参考 Kaggle ensemble guide
- 模型融合多数时候是有效的,但并非越复杂的模型融合方法带来的结果一定越好!
流程
- 看评测指标
了解数据
- 字段
- 统计工作:多少条,多少用户,时间段等以及 测试集与训练集的交集 用户,时间……
数据划分
- 如受时间等影响,滑窗法 (获取特征窗(训练),标签窗(验证和预测))
特征工程
- 特殊特征,如从标签区间提取的
流程目标
- classifying,数据分类
- correlating,特征关联
- converting,特征值转化,将一些非数值之类的特征值转为等效数值类型
- completing,将缺失的特征值补上
- correcting,异常检测,抛弃,重点分析?
- creating,基于现有的特征创造新的特征
- charting
https://www.kaggle.com/yangxnn/titanic-data-science-solutions
其他
one-hot encoding 独热编码
资料
- 各种评测指标的实现代码:https://github.com/benhamner/Metrics
- 模型融合:https://github.com/MLWave/Kaggle-Ensemble-Guide