python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python sklearn随机森林模式

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

作者: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

常用属性和接口

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

参数说明

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

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表示并行运行的作业数,用于指定随机森林的并行计算,可以加速训练过程

并行运行时,会拆分数据到不同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随机森林模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文