51、机器学习随机森林的原理【用Python进行AI数据分析进阶教程】

用Python进行AI数据分析进阶教程51:

机器学习随机森林的原理


关键词:随机森林、集成学习、Bagging、决策树、特征随机选择

摘要:随机森林是一种强大的机器学习算法,属于集成学习的范畴,具体使用了Bagging方法。集成学习通过组合多个弱学习器(如决策树)来构建强学习器,旨在降低方差、提高泛化能力。Bagging方法基于自助采样,通过多次有放回抽样形成多个训练数据集,每个数据集训练一个弱学习器,最后综合结果。随机森林在Bagging基础上引入特征随机选择,进一步增加决策树间的差异性,避免过拟合。本文还通过一个Python代码示例,展示了如何使用Scikit-learn库实现随机森林分类,并计算了模型在鸢尾花数据集上的分类准确率,体现了随机森林在处理分类问题上的高效性和准确性。

👉 欢迎订阅🔗
《用Python进行AI数据分析进阶教程》专栏
《AI大模型应用实践进阶教程》专栏
《Python编程知识集锦》专栏
《字节跳动旗下AI制作抖音视频》专栏
《智能辅助驾驶》专栏
《工具软件及IT技术集锦》专栏


一、随机森林原理概述

随机森林(Random Forest)是一种强大的机器学习算法,属于集成学习(Ensemble Learning)的范畴,具体使用了 Bagging(Bootstrap Aggregating)方法。下面分别对集成学习、Bagging 方法和随机森林的原理进行详细讲解。

二、集成学习(Ensemble Learning)

集成学习是通过组合多个弱学习器(如简单的决策树)来构建一个强学习器的方法。其核心思想是 “三个臭皮匠,赛过诸葛亮”,多个弱学习器的组合可以在性能上超过单个强学习器。集成学习主要有两种类型:Bagging 和 Boosting。

1、关键点

  • 多个弱学习器的组合可以降低方差,提高模型的泛化能力。
  • 不同的弱学习器可以从不同的角度对数据进行学习,从而综合各个学习器的优势。

2、注意点

  • 弱学习器之间应该具有一定的差异性,否则组合起来的效果可能不佳。
  • 集成学习可能会增加计算复杂度和模型的训练时间。

三、Bagging 方法

Bagging(Bootstrap Aggregating)是一种基于自助采样(Bootstrap Sampling)的集成学习方法。自助采样是指从原始数据集中有放回地随机抽取样本,形成多个新的训练数据集。每个训练数据集用于训练一个弱学习器,最后将这些弱学习器的结果进行综合(如分类问题采用投票法,回归问题采用平均法)。

1、关键点

  • 自助采样可以产生多个不同的训练数据集,使得每个弱学习器的训练数据不同,从而增加弱学习器之间的差异性。
  • 通过综合多个弱学习器的结果,可以降低模型的方差,提高模型的稳定性。

2、注意点

  • 自助采样可能会导致部分样本被多次使用,部分样本未被使用,这些未被使用的样本可以用于模型的验证,称为袋外数据(Out-of-Bag,OOB)。
  • 对于 Bagging 方法,通常使用相同类型的弱学习器。

四、随机森林(Random Forest)

随机森林是 Bagging 方法的一个扩展,它在 Bagging 的基础上引入了特征的随机选择。在构建每棵决策树时,不仅使用自助采样得到的训练数据集,还随机选择一部分特征进行训练。这样可以进一步增加决策树之间的差异性,提高模型的泛化能力。

1、关键点

  • 随机森林中的每棵决策树都是独立训练的,训练过程可以并行进行,提高了训练效率。
  • 特征的随机选择可以减少决策树之间的相关性,避免过拟合。

2、注意点

  • 随机森林的性能受到决策树的数量、特征的随机选择数量等参数的影响,需要进行调参。
  • 随机森林的解释性相对较差,因为它是多个决策树的组合。

五、代码示例及解读

下面是一个使用 Python 和 Scikit-learn 库实现随机森林分类的示例代码:

Python脚本

