【实践】随机森林算法参数解释及调优(含Python代码)

这篇具有很好参考价值的文章主要介绍了【实践】随机森林算法参数解释及调优(含Python代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

上篇文章梳理了随机森林的各理论要点,本文首先详细解释了随机森林类的参数含义,并基于该类讲解了参数择优过程。

随机森林类库包含了RandomForestClassifer类回归类是RandomForestRegressor类。RF的变种ExtraTress也有ExtraTressClassifier类和ExtraTressRegressor类。由于这四个类的参数基本相同,只要完全理解其中一个类,其他三个类很快就能上手。

本文只介绍RandomForestClassifer类。

随机森林是基于bagging框架的决策树模型,因此随机森林的参数择优包括两部分:

(1)RF框架的参数择优;

(2)RF决策树的参数择优。因此,理解RF框架参数和决策树参数的含义是模型参数择优的前提。

RF框架参数含义

n_estimators : 对原始数据集进行有放回抽样生成的子数据集个数, 即决策树的个数。若n_estimators太小容易欠拟合,太大不能显著的提升模型,所以n_estimators选择适中的数值。

bootstrp:是否对样本集进行有放回抽样来构建树,True表示是,默认值True

oob_score:是否采用袋外样本来评估模型的好坏,True代表是,默认值False,袋外样本误差是测试数据集误差的无偏估计,所以推荐设置True。

RF框架的参数很少,框架参数择优一般是调节n_estimators值,即决策树个数。

RF决策树参数含义

max_features:构建决策树最优模型时考虑的最大特征数。默认是”auto“,表示最大特征数是N的平方根;“log2”表示最大特征数是 log ⁡ 2 N \log_2^N log2N,;"sqrt"表示最大特征数为 N \sqrt{N} N ,。如果是整数,代表考虑的最大特征数;如果是浮点数,表示对(N*max_features)取整。其中N表示样本的特征数。

max_depth:决策树最大深度。若等于None,表示决策树在构建最优模型的时候不会限制子树的深度。如果模型样本量多,特征也多的情况下,推荐限制最大深度;若样本量少或者特征少,则不限制最大深度。

min_samples_leaf:叶子节点含有的最少样本。若叶子节点样本数小于min_samples_leaf,则对该叶子节点和兄弟叶子节点进行剪枝,只留下该叶子节点的父节点。整数型表示个数,浮点型表示取大于等于(样本数*min_samples_leaf)的最小整数。min_samples_leaf默认值是1。

min_samples_split : 节点可分的最小样本数, 默认值是2 。整数型和浮点型的含义与min_samples_leaf类似。

max_leaf_nodes:最大叶子节点数。int设置节点数,None表示对叶子节点数没有限制。

min_impurity_decrease:节点划分的最小不纯度。假设不纯度用信息增益表示,若某节点划分时的信息增益大于等于min_impurity_decrease,那么该节点还可以再划分;反之,则不能划分。

criterion:表示节点的划分标准。不纯度标准参考Gini指数,信息增益标准参考"entrop"熵。

min_samples_leaf:叶子节点最小的样本权重和。叶子节点如果小于这个值,则会和兄弟节点一起被剪枝,只保留该叶子节点的父节点。默认是0,则不考虑样本权重问题。一般来说,如果有较多样本的缺失值或偏差很大,则尝试设置该参数值。

RF参数择优实例

RF参数择优思想:RF模型可以理解成决策树模型嵌入到bagging框架,因此,我们首先对外层的bagging框架进行参数择优,然后再对内层的决策树模型进行参数择优。在优化某一参数时,需要把其他参数设置为常数。

导入相关的包:

import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV

训练数据集:

X,y=make_classification()
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=1)

我们不妨看一下所有参数都采用默认值,查看分类情况:

estimator=RandomForestClassifier(oob_score=True,random_state=1)
estimator.fit(X_train,y_train)
print(estimator.oob_score_)
0.9375

对外层的bagging框架进行参数择优,即对n_estimators参数择优,其他参数仍然是默认值

n_esimators参数择优的范围是:1~101,步长为10。十折交叉验证率选择最优n_estimators 。

param_test1={'n_estimators':range(1,101,10)}
grid_search=GridSearchCV(estimator=RandomForestClassifier(random_state=1),param_grid=param_test1,scoring='roc_auc',cv=10)
grid_search.fit(X_train,y_train)
print(grid_search.best_params_)
print(grid_search.best_score_)

输出结果:

{'n_estimators': 41}
0.9800000000000001

因此,最佳的子决策树个数是71,准确率98%,相比默认参数的93.7%有较大的提高。

优化决策树参数的最大特征数max_features,其他参数设置为常数,且n_estimators为41

max_features参数择优的范围:1~11,步长为1,十折交叉验证率选择最优max_features 。

param_test2={'max_features':range(1,21,1)}
grid_search_1=GridSearchCV(estimator=RandomForestClassifier(n_estimators=grid_search.best_params_['n_estimators'],random_state=1),param_grid=param_test2,scoring='roc_auc',cv=10)
grid_search_1.fit(X_train,y_train)
print(grid_search_1.best_params_)
print(grid_search_1.best_score_)

结果:

{'max_features': 4}
0.9800000000000001

因此,选择最佳的最大特征数为4,准确率为98%,相比默认的最大特征数,准确率有一定的提高。

决策树的其他最优参数也是按照类似的步骤去搜寻,这里就不一一介绍了。

用最优参数重新训练数据,计算泛化误差:

rfl=RandomForestClassifier(n_estimators=grid_search.best_params_['n_estimators'],max_features=grid_search_1.best_params_['max_features'],oob_score=True,random_state=1)
rfl.fit(X_train,y_train)
print(rfl.oob_score_)
0.9125

总结

随机森林模型优化主要是考虑如何选择子数据集个数( n_estimators ) 和最大特征个数(max_features),参数优化顺序可参考下图:
randomforestclassifier参数,机器学习系列文章,python,算法,随机森林,机器学习,决策树

首先增大n_estimators,提高模型的拟合能力,当模型的拟合能力没有明显提升的时候,则再增大n_estimators,提高每个子模型的拟合能力,则相应的提高了模型的拟合能力。

上节的参数调优是比较常用的一种参数调优方法,可应用到其他模型的参数优化过程。文章来源地址https://www.toymoban.com/news/detail-816716.html

完整版代码

import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV

X,y=make_classification()
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=1)
estimator=RandomForestClassifier(oob_score=True,random_state=1)
estimator.fit(X_train,y_train)
print(estimator.oob_score_)

"""
对外层的bagging框架进行参数择优,即对n_estimators参数择优,其他参数仍然是默认值
"""
param_test1={'n_estimators':range(1,101,10)}
grid_search=GridSearchCV(estimator=RandomForestClassifier(random_state=1),param_grid=param_test1,scoring='roc_auc',cv=10)
grid_search.fit(X_train,y_train)
print(grid_search.best_params_)
print(grid_search.best_score_)

"""
优化决策树参数的最大特征数max_features,其他参数设置为常数,且n_estimators为81
"""
param_test2={'max_features':range(1,21,1)}
grid_search_1=GridSearchCV(estimator=RandomForestClassifier(n_estimators=grid_search.best_params_['n_estimators'],random_state=1),param_grid=param_test2,scoring='roc_auc',cv=10)
grid_search_1.fit(X_train,y_train)
print(grid_search_1.best_params_)
print(grid_search_1.best_score_)

"""
用最优参数重新训练数据,计算泛化误差
"""
rfl=RandomForestClassifier(n_estimators=grid_search.best_params_['n_estimators'],max_features=grid_search_1.best_params_['max_features'],oob_score=True,random_state=1)
rfl.fit(X_train,y_train)
print(rfl.oob_score_)

