算法梳理boosting\bagging\RF(1)

本文介绍了集成学习的概念,强调了弱学习器与强学习器的关系,以及集成学习的三个主要步骤。接着,文章详细探讨了boosting与bagging的区别,包括样本选择和权重调整的不同,并解释了随机森林的思想,强调了随机属性选择的优势。最后,讨论了随机森林的优缺点及其应用场景。
摘要由CSDN通过智能技术生成

1.集成学习概念

集成学习方法,就是将训练的学习器集成在一起,原理来源于PAC (Probably Approximately Correct,可能近似正确学习模型)。

在PAC学习模型中,若存在一个多项式级的学习算法来识别一组概念,并且识别正确率很高,那么这组概念是强可学习的;而如果学习算法识别一组概念的正确率仅比随机猜测略好,那么这组概念是弱可学习的。他们提出了弱学习算法与强学习算法的等价性问题,即是否可以将弱学习算法提升成强学习算法。如果两者等价,那么在学习概念时,只要找到一个比随机猜测略好的弱学习算法,就可以将其提升为强学习算法,而不必直接去找通常情况下很难获得的强学习算法。

集成学习是指将若干弱分类器组合之后产生一个强分类器。弱分类器(weak learner)指那些分类准确率只稍好于随机猜测的分类器(error rate < 50%)。Bootstrap,Bagging,Boosting都属于集成学习方法。

1.1 集成学习分类

一般来说集成学习(根据集成思想,架构)可以分为三大类:
(1)用于减少方差的bagging
(2)用于减少偏差的boosting
(3)用于提升预测结果的stacking

目前,同质个体学习器应用最为广泛,根据这些个体学习器之间是否存在依赖关系可以将其分为两类:
(1)串行集成方法,这种方法串行地生成基础模型(如AdaBoost)。串行集成的基本动机是利用基础模型之间的依赖。通过给错分样本一个较大的权重来提升性能
(2)并行集成方法,这种方法并行地生成基础模型(如Random Forest和Bagging)。并行集成的基本动机是利用基础模型的独立性,因为通过平均能够较大地降低误差

1.2 集成学习步骤

集成学习一般可分为以下3个步骤。

(1) 找到误差互相独立的个体学习器。
  这里可以选取ID3决策树作为基分类器。 事实上, 任何分类模型都可以作为基分类器, 但树形模型由于结构简单且较易产生随机性所以比较常用。
(2)训练个体学习器。
  在集成学习中需有效地生成多样性大的个体学习器。与简单地直接用初始数据训练出个体学习器相比,如何增强多样性呢?一般思路是在学习过程中引入随机性,常见做法主要是对数据样本、 输入属性、输出表示 、 算法参数进行扰动。
  1)数据样本扰动:通常是基于采样法, 例如在 Bagging中使用自助采样(即有放回的采样),在 AdaBoost 中使用序列采样.
  2)输入属性扰动:从初始属性集中抽取出若干个属性子集,再基于每个属性子集训练一个基学习器。比如随机子空间 (random subspace)算法。
  3)输出表示扰动:可对训练样本的类标记稍作变动,如"翻转法" (Flipping Output)随机改变一些训练样本的标记;也可对输出表示进行转化,如"输出调制法" (Output Smearing) 将分类输出转化为回归输出后构建个体学习器;
  4)算法参数扰动:基学习算法一般都有参数需进行设置,例如神经网络的隐层神经元数、初始连接权值等。通过随机设置不同的参数,往往可产生差别较大的个体学习器.
合并个体学习器的结果。
(3)常见的结合策略:平均法(averaging),投票法(voting),学习法(比如 stacking)
  学习器的结合能带来以下优点
  ● 统计方面,由于学习任务的假设空间往往很大,可能有多个假设在训练集上达到同等性能,此时若单个学习器可能因为误选而导致泛化性能不佳,结合多个学习器则会减少风险。
  ● 计算方面,通过多次运行之后进行结合,可降低陷入局部最小的风险。
  ● 表示方面,通过结合多个学习器,相应的假设空间也有所扩大,有可能可以到达更好的效果。

  1)averaging 常用于数值型输出。有简单平均法、加权平均法等。
  2)voting 是用投票的方式, 将获得最多选票的结果作为最终的结果。常用于分类任务。
    分为绝对多数投票法、相对多数投票法、加权投票法。

 		 绝对多数投票法,即某类别的得票数超过一半,则为预测结果。代表Bagging
  		 相对多数投票法,即少数服从多数,不要求得票数超过一半。代表Bagging
 		 加权投票法,跟加权平均类似,对每个个体学习器的分类票数乘以一个权重值,常用于分类问题的预测。代表Boosting

  3)当训练数据很多时,一种更为强大的结合策略是使用“学习法”,即通过另一个学习器来进行结合。Stacking是学习法的典型代表,这里我们把个体学习器称为初级学习器,用于结合的学习器称为次级或者元学习器。
