AdaBoost回归
AdaBoost常用于分类,在回归中常常有几个问题让人迷惑。
-
AdaBoost算法在每次迭代之后,会改变样本的权重分布。分类算法会把错误的样本权重加大,正确的样本权重减小。而回归当中,则会根据误差大小来决定权重改变多少。
在《统计学习算法中》举的例子是以单层的CART分类树来解释的,每次迭代会根据误差权重的不同学习出新的Cart树,也就是说每个模型之间是存在差异的。但是对于无法接受样本权重的算法,例如神经网络等算法,每次迭代产生的模型岂不是一样?
后来去翻阅了Sklearn的源代码,才发现回归中,是通过重采样的方式代替权重更新。代码中的这段就是用于重采样,输入sample_weight,有放回采样。
bootstrap_idx = random_state.choice(
np.arange(_num_samples(X)), size=_num_samples(X), replace=True,
p=sample_weight
)
- 最后的结合策略
正如方法名字所言。得到预测的中位数。。。
当然,网上也有一些博客中提到加权平均的。我是不太明白中位数是起到什么作用。
def _get_median_predict(self, X, limit):
# Evaluate predictions of all estimators
predictions = np.array([
est.predict(X) for est in self.estimators_[:limit]]).T
# Sort the predictions
sorted_idx = np.argsort(predictions, axis=1)
# Find index of median prediction for each sample
weight_cdf = stable_cumsum(self