机器学习(五) ----------集成学习(1)(集成学习思想+随机森林算法)

目录

1 核心思想

2 集成学习思想分类

2.1 Bagging(Bootstrap aggregating)

2.1.1 基本思想

2.1.2 特点

2.1.3 优点:

2.1.4 缺点:

2.2 Boosting(Boosting Method)

2.2.1 基本思想

2.2.2 特点

2.2.3 优点

2.2.4 缺点

2.3 Stacking

2.3.1 核心思想

2.3.2 步骤:

2.3.3优势

3 随机森林算法(Random Forests)

3.1 核心思想

3.2 步骤

3.3 优点

3.3 API

3.3.1 api

3.3.2 主要参数

3.3.3 基本步骤

3.3.4 代码实现


1 核心思想

集成学习(Ensemble Learning)是一种机器学习技术,它组合多个基学习器(也称为“弱学习器”或“子学习器”)的预测结果,以产生比单个基学习器更准确的预测。集成学习的基本思想是通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(Multi-classifier System)、基于委员会的学习(Committee-based Learning)等。

2 集成学习思想分类

2.1 Bagging(Bootstrap aggregating)

2.1.1 基本思想

Bootstrap aggregating(自举汇聚法或装袋法),是一种集成学习技术,用于提高机器学习模型的预测准确性和稳定性。它通过对原始数据集进行多次随机抽样并训练多个基学习器(如决策树、逻辑回归等),然后将这些基学习器的预测结果结合起来,以产生一个更强大、更稳定的预测模型。

2.1.2 特点

  1. 自助采样法(Bootstrap Sampling)
    • Bagging的核心是自助采样法,这是一种有放回的随机抽样方法。这意味着在每次抽样后,被抽中的样本会被放回原始数据集中,以便在后续的抽样中再次被选中。
    • 假设原始数据集包含N个样本,那么对于每个基学习器,我们都会从原始数据集中随机抽取一个大小为N的自助样本集。由于是有放回的抽样,因此一个样本在自助样本集中可能出现多次,也可能一次都不出现。
  2. 训练基学习器
    • 对于每个自助样本集,我们都会训练一个基学习器。这些基学习器可以是任何类型的机器学习模型,但通常选择那些对训练数据较为敏感的模型(如决策树),因为这样的模型能够更好地利用自助采样法产生的多样性。
    • 由于自助采样法的随机性,每个基学习器都会看到不同的训练数据,因此它们之间是相互独立的。
  3. 结合预测结果
    • 当需要对新的数据点进行预测时,每个基学习器都会给出一个预测结果。对于分类问题,这通常是一个类别标签;对于回归问题,这通常是一个数值预测。
    • Bagging通过平均(对于回归问题)或投票(对于分类问题)的方式将这些预测结果结合起来,从而得到一个最终的预测结果。
    • 通过结合多个基学习器的预测结果,Bagging能够降低模型的方差,提高预测的稳定性。同时,由于每个基学习器都是基于不同的训练数据训练的,因此它们之间的多样性也能够提高模型的泛化能力。
  4. 并行计算
    • 由于Bagging中的基学习器是相互独立的,因此它们可以并行地进行训练。这大大提高了Bagging算法的计算效率,使得它能够处理大规模数据集和复杂模型。

2.1.3 优点:

  1. 并行化处理:Bagging算法中的每个基学习器都是独立训练的,因此可以很容易地进行并行化处理。这意味着可以同时训练多个基学习器,从而加快模型的训练速度。
  2. 减少方差:由于Bagging算法通过随机抽样生成多个训练子集,并使用这些子集训练基学习器,因此可以减少模型的方差。这意味着Bagging算法对于噪声数据和异常值更加鲁棒。
  3. 简单有效:Bagging算法的实现相对简单,不需要像Boosting算法那样调整样本权重或基学习器的权重。这使得Bagging算法在实际应用中更加容易实现和使用。

2.1.4 缺点:

  1. 可能无法降低偏差:与Boosting算法相比,Bagging算法主要关注于降低模型的方差,而不是偏差。如果基学习器的偏差较高,那么Bagging算法可能无法有效地降低整个模型的偏差。
  2. 对基学习器的性能依赖:Bagging算法的性能取决于基学习器的性能。如果基学习器的性能较差,那么即使使用Bagging算法进行集成,也可能无法获得很好的性能。

2.2 Boosting(Boosting Method)

2.2.1 基本思想

基本思想:核心理念是通过迭代地调整训练数据的权重或分布,将多个弱学习器(即性能相对较低的模型)组合成一个强学习器(即性能显著提升的模型),从而提高预测精度和泛化能力。

