提高预测模型的准确性(accuracy)有两个方法:一个是通过特征工程,一个是直接应用boosting算法。
目前有很多boosting算法:Gradient Boosting、XGBoost、AdaBoost、Gentle Boost等。每一个算法都有自己潜在的数学原理,它们在应用的时候会有些微的变化。
本文会解释Gradient Boosting算法的复杂性以及潜在的含义,也会通过R语言分享其实践栗子。
Bagging 和Boosting的区别
参考https://www.cnblogs.com/liuwu265/p/4690486.html栗子
假设需要改进一个模型M,且目前的准确率为accuracy=80%,应该如何做?
一个简单的方法是使用新的输入变量集合来构建一个完全不同的模型,相反,有一个更简单的建议:Y = M(x) + error
如果知道误差error不是白噪声,且与结果值Y有相同的相关性。如果能够在误差项上建立一个模型呢?比如:
error = G(X) +error2
也许,你会发现错误率会提高到更高的数字,比如说84%。让我们再走一步,回到error2.
error2 = H(X) + error3
合并所有公式:
Y= M(X) + G(X) + H(X) + error3
这可能会有超过84%的准确率,如果能为三个学习器找到最有的权重。
Y = alpha * M(x) + beta * G(x) + gamma * H(x) + error4
如果找到了合适的权重,可能已经模拟好了一个更好的模型。这是提升学习器的基本原理。当我第一次读到这个理论的时候,我有两个简单的问题:
- 在回归/分类方程中,真的能找到非白噪声误差?如果不能,我们如何使用这个算法呢?
- 如果这是可能的,为什么不能得到接近100%的准确率呢?
本文将会回答这个问题,然而,Boosting通常都是基于弱学习器,这不太可能没有白噪声。另一方面,Boosting会导致过拟合,因为我们需要在合适的时候停下来。
我们来设想一个分类问题: