Python sklearn库中的随机森林模型详解

 更新时间:2023年08月27日 11:44:55   作者:rink1t  
本文主要说明 Python 的 sklearn 库中的随机森林模型的常用接口、属性以及参数调优说明,需要读者或多或少了解过sklearn库和一些基本的机器学习知识

sklearn中的随机森林

sklearn中的集成学习算法模块ensemble中与随机森林相关的类

说明
ensemble.RandomForestClassifier随机森林分类
ensemble.RandomForestRegressor随机森林回归

基本使用

以红酒数据集和波士顿房价数据集为例,sklearn中的分类树和回归树的简单使用如下:

# 导包
from sklearn.datasets import load_wine, load_boston
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor
# 分类树
data_wine = load_wine()  # 加载红酒数据集
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(data_wine.data, data_wine.target, test_size=0.3, random_state=42)
rfc = RandomForestClassifier()  # 分类树
rfc.fit(X_train, y_train)  # 拟合训练集
print(rfc.predict(X_train))  # 输出测试集的预测结果
print(rfc.score(X_test, y_test))  # 测试集上的准确率
# 回归树
data_boston = load_boston()  # 加载波士顿房价数据集
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(data_boston.data, data_boston.target, test_size=0.3, random_state=42)
reg = RandomForestRegressor()  # 回归树
reg.fit(X_train, y_train)  # 拟合训练集
print(reg.predict(X_train))   # 测试集的预测结果
print(reg.score(X_test, y_test))   # 测试集上的决定系数 R2

常用属性和接口

  • .feature_importances_:每个特征的特征重要性,总和为1
  • .oob_score_:当模型 oob_score=True 时,训练后可查看树模型使用oob数据进行测试的平均准确度
  • .estimators_:返回集成的所有决策树模型的模型列表
  • .apply():传入样本特征数据,返回每个样本被分到的节点索引,每个样本对应一个列表,列表中是该样本在随机森林中所有树模型中被分到的叶子节点索引
  • .predict_proba():传入样本特征数据返回每个测试样本对应的被分到每个标签的概率

随机森林的 .score() 接口的选用指标:

  • 随机森林分类:准确度 Accuracy
  • 随机森林回归:决定系数 R2R^2R2

参数说明

与sklearn中的决策树参数很多都很相似,以下参数说明是针对分类树的,对于回归树,几乎所有参数、属性及接口都和分类树一模一样。需要注意的是,在回归树中,没有标签分布是否均衡的问题,因此没有class_weight这样的参数。

sklearn中随机森林分类和随机森林回归的默认参数

  • 随机森林分类
RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,
                       criterion='gini', max_depth=None, max_features='auto',
                       max_leaf_nodes=None, max_samples=None,
                       min_impurity_decrease=0.0, min_impurity_split=None,
                       min_samples_leaf=1, min_samples_split=2,
                       min_weight_fraction_leaf=0.0, n_estimators=100,
                       n_jobs=None, oob_score=False, random_state=None,
                       verbose=0, warm_start=False)
  • 随机森林回归
RandomForestRegressor(bootstrap=True, ccp_alpha=0.0, criterion='mse',
                      max_depth=None, max_features='auto', max_leaf_nodes=None,
                      max_samples=None, min_impurity_decrease=0.0,
                      min_impurity_split=None, min_samples_leaf=1,
                      min_samples_split=2, min_weight_fraction_leaf=0.0,
                      n_estimators=100, n_jobs=None, oob_score=False,
                      random_state=None, verbose=0, warm_start=False)

sklearn中随机森林的许多参数是用于限定集成的决策树模型的,这部分参数和决策树模型中的许多参数相同,这里就一笔带过,不再重复进行详细说明了。

  • criterion:不纯度的衡量指标,Gini系数或信息熵
  • max_depth:树的最大深度,超过最大深度的树枝都会被剪掉
  • min_samples_leaf:一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本,否则分枝就不会发生
  • min_samples_split:一个节点必须要包含至少min_samples_split个训练样本,这个节点才允许被分枝,否则分枝就不会发生
  • max_features:max_features限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃, 默认值为总特征个数开平方取整
  • min_impurity_decrease:限制信息增益的大小,信息增益小于设定数值的分枝不会发生
  • class_weight:用于平衡不均衡数据集样本
  • min_weight_fraction_leaf:计算样本权重版本的 min_samples_leaf

n_estimators

n_estimators是随机森林中树模型的数量,即基评估器的数量。这个参数对随机森林模型的精确性影响是单调的,n_estimators越大,模型的效果往往越好。但是相应的,任何模型都有决策边界,n_estimators达到一定的程度之后,随机森林的性能往往不再上升或开始波动,并且,n_estimators越大,需要的计算量和内存也越大,训练的时间也会越长。对于这个参数,我们是会在计算资源和模型效果之间取得平衡。

random_state

随机森林中的random_state和决策树中相似,只不过在决策树中,一个random_state只控制生成一棵树的随机状态,而随机森林中的random_state控制的是其集成的所有树模型中的随机状态,例如随机森林的random_state为一个常数后,包含的所有树模型的random_state则状态下固定的随机数。

注意:sklearn中的决策树不是传统的决策树模型,也含有random_state参数,也就是随机选择部分特征,但在一些情况下或许你会发现随机森林集成单棵决策树和用sklearn直接创建单个决策树模型的效果也是不同的,这是因为在sklearn中随机森林中集成的决策树的特征选择随机性要比tree模块中的决策树模型的随机性大得多,例如某数据集有700个特征,那随机森林中的每棵树可能随机选择其中的几十个特征来考虑,而独立的单个决策树模型可能随机选择其中的几百个特征来考虑。

bootstrap & oob_score

随机森林中在保证树模型的随机性时,除了原本决策树模型自带的随机性(从原始特征中随机选择部分特征),对于其中每个树模型的训练样本,则采用bootstrap方法,当 bootstrap 参数为True时,假设有 nnn 个树模型,则会从原始训练样本中进行有放回随机抽样得到大小与原始训练样本数量相同的 nnn 个自助集,这 nnn 个自助集作为对对应的 nnn 个树模型的训练数据。该方法可进一步增大模型的随机性。

每个自助集中只包含原始数据中的部分数据,由于可重复抽样,因此大小与原始训练数据集相同,对于每棵树而言,训练数据都仅包含原始数据的部分数据,其它数据被称为袋外数据(out of bag, oob data),为了不让这部分数据浪费,对于每棵树我们将它对应的袋外数据作为这单棵树模型的测试集进行性能测试,当 oob_score 参数为True时,随机森林模型在训练后会针对每棵树模型使用袋外数据计算准确度后取其均值,则在训练随机森林模型后可调用 oob_score_ 接口查看。

n_jobs

n_jobs表示并行运行的作业数,用于指定随机森林的并行计算,可以加速训练过程

  • -1:使用最大的CPU核心数,例如4核CPU会启动4个并行作业。
  • 1(默认):禁用并行计算,串行运行。
  • 2、3等整数:指定并行运行的作业数。

并行运行时,会拆分数据到不同CPU内核分别训练,然后合并结果,可大幅减少随机森林的训练时间,但会消耗更多CPU资源。

参数影响程度

我们在调参的时候,一般会从基于主观判断来从对模型影响最大的参数向影响最小的参数调整,对于可控的数值型参数,例如随机森林的 n_estimators 我们往往基于经验和主观判断调节,对于选项较少的如 criterion等参数,我们一般可以使用网格调参,当然算力允许的话想怎么调都是可以的。

参数影响影响程度
n_estimators随着参数值的增加,模型性能提升至平稳,不影响单个模型的复杂度4
max_depth默认为最大值(不限制),值越小,模型复杂度越小3
min_samples_leaf默认为最小值(1),值越大,模型复杂度越小2
min_samples_split默认为最小值(2),值越大,模型复杂度越小2
max_features默认为中间值(auto),值越小,模型复杂度越小,值越大,模型复杂度越大1

模型复杂度越大,过拟合风险越大,欠拟合风险越小;模型复杂度越小,欠拟合风险越大,过拟合风险越小。

ps:这里的参数中除了 n_estimators 外的其它参数影响程度对于单个决策树模型也是同理的。

到此这篇关于Python sklearn库中的随机森林模型详解的文章就介绍到这了,更多相关Python sklearn随机森林模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python实战之德州扑克第三步-比较大小

    python实战之德州扑克第三步-比较大小

    这篇文章主要介绍了python实战之德州扑克第三步-比较大小,稳中有非常详细的代码示例,对正在学习python的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-04-04
  • Django之创建引擎索引报错及解决详解

    Django之创建引擎索引报错及解决详解

    这篇文章主要介绍了Django之创建引擎索引报错及解决详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Python 多线程处理任务实例

    Python 多线程处理任务实例

    这篇文章主要介绍了Python 多线程处理任务,下面文章利用一个真实实例围绕Python 多线程处理任务的相关资料展开内容,需要的朋友可以参考一下
    2021-11-11
  • 自动转换Python代码为HTML界面的GUI库remi使用探究

    自动转换Python代码为HTML界面的GUI库remi使用探究

    这篇文章主要为大家介绍了自动转换Python代码为HTML界面的GUI库remi使用探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • 10个Python Excel自动化脚本分享

    10个Python Excel自动化脚本分享

    在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式,本文将分享10个实用的Excel自动化脚本,希望可以帮助大家更轻松地掌握这些技能
    2025-02-02
  • 利用Python实现批量下载上市公司财务报表

    利用Python实现批量下载上市公司财务报表

    这篇文章主要为大家介绍了如何利用Python做个小工具,可以批量把某网站上的上市公司的财报下下来。文中的示例代码讲解详细,感兴趣的可以动手试一试
    2022-03-03
  • python Selenium 库的使用技巧

    python Selenium 库的使用技巧

    这篇文章主要介绍了python Selenium 库的使用技巧,帮助大家更好的理解和学习python Selenium 库,感兴趣的朋友可以了解下
    2020-10-10
  • 本地部署Python Flask并搭建web问答应用程序框架实现远程访问的操作方法

    本地部署Python Flask并搭建web问答应用程序框架实现远程访问的操作方法

    Flask是一个Python编写的Web微框架,使用Python语言快速实现一个网站或Web服务,本期教程我们使用Python Flask搭建一个web问答应用程序框架,并结合cpolar内网穿透工具将我们的应用程序发布到公共网络上,实现可多人远程进入到该web应用程序访问,需要的朋友可以参考下
    2023-12-12
  • Python基于class()实现面向对象原理详解

    Python基于class()实现面向对象原理详解

    这篇文章主要介绍了Python基于class()实现面向对象原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 使用python播放音频的示例代码

    使用python播放音频的示例代码

    在Python中,我们可以使用多种库来播放音频文件,其中最常用的是pygame库和playsound库,本文给大家分享使用这些库的示例,对python播放音频示例代码感兴趣的朋友一起看看吧
    2024-02-02

最新评论