对于机器学习和深度学习来说,用单模型的效果往往都没有进行模型融合后的效果好。而对模型来说,我们需要选择具有多样性,准确性的模型,对于融合的方式来说也有很多种,比如最简单的取平均或者投票法,较为复杂的就是Blending和Stacking。这一篇主要讲一下blending,下一篇讲解一下stacking,二者都是用了两层的模型。
1. Blending简介
Blending是一种模型融合的方式,第一层通过将训练集出一部分作为holdout set,然后通过剩下的数据生成模型对holdout set 进行预测,第二层,直接对预测结果建模生成第二层的模型,如图所示。Blending是 Netflix获胜者提出来的模型融合方法,更偏向工程类,因此本文不会有太多的公式。
2.Blending 流程
Blending 的核心思想还是比较简单的,流程大致分为以下步骤:(以两层模型为例)
- 将数据集划分为训练集(train),测试集(test),验证集(val);
- 创建第一层的多个模型(M1,M2,M3),这些模型可以是同质的或者是异质的(同类模型或者不同类模型);
- 使用训练集分别训练多个模型,然后将验证集(val)放入训练好的模型得到val_predict(vp1,vp2,vp3),将测试集(test)放入训练好的模型得到test_predict1(tp1,tp2.tp3);
- 创建第二层的模型,使用val_predict作为训练集训练第二层的模型,label为val真实的label;
- 使用第二层训练好的模型对第二层测试集test_predict1进行预测,该结果为整个测试集的结果。
3.实例讲解
- 总的数据集被分成训练集和测试集,如80%训练集和20%测试集,然后在这80%的训练集中再拆分训练集70%和验证集30%,因此拆分后的数据集由三部分组成:训练集80%* 70%、测试集20%、验证集80%* 30% 。训练集是为了训练模型,测试集是为了调整模型(调参),测试集则是为了检验模型的优度。
- 我们使用训练集创建了K个模型,如SVM、random forests、XGBoost等,这个是第一层的模型。 训练好模型后将验证集输入模型进行预测,得到K组不同的输出,我们记作 A1,…Ak,然后将测试集输入K个模型也得到K组输出,我们记作B1,…,Bk ,其中Ai 的样本数与验证集一致, Bi的样本数与测试集一致。如果总的样本数有10000个样本,那么使用5600个样本训练了K个模型,输入验证集2400个样本得到K组2400个样本的结果A1,…Ak ,输入测试集2000个得到K组2000个样本的结果B1,…,Bk 。
- 我们使用K组2400个样本的验证集结果A1,…Ak 作为第二层分类器的特征,验证集的2400个标签
为因变量,训练第二层分类器,得到2400个样本的输出。 - 将输入测试集2000个得到K组2000个样本的结果B1,…,Bk放入第二层分类器,得到2000个测试集
的预测结果。
3.实验
# 加载相关工具包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.style.