从基础到实现:集成学习综合教程

本文从基础集成技术讲起,随后介绍了高级的集成技术,最后特别介绍了一些流行的基于Bagging和Boosting的算法,帮助读者对集成学习建立一个整体印象。当你想购买一辆新车时,你会走到第一家汽车商店就根据经销商的建议购买一辆车吗?这是不太可能的。你可能会浏览一些人们发布评论并比较不同车型的门户网站,检查其功能和价格。你也可能会问你的朋友和同事们的意见。

示例代码:这里x_train由训练数据中的自变量组成,y_train是训练数据的目标变量。验证集是x_test(自变量)和y_test(目标变量)。

示例代码:model1=tree.DecisionTreeClassifier()这是平均法的扩展。为所有模型分配不同的权重,定义每个模型的预测重要性。例如,如果你的两个同事是评论员,而其他人在这方面没有任何经验,那么与其他人相比,这两个朋友的答案就更加重要。

示例代码:model1=tree.DecisionTreeClassifier()我们已经介绍了基础的集成技术,让我们继续了解高级的技术。堆叠是一种集成学习技术,它使用多个模型(例如决策树,knn或svm)的预测来构建新模型。该新模型用于对测试集进行预测。以下是简单堆叠集成法的逐步解释:第一步:把训练集分成10份

第二步:基础模型(假设是决策树)在其中9份上拟合,并对第10份进行预测。第三步:对训练集上的每一份如此做一遍。

第四步:然后将基础模型(此处是决策树)拟合到整个训练集上。第五步:使用此模型,在测试集上进行预测。

第六步:对另一个基本模型(比如knn)重复步骤2到4,产生对训练集和测试集的另一组预测。

第七步:训练集预测被用作构建新模型的特征。第八步:该新模型用于对测试预测集(testpredictionset,上图的右下角)进行最终预测。

示例代码:我们首先定义一个函数来对n折的训练集和测试集进行预测。此函数返回每个模型对训练集和测试集的预测。defStacking(model,train,y,test,n_fold):现在我们将创建两个基本模型:决策树和knn。model1=tree.DecisionTreeClassifier(random_state=1)创建第三个模型,逻辑回归,在决策树和knn模型的预测之上。

第二步:在训练集上拟合模型。第三步:在验证集和测试集上进行预测。

第四步:验证集及其预测用作构建新模型的特征。第五步:该新模型用于对测试集和元特征(meta-features)进行最终预测。示例代码:我们将在训练集上建立两个模型,决策树和knn,以便对验证集进行预测。model1=tree.DecisionTreeClassifier()结合元特征和验证集,构建逻辑回归模型以对测试集进行预测。

第一步:从原始数据集有放回的选择观测值来创建多个子集。第二步:在每一个子集上创建一个基础模型(弱模型)。第三步:这些模型同时运行,彼此独立。第四步:通过组合所有模型的预测来确定最终预测。

在我们进一步讨论之前,这里有另一个问题:如果第一个模型错误地预测了某一个数据点,然后接下来的模型(可能是所有模型),将预测组合起来会提供更好的结果吗?Boosting就是来处理这种情况的。Boosting是一个顺序过程,每个后续模型都会尝试纠正先前模型的错误。后续的模型依赖于之前的模型。接下来一起看看boosting的工作方式:第一步:从原始数据集创建一个子集。

第五步:使用实际值和预测值计算误差。第六步:预测错误的点获得更高的权重。(这里,三个错误分类的蓝色加号点将被赋予更高的权重)第七步:创建另一个模型并对数据集进行预测(此模型尝试更正先前模型中的错误)。

第八步:类似地,创建多个模型,每个模型校正先前模型的错误。第九步:最终模型(强学习器)是所有模型(弱学习器)的加权平均值。

因此,boosting算法结合了许多弱学习器来形成一个强学习器。单个模型在整个数据集上表现不佳,但它们在数据集的某些部分上表现很好。因此,每个模型实际上提升了集成的整体性能。

Bagging和Boosting是机器学习中最常用的两种技术。在本节中,我们将详细介绍它们。以下是我们将关注的算法:Baggingmeta-estimator随机森林AdaBoostGBMXGBMLightGBMCatBoost算法介绍示例代码参数本文中,我使用了贷款预测问题。你可以从此处下载数据集。请注意,对于每种算法,某些代码(读取数据,划分训练测试集等)将是相同的。

第一步:假设平均年龄是数据集中所有观测值的预测值。第二步:使用该平均预测值和年龄的实际值来计算误差:

第三步:使用上面计算的误差作为目标变量创建树模型。我们的目标是找到最佳分割以最小化误差。第四步:该模型的预测与预测1相结合:

第五步:上面计算的这个值是新的预测。第六步:使用此预测值和实际值计算新误差:

逐叶子方式可能在较小的数据集上导致过拟合,但可以通过使用'max_depth'参数来避免这种情况。你可以在本文中阅读有关LightGBM及其与XGB比较的更多信息。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180729A03TH600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券