# 导入NumPy库,用于数值计算和数组操作
import numpy as np
# 从sklearn库的datasets模块导入load_iris函数,用于加载鸢尾花数据集
from sklearn.datasets import load_iris
# 从sklearn库的model_selection模块导入train_test_split函数,用于划分训练集和测试集
from sklearn.model_selection import train_test_split
# 从sklearn库的ensemble模块导入RandomForestClassifier类,用于创建随机森林分类器
from sklearn.ensemble import RandomForestClassifier
# 从sklearn库的metrics模块导入accuracy_score函数,用于计算分类准确率
from sklearn.metrics import accuracy_score

# 加载鸢尾花数据集
iris = load_iris()
# 提取数据集中的特征数据,即花的各种测量值
X = iris.data
# 提取数据集中的目标数据,即花的类别标签
y = iris.target

# 使用train_test_split函数将数据集划分为训练集和测试集
# test_size=0.3表示测试集占总数据集的30%
# random_state=42用于固定随机种子,保证每次划分的结果相同
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建一个随机森林分类器对象
# n_estimators=100表示随机森林中包含100棵决策树
# random_state=42用于固定随机种子,保证每次训练的结果相同
rf = RandomForestClassifier(n_estimators=100, random_state=42)

# 使用训练集数据对随机森林模型进行训练
rf.fit(X_train, y_train)

# 使用训练好的随机森林模型对测试集数据进行预测
# 返回的y_pred是预测的类别标签
y_pred = rf.predict(X_test)

# 使用accuracy_score函数计算模型在测试集上的分类准确率
# 准确率是预测正确的样本数占总样本数的比例
accuracy = accuracy_score(y_test, y_pred)

# 打印模型在测试集上的准确率
print(f"Accuracy: {accuracy}")

输出 / 打印结果及注释

运行上述代码后,输出结果会类似于:

plaintext

Accuracy: 0.9777777777777777

注释这个输出表示随机森林模型在鸢尾花数据集的测试集上的分类准确率约为 97.78%。也就是说,模型对测试集中样本的类别预测,大约有 97.78% 是正确的。不过,由于数据划分和模型训练过程中存在一定随机性(虽然设置了random_state,但不同环境可能有细微差异),每次运行代码时,准确率可能会在一个小范围内波动,但通常会接近 100%,因为鸢尾花数据集相对简单,随机森林模型能够很好地学习到数据的特征模式。

重点语句解读

  • from sklearn.ensemble import RandomForestClassifier从 Scikit-learn 库中导入随机森林分类器。
  • X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)将数据集划分为训练集和测试集,test_size=0.3表示测试集占总数据集的 30%,random_state=42用于保证每次划分的结果相同。
  • rf = RandomForestClassifier(n_estimators=100, random_state=42)创建一个随机森林分类器,n_estimators=100表示随机森林中决策树的数量为 100,random_state=42用于保证每次训练的结果相同。
  • rf.fit(X_train, y_train)使用训练集对随机森林模型进行训练。
  • y_pred = rf.predict(X_test)使用训练好的模型对测试集进行预测。
  • accuracy = accuracy_score(y_test, y_pred)计算模型在测试集上的准确率。

通过以上步骤,我们可以使用随机森林算法对鸢尾花数据集进行分类,并评估模型的性能。

——The END——


🔗 欢迎订阅专栏

序号专栏名称说明
1用Python进行AI数据分析进阶教程《用Python进行AI数据分析进阶教程》专栏
2AI大模型应用实践进阶教程《AI大模型应用实践进阶教程》专栏
3Python编程知识集锦《Python编程知识集锦》专栏
4字节跳动旗下AI制作抖音视频《字节跳动旗下AI制作抖音视频》专栏
5智能辅助驾驶《智能辅助驾驶》专栏
6工具软件及IT技术集锦《工具软件及IT技术集锦》专栏

👉 关注我 @理工男大辉郎 获取实时更新

欢迎关注、收藏或转发。
敬请关注 我的
微信搜索公众号:cnFuJH
CSDN博客:理工男大辉郎
抖音号:31580422589

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

理工男大辉郎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值