2.2.2 特点

  1. 迭代训练:Boosting算法采用迭代的方式,逐步构建多个弱学习器。在每一次迭代中,都会根据前一个弱学习器的性能对训练数据进行调整,并基于调整后的数据训练新的弱学习器。
  2. 权重调整:Boosting算法的核心在于对训练数据的权重进行调整。在每一次迭代中,被前一个弱学习器错误分类的样本会被赋予更高的权重,使得新的弱学习器能够更加关注这些难以分类的样本。通过这种方式,Boosting算法能够逐步改善对难分类样本的预测效果。
  3. 基学习器组合:在训练得到多个弱学习器后,Boosting算法会将它们进行组合,形成一个强学习器。组合的方式通常是加权组合,即根据每个弱学习器的性能赋予不同的权重。权重的大小通常与弱学习器的性能成正比,性能越好的弱学习器权重越高。
  4. 目标:Boosting算法的主要目标是提高学习算法的精度和鲁棒性。通过迭代地训练和调整多个弱学习器,Boosting算法能够逐步逼近最优解,从而得到一个性能优异的强学习器。

2.2.3 优点

  1. 更高的准确率:Boosting算法通常通过迭代地训练多个弱分类器,并对每个分类器赋予不同的权重,从而组合成一个强分类器。这种方法可以逐步减少偏差,并提高模型的准确率。相比之下,Bagging算法通过并行地训练多个弱分类器,并对它们的预测结果进行平均或投票,虽然可以提高模型的稳定性,但在某些情况下可能不如Boosting算法准确。
  2. 对难分类样本的关注:Boosting算法在训练过程中会关注那些被之前分类器错误分类的样本,并给予它们更高的权重。这种机制有助于模型更加关注那些难以分类的样本,从而提高模型对这些样本的预测能力。相比之下,Bagging算法在训练过程中对每个样本的权重是相等的,无法直接关注难分类样本。
  3. 灵活性和适应性:Boosting算法对弱分类器的选择没有严格限制,可以根据具体问题选择合适的弱分类器。此外,Boosting算法还允许使用不同的损失函数和正则化项来适应不同的任务需求,具有较强的灵活性和适应性。相比之下,Bagging算法通常使用相同的弱分类器和训练过程,其灵活性和适应性可能不如Boosting算法。

2.2.4 缺点

  1. 对离群点敏感:Boosting算法在迭代过程中会逐步增加对错误分类样本的权重,这可能导致算法对离群点或噪声数据过于敏感。因为离群点往往会被错误分类,所以在后续的迭代中,它们的权重会不断增加,进而影响整个模型的性能。
  2. 过拟合风险:由于Boosting算法在训练过程中会逐步逼近最优解,因此存在过拟合的风险。如果模型过于复杂或者训练数据中存在噪声,那么Boosting算法可能会过度拟合训练数据,导致在测试集上的性能下降。
  3. 计算复杂度高:Boosting算法通常需要迭代多次才能收敛,而且每次迭代都需要重新训练一个新的弱学习器,因此计算复杂度较高。对于大规模数据集或者复杂的模型,Boosting算法可能需要较长的训练时间。
  4. 难以并行化:由于Boosting算法中的每个弱学习器都是基于前一个学习器的结果进行训练的,因此难以进行并行化处理。这限制了Boosting算法在处理大规模数据集时的效率。
  5. 依赖弱学习器的选择:Boosting算法的性能在很大程度上取决于所选择的弱学习器。如果弱学习器的性能较差,那么即使通过Boosting算法进行组合,也难以得到性能优异的强学习器。因此,在选择弱学习器时需要谨慎考虑。

当数据集较大且存在噪声时,Bagging算法可能更加适合,因为它可以通过并行化训练提高计算效率,并通过降低方差来提高模型的稳定性。而在某些情况下,如当数据集较小或需要提高模型的准确率时,Boosting算法可能更加适合。

2.3 Stacking

2.3.1 核心思想

核心思想是将多个基础模型的预测结果作为输入,通过元模型(或称为次级学习器)来整合这些预测结果,以得到最终的集成预测结果。这种方法可以有效地提高模型的预测性能,因为它能够结合多个模型的优势,降低单一模型的局限性。

2.3.2 步骤:

  1. 准备数据集:首先,需要将原始数据集分为训练集和测试集。训练集用于训练基础模型和元模型,而测试集则用于评估最终模型的性能。
  2. 训练基础模型:在训练集上,使用不同的算法或参数设置训练多个基础模型。这些基础模型可以是决策树、随机森林、支持向量机、神经网络等任何机器学习模型。每个基础模型都会对训练集进行预测,并生成预测结果。
  3. 构建堆叠数据集:将每个基础模型在训练集上的预测结果作为新的特征,与原始训练集的特征进行合并,构建出一个新的堆叠数据集。这个堆叠数据集将作为元模型的输入。
  4. 训练元模型:使用堆叠数据集训练元模型。元模型的任务是学习如何最好地组合基础模型的预测结果,以产生最终的预测。元模型可以是任何机器学习模型,如线性回归、逻辑回归、神经网络等。
  5. 预测和评估:使用训练好的元模型对测试集进行预测,并评估模型的性能。由于Stacking结合了多个基础模型的预测结果,因此通常能够获得比单一模型更好的预测性能。

2.3.3优势

  1. 提高模型的泛化能力:通过结合多个不同类型的基础模型,Stacking能够克服单个模型的局限性,提高模型的泛化能力。
  2. 优秀的预测性能:由于Stacking结合了多个模型的预测结果,因此通常能够获得比单一模型更准确的预测结果。
  3. 灵活性高:Stacking可以灵活地选择不同的基础模型和元模型,以适应不同的数据和任务需求。