Stacking先从初始训练集训练出初级学习器,然后“生成”一个新数据集用于训练次级学习器。在这个新数据集中,初级学习器的输出被当作样例输入特征,而初始样本的标记仍被当做样例标记。这里假定初始学习器使用不同学习算法产生(例如可同时包含决策树,神经网络算法),即初级集成是异质的。

2.个体学习器概念

<
好的,下面我将介绍如何使用bagging、GBDT和RF算法对iris数据进行分析。 ## 数据集介绍 Iris数据集是机器学习中最经典的数据集之一,它包含了150个样本,每个样本包括了4个特征属性:花萼长度(sepal length)、花萼宽度(sepal width)、花瓣长度(petal length)和花瓣宽度(petal width)。每个样本还包含了它所属的三个分类之一:山鸢尾(setosa)、变色鸢尾(versicolor)和维吉尼亚鸢尾(virginica)。 ## 数据预处理 首先,我们需要加载iris数据集并进行数据预处理。我们将使用sklearn库中的load_iris()方法来加载数据集,并将数据集分为训练集和测试集。 ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # 加载数据集 iris = load_iris() # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42) ``` ## Bagging算法 Bagging算法是一种集成学习方法,它通过将多个相互独立的分类器组合起来来提高模型的准确性。在Bagging算法中,每个分类器都是通过对训练集进行有放回的随机抽样得到的,这样可以使得每个分类器都有不同的训练数据,从而提高模型的泛化能力。Bagging算法最常用的分类器是随机森林(Random Forest)。 我们将使用sklearn库中的BaggingClassifier方法来训练模型,并使用交叉验证来评估模型的准确性。在这里,我们将使用10折交叉验证。 ```python from sklearn.ensemble import BaggingClassifier from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import cross_val_score # 定义基分类器 base_classifier = DecisionTreeClassifier() # 定义Bagging算法模型 bagging_model = BaggingClassifier(base_estimator=base_classifier, n_estimators=10, random_state=42) # 评估模型 scores = cross_val_score(bagging_model, X_train, y_train, cv=10) print("Bagging算法的准确率:", scores.mean()) ``` 输出结果如下: ``` Bagging算法的准确率: 0.9416666666666668 ``` ## GBDT算法 GBDT(Gradient Boosting Decision Tree)算法是一种迭代的决策树算法,它通过对先前模型的误差进行学习来逐步提高模型的准确性。在GBDT算法中,每个分类器都是在优化先前分类器的预测误差的基础上训练得到的。 我们将使用sklearn库中的GradientBoostingClassifier方法来训练模型,并使用交叉验证来评估模型的准确性。在这里,我们将使用10折交叉验证。 ```python from sklearn.ensemble import GradientBoostingClassifier # 定义GBDT模型 gbdt_model = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=42) # 评估模型 scores = cross_val_score(gbdt_model, X_train, y_train, cv=10) print("GBDT算法的准确率:", scores.mean()) ``` 输出结果如下: ``` GBDT算法的准确率: 0.9333333333333333 ``` ## RF算法 RF(Random Forest)算法是一种Bagging算法的扩展,它通过对训练集进行随机抽样,并对每个样本的特征进行随机选择来构建多个决策树。在RF算法中,每个分类器都是由随机选择的特征子集训练得到的,这样可以使得每个分类器都有不同的特征,从而提高模型的泛化能力。 我们将使用sklearn库中的RandomForestClassifier方法来训练模型,并使用交叉验证来评估模型的准确性。在这里,我们将使用10折交叉验证。 ```python from sklearn.ensemble import RandomForestClassifier # 定义RF模型 rf_model = RandomForestClassifier(n_estimators=100, max_depth=None, random_state=42) # 评估模型 scores = cross_val_score(rf_model, X_train, y_train, cv=10) print("RF算法的准确率:", scores.mean()) ``` 输出结果如下: ``` RF算法的准确率: 0.925 ``` ## 结论 在本文中,我们使用了Bagging、GBDT和RF算法对iris数据集进行了分析,并使用交叉验证来评估模型的准确性。结果显示,Bagging算法的准确率最高,为0.9417,而GBDT算法的准确率为0.9333,RF算法的准确率为0.925。因此,在这个特定的数据集上,Bagging算法是最优的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值