到了这里,关于【实践】随机森林算法参数解释及调优(含Python代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 随机森林算法(Random Forest)原理分析及Python实现

    随机森林是bagging集成策略中最实用的算法之一。森林是分别建立了多个决策树,把它们放到一起就是森林,这些决策树都是为了解决同一任务建立的,最终的目标也都是一致的,最后将其结果来平均即可,如图所示。 从给定的训练数据集中学习出一个函数(模型参数),当

    2024年02月02日
    浏览(58)
  • Python实现PSO粒子群优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。 PSO是粒子群优化算法(Particle Swarm Optimization)的英文缩写,是一种基于种群的随机优化技术,由Eberhart和Kennedy于1995年提出。粒子群算法模仿昆虫、

    2024年02月13日
    浏览(43)
  • Python实现贝叶斯优化器(Bayes_opt)优化随机森林分类模型(RandomForestClassifier算法)项目实战

    说明:这是一个机器学习实战项目(附带 数据+代码+文档+视频讲解 ),如需 数据+代码+文档+视频讲解 可以直接到文章最后获取。 贝叶斯优化器(BayesianOptimization) 是一种黑盒子优化器,用来寻找最优参数。 贝叶斯优化器是基于高斯过程的贝叶斯优化,算法的参数空间中有大

    2024年02月11日
    浏览(47)
  • python机器学习——分类模型评估 & 分类算法(k近邻,朴素贝叶斯,决策树,随机森林,逻辑回归,svm)

    交叉验证:为了让被评估的模型更加准确可信 交叉验证:将拿到的数据,分为训练和验证集。以下图为例:将数据分成5份,其中一份作为验证集。然后经过5次(组)的测试,每次都更换不同的验证集。即得到5组模型的结果,取平均值作为最终结果。又称5折交叉验证。 通常情

    2024年02月03日
    浏览(67)
  • 随机森林算法深入浅出

    目录 一 随机森林算法的基本原理 二 随机森林算法的优点 1. 随机森林算法具有很高的准确性和鲁棒性 2. 随机森林算法可以有效地避免过拟合问题 3. 随机森林算法可以处理高维度数据 4. 随机森林算法可以评估特征的重要性 三 随机森林算法的缺点 1. 随机森林算法对于少量数

    2023年04月08日
    浏览(58)
  • 随机森林回归模型算法

    目录 随机森林回归算法的介绍 随机森林回归算法的Python示例与解释 总结 随机森林是一种集成学习方法,用于解决分类和回归问题。它结合了多个决策树模型的预测结果,通过集体决策来提高整体性能和减少过拟合。随机森林适用于各种数据类型,并且在许多应用领域都表现

    2024年04月22日
    浏览(38)
  • 分类算法-随机森林实战案例

            随机森林是一种 有监督学习算法 ,是以决策树为基学习器的 集成学习算法 。                 那什么是有监督学习呢?有监督学习就是把有已知结果的数据集拿去训练,如果训练结果与标准答案的精度足够高就可以使用这个模型去预测或者分类未知结果

    2023年04月16日
    浏览(44)
  • 分类算法系列⑥:随机森林

    目录 集成学习方法之随机森林 1、集成学习方法 2、随机森林 3、随机森林原理 为什么采用BootStrap抽样 为什么要有放回地抽样 4、API 5、代码 代码解释 结果 6、随机森林总结   🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用

    2024年02月10日
    浏览(33)
  • 随机森林回归算法讲解

    ChatGPT中文版点我跳转 恰饭广告,望各位贵客支持,感谢 学习基础算法的过程中,几乎任何问题都可以用恰饭的那个网站解决哦! 随机森林(Random Forest)是一种基于集成学习的机器学习算法,被广泛用于回归问题。它通过使用多个决策树对数据进行建模,并将它们的预测结

    2024年02月03日
    浏览(37)
  • 无涯教程-分类算法 - 随机森林

    随机森林是一种监督学习算法,可用于分类和回归,但是,它主要用于分类问题,众所周知,森林由树木组成,更多树木意味着更坚固的森林。同样,随机森林算法在数据样本上创建决策树,然后从每个样本中获取预测,最后通过投票选择最佳解决方案。它是一种集成方法,

    2024年02月11日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包