前言
最近在学习模型融合的知识,因为很早之前就听说在比赛中模型融合很有用,而我正好在参加一个比赛,于是就深入学习了一下。
类型
模型融合常用的方法有以下几种
- Boosting
- Bagging
- Stacking
- Blending
我主要看的是Stacking,看了很多篇博客看出了点头绪。
前期准备
一个训练集A,一个测试集B
-
第一步
以最基本的两层stacking为例,先对A进行k折交叉验证,每次划分出小的训练集a和小的测试集b,对a进行训练得到一个模型,然后对b进行预测,得到预测结果b1。因为是k折,所以进行k次划分,得到k个相同类型的模型(也就是说同一个模型在训练集上进行k折交叉验证),对k个小测试集预测得到k个预测结果b1-bk,同时这k个模型还要对测试集B进行预测,也得到k个预测结果B1-Bk。stacking往往是由多个不同类型的模型集成的,例如SVM、KNN、LR等,所以对每个模型都要重复上述步骤,假设有n个不同类型的模型,那就会得到n个b1-bk和n个B1-Bk。 -
第二步
将每个模型的b1-bk拼接起来得到一个和原训练集A相同维度,只有一列的列向量,然后将这些列向量拼接起来作为第二层模型的训练集,而这个训练集的标签就是原训练集A的标签。将每个模型的B1-Bk也拼接起来然后求平均也得到一个列向量,将这些列向量拼接起来作为第二层模型的测试集。
如图stacking图解.png
其它
-
Blending我没有仔细看,但是听说和Stacking类似,网上没找到详解Blending过程的博客,不过经常看到下面这些话
image.png
所以可能知识对训练集的选取不一样,其余的过程是一样的。
-
bagging和boosting是相同类型模型的集成,而stacking和blending是不同类型模型的集成。
image.png
-
不知道是我的理解有误还是怎样,这些集成方法好像都只能对结构化数据操作,无法对自然语言操作(我觉得我是在说废话,就算是深度学习也没法直接对自然语言操作啊,也得把它转为字/词向量,所以其实集成方法也是可以对自然语言操作的,你只要把训练集和测试集转为字/词向量的集合就可以了。)
网友评论