Stacking
Stacking集成算法可以理解为一个两层的集成,第一层含有多个基础分类器,把预测的结果(元特征)提供给第二层, 而第二层的分类器通常是逻辑回归,他把一层分类器的结果当做特征做拟合输出预测结果
blending集成学习方法
Blending集成学习方式:
- (1) 将数据划分为训练集和测试集(test_set),其中训练集需要再次划分为训练集(train_set)和验证集(val_set);
- (2) 创建第一层的多个模型,这些模型可以是同质的也可以是异质的;
- (3) 使用train_set训练步骤2中的多个模型,然后用训练好的模型预测val_set和test_set得到val_predict, test_predict1;
- (4) 创建第二层的模型,使用val_predict作为训练集训练第二层的模型;
- (5) 使用第二层训练好的模型对第二层测试集test_predict1进行预测,该结果为整个测试集的结果。
优点:就是实现简单粗暴,没有太多的理论的分析。
缺点:blending只使用了一部分数据集作为留出集进行验证,也就是只能用上数据中的一部分,实际上这对数据来说是很奢侈浪费的。
Stacking集成学习方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EQasvyHc-1627478304925)(D:\学习\计算机\机器学习\集成学习-datawhale\CH5-集成学习之blending与stacking\4.jpg)]
- 首先将所有数据集生成测试集和训练集(假如训练集为10000,测试集为2500行),那么上层会进行5折交叉检验,使用训练集中的8000条作为训练集(蓝色),剩余2000行作为验证集(橙色)。
- 每次验证相当于使用了蓝色的8000条数据训练出一个模型,使用模型对验证集进行验证得到2000条数据,并对测试集进行预测,得到2500条数据,这样经过5次交叉检验,可以得到中间的橙色的5* 2000条验证集的结果(相当于每条数据的预测结果),5* 2500条测试集的预测结果。
- 接下来会将验证集的5* 2000条预测结果拼接成10000行长的矩阵,标记为
A
1
A_1
A1?,而对于5* 2500行的测试集的预测结果进行加权平均,得到一个2500一列的矩阵,标记为
B
1
B_1
B1?。
- 上面得到一个基模型在数据集上的预测结果
A
1
A_1
A1?、
B
1
B_1
B1?,这样当我们对3个基模型进行集成的话,相于得到了
A
1
A_1
A1?、
A
2
A_2
A2?、
A
3
A_3
A3?、
B
1
B_1
B1?、
B
2
B_2
B2?、
B
3
B_3
B3?六个矩阵。
- 之后我们会将
A
1
A_1
A1?、
A
2
A_2
A2?、
A
3
A_3
A3?并列在一起成10000行3列的矩阵作为training data,
B
1
B_1
B1?、
B
2
B_2
B2?、
B
3
B_3
B3?合并在一起成2500行3列的矩阵作为testing data,让下层学习器基于这样的数据进行再训练。
- 再训练是基于每个基础模型的预测结果作为特征(三个特征),次学习器会学习训练如果往这样的基学习的预测结果上赋予权重w,来使得最后的预测最为准确。
Blending与Stacking对比
Blending的优点在于:
- 比stacking简单(因为不用进行k次的交叉验证来获得stacker feature)
而缺点在于:
- 使用了很少的数据(是划分hold-out作为测试集,并非cv)
- blender可能会过拟合(其实大概率是第一点导致的)
作为测试集,并非cv) - blender可能会过拟合(其实大概率是第一点导致的)
- stacking使用多次的CV会比较稳健
|