学习目标:
将之前建模调参的结果进行模型融合
学习内容:
- 平均:
- 简单平均法
- 加权平均法
- 投票:
- 简单投票法
- 加权投票法
- 综合:
- 排序融合
- log融合
- stacking:
- 构建多层模型,并利用预测结果再拟合预测。
- blending:
- 选取部分数据预测训练得到预测结果作为新特征,带入剩下的数据中预测。
学习笔记:
stacking\blending详解
tacking 将若干基学习器获得的预测结果,简单来说就是将数据带入N个学习器中得到预测结果,再把预测结果放到第N+1个模型里,但是为了避免过拟合的情况出现,要对结果进行验证
blending是将预测的值作为新的特征和原特征合并,构成新的特征值,用于预测。为了减少过拟合的情况出现,把数据分成D1、D2集合,D1作为训练集,D2作为测试集,预测得到的数据作为新特征使用d2的数据作为训练集结合新特征,预测测试集结果。
【1】
平均:
简单加权平均:
就是简单的求平均值多个结果1-n,(1+2+....+n)/n
加权平均法:
这个需要对权重进行预测(权重类似于事件的占重比)
投票:
简单投票
对比权重投票:
weights=【....】就是调节模型的权重
Stacking
导入数据pip install mlxtend
首先我们将训练集分成5份(5折交叉验证),对于每一个基模型i来说, 我们用其中的四份进行训练, 然后用另一份训练集作为验证集进行预测得到Pi的一部分, 然后再用测试集进行预测得到Ti的一部分,这样当五轮下来之后,验证集的预测值就会拼接成一个完整的Pi, 测试集的label值取个平均就会得到一个Ti。这些Pi进行合并就会得到下一层的训练集train2, Ti进行合并就得到了下一层的测试集test2。利用train2训练第二层的模型, 然后再test2上得到预测结果,就是最终的结果。
根据模型作图求精确度Accuracy: %.2f (+/- %.2f) [%s]求出精确值以及误差区间
blending
Holdout交叉
载入学习器,融合学习器clfs=[.......]
切割数据部分分为测试集和训练集test_size random_state random//随机生成一个实数在【0,1】区间
dataset_d1 = np.zeros((X_d2.shape[0], len(clfs)))
dataset_d2 = np.zeros((X_predict.shape[0], len(clfs)))
然后依次训练各单个模型fit
对于测试集,直接用这k个模型的预测值作为新的特征,最后融合模型,画出价值和分数
学习总结
如何调整模型和结合模型特点是升华的关键所在,简单的加权法可以让你在已有数据中更加直观看出模型的拟合程度,而通过stacking和blending的预测、训练再返还预测的多次实验更加准确,但是相对的会出现过与理想的情况
【1】https://blog.csdn.net/wuzhongqiang/article/details/105012739