然而,Stacking也存在一些缺点,如训练时间较长、对基础模型的选择和参数调优要求较高等。因此,在实际应用中需要根据具体的问题和数据集来选择合适的Stacking方法,并进行适当的调优工作。

3 随机森林算法(Random Forests

随机森林算法是一种集成学习方法,它利用多个决策树来进行分类或回归。这种算法由Leo Breiman和Adele Cutler在2001年提出,通过构建多棵决策树并集成它们的预测结果,以提高模型的稳定性和预测精度。

3.1 核心思想

随机森林算法的核心思想是利用集成学习的方法,通过构建多棵决策树(决策树算法详解),并将它们的预测结果进行集成,从而提高模型的稳定性和预测精度。

在随机森林算法中,每棵决策树都是基于原始数据集的随机子集进行训练的,同时,在构建每棵树的每个节点时,也仅随机选择一部分特征进行分裂。

3.2 步骤

  1. 随机采样:随机森林算法首先对原始数据集进行随机采样,生成多个不同的训练子集。每个训练子集都用于训练一棵决策树。这种随机性有助于降低模型对特定数据的过拟合风险。
  2. 随机特征选择:在构建每棵决策树时,随机森林算法不会使用所有的特征,而是从所有特征中随机选择一部分特征来构建决策树。这有助于增加模型的多样性,并减少过拟合的风险。
  3. 构建决策树:在选定的特征和训练子集上,随机森林算法会构建多棵决策树。每棵决策树都会独立地进行训练和预测。
  4. 集成预测结果:对于分类问题,随机森林算法会将所有决策树的预测结果进行投票,得票最多的类别作为最终的预测结果;对于回归问题,随机森林算法会将所有决策树的预测结果进行平均,得到最终的预测值。

3.3 优点

  • 高准确度:通过集成多棵决策树的预测结果,随机森林算法通常能够获得比单一决策树更高的预测精度。
  • 处理大量数据:随机森林算法对大规模数据集的处理能力较强,可以高效地处理大量数据。
  • 评估特征重要性:在训练过程中,随机森林算法可以评估每个特征对预测结果的重要性,这对于特征选择和理解模型的工作原理非常有用。
  • 鲁棒性:随机森林算法对噪声和异常值具有较强的鲁棒性,因为每个决策树都是基于随机子集进行训练的,从而减少了特定数据点对整体模型的影响。

3.3 API

3.3.1 api

sklearn.ensemble.RandomForestClassifier()

3.3.2 主要参数

n_estimators:整数,可选(默认值=100)。森林中树的数量。

criterion:字符串,可选(默认值="gini")。分割特征的准则。可以是 "gini" 或 "entropy"。

max_depth:整数或None,可选(默认值=None)。树的最大深度。如果为None,则树将展开到所有叶子都是纯的,或者直到所有叶子包含少于min_samples_split的样本。

min_samples_split:整数或浮点数,可选(默认值=2)。分裂内部节点所需的最小样本数。

  • 如果节点样本数少于min_samples_split,则不会再划分
  • 如果样本量不大,不需要设置这个值
  • 如果样本数量级非常大,则推荐增大这个值

min_samples_leaf:整数或浮点数,可选(默认值=1)。叶节点所需的最小样本数。

  • 如果叶子节点数目小于样本数,则会和兄弟节点一起被剪枝
  • 较小的叶子节点样本数量使模型更容易捕捉训练数据中的噪声

max_features:字符串或整数,可选(默认值="auto")。

  • 寻找最佳分割时要考虑的特征数量。如果是整数,则在每次拆分时考虑max_features个特征。
  • 如果是"auto",则max_features=sqrt(n_features)
  • 如果是"sqrt",则max_features=sqrt(n_features)(对于分类任务)或max_features=n_features(对于回归任务)。
  • 如果是"log2",则max_features=log2(n_features)。如果是None,则max_features=n_features

bootstrap:布尔值,可选(默认值=True)。是否在构建树时使用自助抽样。

oob_score:布尔值,可选(默认值=False)。是否使用袋外样本来估计泛化误差。

3.3.3 基本步骤

  1. 导入 RandomForestClassifier 类。
  2. 创建 RandomForestClassifier 的实例,并设置所需的参数。
  3. 使用训练数据拟合模型(即训练模型)。
  4. 使用模型进行预测。
  5. 评估模型的性能。

3.3.4 代码实现

from sklearn.ensemble import RandomForestClassifier  
from sklearn.datasets import load_iris  
from sklearn.model_selection import train_test_split  
from sklearn.metrics import accuracy_score  
  
# 加载数据  
iris = load_iris()  
X = iris.data  
y = iris.target  
  
# 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  
  
# 创建随机森林分类器实例  
clf = RandomForestClassifier(n_estimators=100, random_state=42)  
  
# 训练模型  
clf.fit(X_train, y_train)  
  
# 进行预测  
y_pred = clf.predict(X_test)  
  
# 评估模型性能  
accuracy = accuracy_score(y_test, y_pred)  
print("Accuracy:", accuracy)

未完待续~

  • 39
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值