Boosting 是一种顺序技术,其中第一个算法在整个数据集上进行训练,随后的算法通过拟合第一个算法的残差来构建,从而为先前模型预测不佳的那些观察赋予更高的权重。例子有 adaboost 和 GBM 等。我的问题是在集成基础学习器时如何执行提升?特别是如果是分类问题如何获得残差?
我知道如何打包基础学习者和堆叠基础学习者。我只是不知道如何提高基础学习者。
谢谢!
Boosting 是一种顺序技术,其中第一个算法在整个数据集上进行训练,随后的算法通过拟合第一个算法的残差来构建,从而为先前模型预测不佳的那些观察赋予更高的权重。例子有 adaboost 和 GBM 等。我的问题是在集成基础学习器时如何执行提升?特别是如果是分类问题如何获得残差?
我知道如何打包基础学习者和堆叠基础学习者。我只是不知道如何提高基础学习者。
谢谢!
您可以使用任何基础学习器进行提升(但 Adaboost 需要样本加权)。但是请记住,最初的想法是使用具有强烈偏见的弱学习器,并通过提升来减少这种偏见。
如果是分类问题,通常使用对数损失来计算残差/梯度以进行 boosting。
对于 Python,scikit-learn (AdaBoostClassifier) 中有一个很好的 AdaBoost 包装器,它可以将随机森林作为基础学习器。
延伸到亚历克斯的答案,与装袋相比,促进学习有几个不同的特征,
它按顺序步骤执行。
在每一步,它使用残差而不是标签来学习。分类的残差函数可以是对数损失,回归可以是 MSE。
在每个步骤中,不需要采样,因此可以使用整个数据集
每一步都是弱学习器,这意味着对于基于树的算法,它使用只有一次分裂的树桩,与装袋相比,每个模型都是完全成长的。
当从先前步骤的残差中学习时,残差/问题会被放大,以便有助于在此步骤中进行训练。这是使用权重完成的。先前模型所做的改进乘以系数 alpha,通常为 0.01。(详情参考ISL书)
快乐学习!