模型调优与融合
0.调优模型,让模型在给定的数据集上有更好的效果。
一、前序工作流程
0.数据清洗
(1)不可信的样本丢掉
(2)缺省值极多的字段考虑不用
1.数据采样:
(1)下/上采样
(2)保证样本均衡
2.特征处理(特征工程)
数值型
类别型
时间型
文本型
统计型
组合特征
3.特征选择(特征工程)
(1)过滤型
(2)包裹型
(3)嵌入型
4.数据处理
5.特征工程
6.模型选择
交叉验证(cross validation),尽量的把数据集中所有的数据都拿出来都参与到所有的k折交叉验证的过程中
交叉验证集做参数/模型选择
测试集只做模型效果评估(只做评估的手段)
K折交叉验证(k-fold cross validation)
7.交叉验证
交叉验证选取:sklearn.grid_search.GridSearchCV(网格搜索交叉验证,对候选参数组,每个都做一次交叉验证,验证效果好坏,用它在全部的数据上完成一次训练)
8寻找最佳超参数
二、模型优化
1.模型状态
(1)过拟合(overfitting/high variance)
(2)欠拟合(underfitting/high bias)
(3)模型效果优化1
过拟合:
找更多的数据来学习(最有效的方式,数据才是王道,数据驱动的解决方案)
增大正则化系数
特征选择
差异化模型融合
欠拟合:
找更多特征
减小正则化系数
2.权重分析
模型效果优化2:
线性模型的权重分析
线性或者线性kernel的model
Linear Regression
Logistic Regression
Linear SVM
.........
对权重绝对值高/低的特征
做更细化的工作
特征组合
3.bad-case分析
(1)分类问题
(2)回归问题
4.模型融合
(1)是什么? 把一组独立的学习器组合起来,如果学习器是同质的
Ensemble Learning是一组individual learner的组合
如果individual learner同质,称为base learner
如果individual learner 异质,那么称之为component learner
(2)为什么?
(3)Bagging
模型很多时候效果不好的原因是什么?过拟合
如何缓解过拟合?
用一个算法,不用全部的数据集,每次取出一个子集训练一个模型
分类:用这些模型的结果做vote
回归:对这些模型的结果取出平均值
用不同的算法:这些模型的结果做vote或者求出平均值(voting claafier)
(4)Stacking:用多种predictor结果作为特征训练
(5)Adaboost:调整样本权重的模型
(6)Gradient Boosting Tree:和 Adaboost思路类似,解决回归问题