Boosting
另外一类集成学习的思路就是 Boosting(增强),它学习的思路就是集成多个模型,但是模型之间不是独立的关系,而是一个相互增强的关系,即每个模型都在尝试增强(Boosting) 整体的效果。
下面就举出 Boosting 中最典型的一个例子 Ada Boosting 为例,它是这样一个思路。以一个简单的回归问题为例,下图描述的是首先我们有原始数据集,然后经过某一种机器学习算法的学习,然后会得到一个结果。
很显然每一种机器学习算法都会犯错误,然后就得到了图(3)的结果,图(3)中分为深色和浅色两种点,深色的点表示上一步预测错误的点,而浅色的点表示上一步预测准确的点。我们经过上一步的学习形成了图(3)所示的样本点,点和点之间产生了权重的差别(颜色越深表示权重越大)。
我们让在上一个模型中没有被很好学习的样本点的权值增大一些,而在上一个模型中已经被很好学习的样本点的权值减小一些,这样形成一个新的样本数据。我们再使用某一种机器学习算法进行学习,又会得到一个结果。
这样一来,又存在某一些样本点没有被准确预测,所以又形成了图(5)所示的样本点。然后又经过某一种机器学习算法进行学习,又得到一个结果,以此类推。
其实在这个过程中,我们每一次生成的子模型其实都是想办法在弥补上一次生成的模型没有被成功预测的样本点。换句话说,每一个子模型都在想办法推动增强上一个模型所犯的错误。
那么另外一个常见的 Boosting 算法叫做 Gradient Boosting。这个算法的思想是这样的。首先针对整体的数据集使用某一种算法来训练出一个模型
m
1
m_1
m1,当然这个模型会产生一些错误,我们把产生的错误叫做
e
1
e_1
e1,那么下一步要做的事情是针对
e
1
e_1
e1 训练出第二个模型
m
2
m_2
m2,即
m
2
m_2
m2 的作用就是能够预测出
m
1
m_1
m1 所犯的错误是什么。那么
m
2
m_2
m2 也会犯错误记作
e
2
e_2
e2,然后针对
e
2
e_2
e2 训练第三个模型
m
3
m_3
m3,然后
m
3
m_3
m3 产生的错误是
e
3
e_3
e3,以此类推。最后形成的预测结果就是:
m
1
+
m
2
+
m
3
+
.
.
.
m_1 + m_2 + m_3 + ...
m1+m2+m3+...
具体代码见 95 Boosting.ipynb