在数据分析了之后就可以进行模型的建立了,机器学习模型有很多,建议均作尝试,不仅可以测试效果,还可以学习各种模型的使用技巧。其实,几乎每一种模型都有回归和分类两种版本,并且直接有scikit-learn、XGBoost、LightGBM这些库,直接可以用!
对于模型,经典的要会推导,每种应用的模型要明确工作原理,大白话讲出来!对于重要的公式要回写。
(random forest一般效果比较好)
错误分析->发现新特征->训练新模型->错误分析
最重要的一点,调参(超参数),我们的valid data就是用来找出来最好的参数的
根据经验,选出对模型效果影响较大的超参。
按照经验设置超参的搜索空间,比如学习率的搜索空间为[0.001,0.1]。
选择搜索算法,比如Random Search、Grid Search和一些启发式搜索的方法。
验证模型的泛化能力
这里再提一下train valid test
train和valid都是已知的数据,通过留出法/k fold生成的两部分,通常是7:3
test就是标签未知了@!
交叉验证是将整个训练数据随机分成K份,训练K个模型,每次取其中的K-1份作为Train Set,留出1份作为Valid Set,因此也叫做K-fold。至于这个K,你想取多少都可以,但一般选在3~10之间。我们可以用K个模型得分的mean和std,来评判模型得好坏(mean体现模型的能力,std体现模型是否容易过拟合),并且用K-fold的验证结果通常会比较可靠。
如果数据出现Label不均衡情况,可以使用Stratified K-fold,这样得到的Train Set和Test Set的Label比例是大致相同。
PS:本身样本label不均衡就是个问题,会让模型向数目多的类别偏好
最后一句话:ensemble很给力!尤其是在分类任务
常见的Ensemble方法有Bagging、Boosting、Stacking、Blending。
Bagging是将多个模型(基学习器)的预测结果简单地加权平均或者投票。Bagging的好处在于可以并行地训练基学习器,其中Random Forest就用到了Bagging的思想。
Boosting的思想有点像知错能改,每训练一个基学习器,是为了弥补上一个基学习器所犯的错误。其中著名的算法有AdaBoost,Gradient Boost。Gradient Boost Tree就用到了这种思想。
Stacking是用新的模型(次学习器)去学习怎么组合那些基学习器,如果把Bagging看作是多个基分类器的线性组合,那么Stacking就是多个基分类器的非线性组合。Stacking可以很灵活,它可以将学习器一层一层地堆砌起来,形成一个网状的结构
例:
A和B可以看作是基学习器,C、D、E都是次学习器。
Stage1: A和B各自写出了答案。
Stage2: C和D偷看了A和B的答案,C认为A和B一样聪明,D认为A比B聪明一点。他们各自结合了A和B的答案后,给出了自己的答案。
Stage3: E偷看了C和D的答案,E认为D比C聪明,随后E也给出自己的答案作为最终答案。