集成学习Bagging——随机森林模型

news2024/11/29 4:28:50

目录

1. Bagging方法的基本思想

2. 随机森林RandomForest 

2.1 RandomForestRegressor的实现

2.2 随机森林回归器的参数

2.2.1 弱分类器结构

2.2.2 弱分类器数量

2.2.3 弱分类器训练的数据

2.2.4 其它参数


1. Bagging方法的基本思想

        Bagging又称“袋装法”,它是所有集成学习方法当中最为著名、最为简单、也最为有效的操作之一。在Bagging集成当中,我们并行建立多个弱评估器(通常是决策树,也可以是其他非线性算法),并综合多个弱评估器的结果进行输出。当集成算法目标是回归任务时,集成算法的输出结果是弱评估器输出的结果的平均值;当集成算法的目标是分类任务时,集成算法的输出结果是弱评估器输出的结果少数服从多数。

\bullet 多分类情况:

        假设现在一个bagging集成算法当中有7个弱评估器,对任意一个样本而言,输出的结果如下:

#分类的情况:输出7个弱评估器上的分类结果(0,1,2)
r_clf = np.array([0,2,1,1,2,1,0])
b_result_clf = np.argmax(np.bincount(r_clf))
b_result_clf #集成算法在现有样本上应该输出的类别
1
  • bincount会先将array由小到大进行排序,然后对每个数值进行计数,并返回计数结果的函数。需要注意的是,bincount函数不能接受负数输入。
  • argmax是找到array中最大值,并返回最大值索引的函数。

\bullet 二分类且涉及到一些负数类别的情况:

r_clf = np.array([1,1,1,-1,-1,-1,-1])
b_result_clf = 1 if (r_clf == 1).sum() > (r_clf != 1).sum() else -1
b_result_clf
-1

\bullet 评估器的数量是偶数,而少数和多数刚好一致的情况:

r_clf = np.array([1,1,1,0,0,0,2,2])
b_result_clf = np.argmax(np.bincount(r_clf))
b_result_clf
0

如果使用argmax函数,则从数量一致的类别中,返回编码数字更小的类别;

也可以进行随机设置,从数量一致的类别中随机返回一个类别。

\bullet 回归的情况:

r_reg = np.array([-2.082, -0.601, -1.686, -1.001, -2.037, 0.1284, 0.8500])
b_result_reg = r_reg.mean()
b_result_reg
-0.9183714285714285

     在sklearn当中,我们可以接触到两个Bagging集成算法,一个是随机森林(RandomForest),另一个是极端随机树(ExtraTrees),他们都是以决策树为弱评估器的有监督算法,可以被用于分类、回归、排序等各种任务。同时,我们还可以使用bagging的思路对其他算法进行集成,比如使用装袋法分类的类BaggingClassifier对支持向量机或逻辑回归进行集成。

Bagging算法集成类
随机森林分类RandmForestClassifier
随机森林回归RandomForestRegressor
极端随机树分类ExtraTreesClassifier
极端随机树回归ExtraTreesRegressor
装袋法分类BaggingClassifier
装袋法回归

BaggingRegressor

2. 随机森林RandomForest 

        随机森林是机器学习领域最常用的算法之一,其算法构筑过程非常简单:从提供的数据中随机抽样出不同的子集,用于建立多棵不同的决策树,并按照Bagging的规则对单棵决策树的结果进行集成(回归则平均,分类则少数服从多数)。 随机森林的学习能力异常强大、算法复杂度高、又具备一定的抗过拟合能力,是从根本上来说比单棵决策树更优越的算法。

        在sklearn中,随机森林可以实现回归也可以实现分类。随机森林回归器由类sklearn.ensemble.RandomForestRegressor实现,随机森林分类器则有类sklearn.ensemble.RandomForestClassifier实现。我们可以像调用逻辑回归、决策树等其他sklearn中的算法一样,使用“实例化、fit、predict/score”三部曲来使用随机森林,同时我们也可以使用sklearn中的交叉验证方法来实现随机森林。其中回归森林的默认评估指标为R2,分类森林的默认评估指标为准确率。

class sklearn.ensemble.RandomForestRegressor(n_estimators=100, *, criterion='squared_error', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, min_impurity_decrease=0.0, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, ccp_alpha=0.0, max_samples=None)

class sklearn.ensemble.RandomForestClassifier(n_estimators=100, *, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, min_impurity_decrease=0.0, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None, ccp_alpha=0.0, max_samples=None)

        随机森林回归器和分类器的参数高度一致,随机森林有大量的参数,幸运的是,随机森林中所有参数都有默认值,因此即便不设置任何参数,也可以调用随机森林算法。

2.1 RandomForestRegressor的实现

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestRegressor as RFR
from sklearn.tree import DecisionTreeRegressor as DTR
from sklearn.model_selection import cross_validate,KFold
# 这里不使用cross_val_score是因为其只返回交叉验证之后在验证集上的结果
# 而cross_validate返回验证集上的结果和交叉验证在训练集上的结果
# 决策树本身就是非常容易过拟合的算法,而集成模型的参数量/复杂度很难支持大规模网格搜索,因此需要同时关注算法的过拟合情况
data=pd.read_csv('F:\\Jupyter Files\\机器学习进阶\\集成学习\\datasets\\House Price\\train_encode.csv',encoding='utf-8')
data.drop('Unnamed: 0', axis=1, inplace=True)
data.head(5)
Id住宅类型住宅区域街道接触面积(英尺)住宅面积街道路面状况巷子路面状况住宅形状(大概)住宅现状水电气...泳池面积泳池质量篱笆质量其他配置其他配置的价值销售月份销售年份销售类型销售状态SalePrice
00.05.03.036.0327.01.00.03.03.00.0...0.00.00.00.00.01.02.08.04.0208500
11.00.03.051.0498.01.00.03.03.00.0...0.00.00.00.00.04.01.08.04.0181500
22.05.03.039.0702.01.00.00.03.00.0...0.00.00.00.00.08.02.08.04.0223500
33.06.03.031.0489.01.00.00.03.00.0...0.00.00.00.00.01.00.08.00.0140000
44.05.03.055.0925.01.00.00.03.00.0...0.00.00.00.00.011.02.08.04.0250000
x=data.iloc[:,:-1]
y=data.iloc[:,-1]
reg_f = RFR() #实例化随机森林
reg_t = DTR() #实例化决策树
cv = KFold(n_splits=5,shuffle=True,random_state=1412) #实例化交叉验证方式
result_t = cross_validate(reg_t #要进行交叉验证的评估器
                          ,x,y #数据
                          ,cv=cv #交叉验证模式
                          ,scoring="neg_mean_squared_error" #评估指标
                          ,return_train_score=True #是否返回训练分数,默认为FALSE
                          ,verbose=True #是否打印进度
                         )
result_f = cross_validate(reg_f #要进行交叉验证的评估器
                          ,x,y #数据
                          ,cv=cv #交叉验证模式
                          ,scoring="neg_mean_squared_error" #评估指标
                          ,return_train_score=True #是否返回训练分数,默认为FALSE
                          ,verbose=True #是否打印进度
                         )
result_t
{'fit_time': array([0.06310916, 0.04401135, 0.04403043, 0.043993  , 0.04801202]),
 'score_time': array([0.00400209, 0.00400114, 0.        , 0.00400305, 0.        ]),
 'test_score': array([-1.35669066e+09, -2.80332067e+09, -1.69734773e+09,                   -1.68782499e+09,-1.56493161e+09]),
 'train_score': array([-0., -0., -0., -0., -0.])}

在决策树中,训练集的MSE等于0,而测试集的MSE却达到10^{9},训练集和测试集的分数差异较大,模型严重过拟合。

result_f
{'fit_time': array([2.49504042, 2.5139451 , 2.55551529, 2.45634675, 2.44230843]),
 'score_time': array([0.02674079, 0.02000546, 0.02000642, 0.02218747, 0.02398205]),
 'test_score': array([-7.62267698e+08, -2.21782016e+09, -8.04470618e+08,                 -4.79019102e+08,-9.25967504e+08]),
 'train_score': array([-1.34282483e+08, -1.00707631e+08, -1.18452089e+08,                 -1.42482232e+08,-1.26816453e+08])}

在随机森林中,训练集和测试集的分数差异较小,随机森林的过拟合程度没有决策树高。

        在集成学习中,衡量回归类算法的指标一般是RMSE(根均方误差),也就是MSE开根号后的结果。现实数据的标签往往数字巨大、数据量庞杂,MSE作为平方结果会放大现实数据上的误差(例如随机森林结果中得到的,7∗10^{8}等结果),因此通常会对平方结果开根号,让回归类算法的评估指标在数值上不要过于夸张。同样的,方差作为平方结果,在现实数据上也会太大,因此使用标准差进行模型稳定性的衡量。 

# 决策树和随机森林在训练集和测试集上的RMSE
trainRMSE_f = abs(result_f["train_score"])**0.5
testRMSE_f = abs(result_f["test_score"])**0.5
trainRMSE_t = abs(result_t["train_score"])**0.5
testRMSE_t = abs(result_t["test_score"])**0.5

xaxis = range(1,6)
plt.figure(figsize=(8,6),dpi=80)
plt.plot(xaxis,trainRMSE_f,color="green",label = "RandomForestTrain")
plt.plot(xaxis,testRMSE_f,color="green",linestyle="--",label = "RandomForestTest")
plt.plot(xaxis,trainRMSE_t,color="orange",label = "DecisionTreeTrain")
plt.plot(xaxis,testRMSE_t,color="orange",linestyle="--",label = "DecisionTreeTest")
plt.xticks([1,2,3,4,5])
plt.xlabel("CVcounts",fontsize=16) #交叉验证次数
plt.ylabel("RMSE",fontsize=16)
plt.legend()
plt.show()

   

从图像来看,随机森林与决策树都处于过拟合状态,不过随机森林的过拟合程度较轻,决策树的过拟合程度较强。两个算法在训练集上的结果都比较优秀,决策树的可以完美学习训练集上的内容,达到RMSE=0的程度,而随机森林在训练集上的RMSE大约在1w上下徘徊,测试集上的结果则是随机森林更占优。可见,与填写的参数无关,随机森林天生就是比决策树更不容易过拟合、泛化能力更强。

2.2 随机森林回归器的参数

        当填写参数之后,随机森林可以变得更强大。比起经典机器学习算法逻辑回归、岭回归等,随机森林回归器的参数数量较多,随机森林类的参数可以分为如下4大类别:

类型参数
弱分类器数量n_estimators
弱分类器的训练数据bootstrap, oob_score, max_samples, max_features, random_state
弱分类器结构criterion, max_depth, min_samples_split,
min_samples_leaf, min_weight_fraction_leaf, max_leaf_nodes,
min_impurity_decrease
其他n_jobs, verbose, ccp_alpha

2.2.1 弱分类器结构

        在集成算法当中,控制单个弱评估器的结构非常重要,因为单个弱评估器的复杂度/结果都会影响全局,其中单棵决策树的结构越复杂,集成算法的整体复杂度会更高,计算会更加缓慢、模型也会更加容易过拟合,因此集成算法中的弱评估器也需要被剪枝。随机森林回归器的弱评估器是回归树,因此集成评估器中有大量的参数都与弱评估器回归树中的参数重合 :

类型参数
弱分类器结构criterion:弱评估器分枝时的不纯度衡量指标
max_depth:弱评估器被允许的最大深度,默认None
min_samples_split:弱评估器分枝时,父节点上最少要拥有的样本个数
min_samples_leaf:弱评估器的叶子节点上最少要拥有的样本个数
min_weight_fraction_leaf:当样本权重被调整时,叶子节点上最少要拥有的样本权重
max_leaf_nodes:弱评估器上最多可以有的叶子节点数量
min_impurity_decrease:弱评估器分枝时允许的最小不纯度下降量

这些参数在随机森林中的用法与默认值与决策树类DecisionTreeRegressor中完全一致,专门用于对决策树进行剪枝、控制单个弱评估器的结构。

\bullet 分枝标准与特征重要性 criterion与feature_importances_

与分类树中的信息熵/基尼系数不同,回归树中的criterion可以选择"squared_error"(平方误差),"absolute_error"(绝对误差)以及"poisson"(泊松偏差)。对任意样本i而言,y_{i}为真实标签,\widehat{y}_{i}为预测标签,则各个criterion的表达式为:

平方误差:\sum (y_{i}-\widehat{y}_{i})^{2}

绝对误差:\sum \left | y_{i}-\widehat{y_{i}} \right |

泊松偏差:2\sum (y_{i}log(\frac{y_{i}}{\widehat{y_{i}}})-(y_{i}-\widehat{y_{i}}))

作为分枝标准,平方误差比绝对误差更敏感(类似于信息熵比基尼系数更敏感),并且在计算上平方误差比绝对误差快很多。泊松偏差则是适用于一个特殊场景的:当需要预测的标签全部为正整数时,标签的分布可以被认为是类似于泊松分布的。正整数预测在实际应用中非常常见,比如预测点击量、预测客户/离职人数、预测销售量等。

另外,当选择不同的criterion之后,决策树的feature_importances_也会随之变化,因为在sklearn当中,feature_importances_是特征对criterion下降量的总贡献量,因此不同的criterion可能得到不同的特征重要性。对我们来说,选择criterion的唯一指标就是最终的交叉验证结果——无论理论是如何说明的,我们只取令随机森林的预测结果最好的criterion。

\bullet 调节树结构来控制过拟合

1) max_depth:最粗犷的剪枝方式,从树结构层面来看,对随机森林抗过拟合能力影响最大的参数。max_depth的默认值为None,也就是不限深度。因此当随机森林表现为过拟合时,选择一个小的max_depth会很有效。

2) max_leaf_nodes与min_sample_split:比max_depth更精细的减枝方式,但限制叶子数量和分枝,既可以实现微调,也可以实现大刀阔斧的剪枝。max_leaf_nodes的默认值为None,即不限叶子数量。min_sample_split的默认值为2,等同于不限制分枝。

3) min_impurity_decrease:最精细的减枝方式,可以根据不纯度下降的程度减掉相应的叶子。默认值为0,因此是个相当有空间的参数。

2.2.2 弱分类器数量

\bullet n_estimators

        n_estimators是森林中树木的数量,即弱评估器的数量,在sklearn中默认100,它是唯一一个对随机森林而言必填的参数。n_estimators对随机森林模型的精确程度、复杂度、学习能力、过拟合情况、需要的计算量和计算时间都有很大的影响,因此n_estimators往往是我们在调整随机森林时第一个需要确认的参数。对单一决策树而言,模型复杂度由树结构(树深、树宽、树上的叶子数量等)与数据量(样本量、特征量)决定,而对随机森林而言,模型复杂度由森林中树的数量、树结构与数据量决定,其中树的数量越多,模型越复杂。

当模型复杂度上升时,模型的泛化能力会先增加再下降(相对的泛化误差会先下降再上升),我们需要找到模型泛化能力最佳的复杂度。在实际进行训练时,最佳复杂度往往是一个比较明显的转折点,当复杂度高于最佳复杂度时,模型的泛化误差开始上升。

对随机森林而言,该图像的横坐标可以被无缝切换为参数n_estimators上的值。当n_estimators越大时:

  • 模型的复杂程度上升,泛化能先增强再减弱(或不变)
  • 模型的学习能力越来越强,在训练集上的分数可能越来越高,过拟合风险越来越高
  • 模型需要的算力和内存越来越多
  • 模型训练的时间会越来越长

因此在调整n_estimators时,我们总是渴望在模型效果与训练难度之间取得平衡,同时我们还需要使用交叉验证来随时关注模型过拟合的情况。在sklearn现在的版本中,n_estimators的默认值为100,个人电脑能够容忍的n_estimators数量大约在200~1000左右。

def RMSE(cvresult,key):
    return (abs(cvresult[key])**0.5).mean()

reg_f = RFR(n_estimators=3)
cv = KFold(n_splits=5,shuffle=True,random_state=1412)
result_f = cross_validate(reg_f,X,y,cv=cv,scoring="neg_mean_squared_error"
                          ,return_train_score=True
                          ,verbose=True
                          ,n_jobs=-1)
RMSE(result_f,"test_score")
35066.17253044796
reg_f = RFR(n_estimators=100)
cv = KFold(n_splits=5,shuffle=True,random_state=1412)
result_f = cross_validate(reg_f,x,y,cv=cv,scoring="neg_mean_squared_error"
                          ,return_train_score=True
                          ,verbose=True)
RMSE(result_f,"test_score")
30689.023671586263
reg_f = RFR(n_estimators=500)
cv = KFold(n_splits=5,shuffle=True,random_state=1412)
result_f = cross_validate(reg_f,x,y,cv=cv,scoring="neg_mean_squared_error"
                          ,return_train_score=True
                          ,verbose=True)
RMSE(result_f,"test_score")
30158.43588008265
reg_f = RFR(n_estimators=800)
cv = KFold(n_splits=5,shuffle=True,random_state=1412)
result_f = cross_validate(reg_f,x,y,cv=cv,scoring="neg_mean_squared_error"
                          ,return_train_score=True
                          ,verbose=True)
RMSE(result_f,"test_score")
30392.639257641655

随着n_estimators的增大,模型的RMSE先减少后增加。

2.2.3 弱分类器训练的数据

        决策树的分枝是对每个特征决策树都会找到不纯度下降程度最大的节点进行分枝,因此原则上来说,只要给出数据一致、并且不对决策树进行减枝的话,决策树的结构一定是完全相同的。对集成算法来说,平均多棵相同的决策树的结果并没有意义,因此集成算法中每棵树必然是不同的树,Bagging算法是依赖于随机抽样数据来实现这一点的。随机森林会从提供的数据中随机抽样出不同的子集,用于建立多棵不同的决策树,最终再按照Bagging的规则对众多决策树的结果进行集成。因此在随机森林回归器的参数当中,有数个关于数据随机抽样的参数。

\bullet bootstrap

bootstrap参数的输入为布尔值,默认True,控制是否在每次建立决策树之前对数据进行随机抽样。如果设置为False,则表示每次都使用全部样本进行建树,如果为True,则随机抽样建树。从语言的意义上来看,bootstrap可以指代任意类型的随机抽样,但在随机森林中它特指有放回随机抽样技术。如下图所示,在一个含有m个样本的原始训练集中,我们进行随机采样。每次采样一个样本,并在抽取下一个样本之前将该样本放回原始训练集,也就是说下次采样时这个样本依然可能被采集到,这样采集max_samples次,最终得到max_samples个样本组成的自助集。

通常来说,max_samples是等于m的(行业惯例),也就是抽样数据集的大小与原始数据集一致,但是如果原始数据集太大、或者太小,我们也可以自由调整max_samples的大小。由于是随机采样,这样每次的自助集和原始数据集不同,和其他的采样集也是不同的。这样我们就可以自由创造取之不尽用之不竭,并且互不相同的自助集,用这些自助集来训练我们的弱分类器,弱分类器自然也就各不相同了。然而有放回抽样也会有自己的问题。由于是有放回,一些样本可能在同一个自助集中出现多次,而其他一些却可能被忽略。当抽样次数足够多、且原始数据集足够大时,自助集大约平均会包含全数据的63%,这个数字是有数学依据的。因为在max_samples次抽样中,一个样本被抽到某个自助集中的概率为:1-(1-\frac{1}{m})^{max-samples}

对于任意一个样本而言:
\bullet 一次抽样时抽到该样本的概率为\frac{1}{m}
\bullet  一次抽样时抽不到该样本的概率为1-\frac{1}{m}
\bullet  总共抽样max_samples次,一次也没有抽到该样本的概率就是(1-\frac{1}{m})^{max-samples}
\bullet  因此1减去该概率,就是一个样本在抽样中一定会被抽到某个自助集的概率。 当m刚好等于max_samples时,公式可以被修改为:1-(1-\frac{1}{m})^{m}


这明显是一个经典的极限问题,由洛必达法则可知:当m足够大时(接近极限时),这个概率收敛于1-\frac{1}{e},其中e是自然常数,整体概率约等于0.632。因此,会有约37%的训练数据被浪费掉,没有参与建模,这些数据被称为袋外数据(out of bag data,简写为oob)。在实际使用随机森林时,袋外数据常常被我们当做验证集使用,所以我们或许可以不做交叉验证、不分割数据集,而只依赖于袋外数据来测试我们的模型即可。当然,这也不是绝对的,当树的数量n_estimators不足,或者max_samples太小时,很可能就没有数据掉落在袋外,自然也有无法使用oob数据来作为验证集了。

\bullet oob_score & max_samples

        在随机森林回归器中,当boostrap=True时,我们可以使用参数oob_scoremax_samples,其中:oob_score控制是否使用袋外数据进行验证,输入为布尔值,默认为False,如果希望使用袋外数据进行验证,修改为True即可。max_samples表示自助集的大小,可以输入整数、浮点数或None,默认为None。

输入整数m,则代表每次从全数据集中有放回抽样m个样本
输入浮点数f,则表示每次从全数据集中有放回抽样f*全数据量个样本
输入None,则表示每次抽样都抽取与全数据集一致的样本量(X.shape[0])

在使用袋外数据时,还可以用随机森林的另一个重要属性:oob_score_来查看在袋外数据上测试的结果,但oob_score_输出的评估指标无法调整,它默认是R2。

reg = RFR(n_estimators=20
          , bootstrap=True #进行随机抽样
          , oob_score=True #按袋外数据进行验证
          , max_samples=500
         ).fit(x,y)
#重要属性oob_score_
reg.oob_score_ #在袋外数据上的R2为83%
0.8239091727162016

\bullet max_features

数据抽样还有另一个维度:对特征的抽样max_features,在随机森林中max_features的用法与决策树中完全一致,其输入也与决策树完全一致:

输入整数,表示每次分枝时随机抽取max_features个特征;
输入浮点数,表示每次分枝时抽取round(max_features * n_features)个特征;
输入"auto"或者None,表示每次分枝时使用全部特征n_features;
输入"sqrt",表示每次分枝时使用sqrt(n_features);
输入"log2",表示每次分枝时使用log2(n_features);

sqrt_ = []
log_ = []
for n_features in range(1,101,2):
    sqrt_.append(np.sqrt(n_features))
    log_.append(np.log2(n_features))    
xaxis = range(1,101,2)
plt.figure(figsize=(8,6),dpi=80)
#RMSE
plt.plot(xaxis,sqrt_,color="green",label = "sqrt(n)")
plt.plot(xaxis,log_,color="orange",label = "log2(n)")
plt.xticks(range(1,101,10))
plt.legend()
plt.show()

sqrt(n_features)和log2(n_features)都会返回一个比原始特征量小很多的数,但一般情况下log2返回的值比sqrt返回的值更小,因此如果我们想要树之间的差异更大,我们可以设置模式为log2。需要注意的是,无论对数据进行怎样的抽样,我们能够控制的都只是建立单棵树时的数据而已。在总数据量有限的情况下,单棵树使用的数据量越大,每一棵树使用的数据就会越相似,每棵树的结构也就会越相似,bagging的效果难以发挥、模型也很容易变得过拟合。因此,当数据量足够时,我们往往会消减单棵树使用的数据量。

\bullet random_state

参数random_state是“随机数种子”,它控制决策树当中多个具有随机性的流程。只要我们设置随机数种子,我们就可以重复抽样的结果,令本来应该“随机”的过程变成固定过程在sklearn实现的随机森林当中,决策树上也存在众多有随机性的流程:

  • 「强制」随机抽取每棵树建立时分枝用的特征,抽取的数量可由参数max_features决定
  • 「强制」随机排序每棵树分枝时所用的特征
  • 「可选」随机抽取每棵树建立时训练用的样本,抽取的比例可由参数max_samples决定

因此每次使用随机森林类时,我们建立的集成算法都是不同的,在同一个数据集上多次建树自然也会产生不同的模型结果。因此我们在建树的第一步总是会先设置随机数种子为一个固定值,让算法固定下来。

        当数据样本量足够大的时候(数万),变换随机数种子几乎不会对模型的泛化能力有影响,因此在数据量巨大的情况下,我们可以随意设置任意的数值;当数据量较小的时候,可以把随机数种子当做参数进行调整,但前提是必须依赖于交叉验证的结果。选择交叉验证结果中均值最高、方差最低的随机数种子,以找到泛化能力最强大的随机模式。

\bullet 总结

类型参数
弱分类器的训练数据bootstrap:是否对样本进行随机抽样
oob_score:如果使用随机抽样,是否使用袋外数据作为验证集
max_samples:如果使用随机抽样,每次随机抽样的样本量
max_features:随机抽取特征的数目
random_state:控制一切随机模式

2.2.4 其它参数

类型参数
其他n_jobs:允许调用的线程数
verbose:打印建树过程
ccp_alpha:结构风险|𝑇˜|上的系数,可用于控制过拟合
warm_start:支持增量学习

随机森林的verbose参数打印的是建树过程,但只有在树的数量众多、建模耗时很长时,verbose才会打印建树的具体过程,否则它只会打印出一行两简单的报告。warm_start是控制增量学习的参数,默认为False,该参数可以帮助随机森林处理巨量数据,解决围绕随机森林的众多关键问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/769118.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

keyclaok~keycloak存到cookie中的值和session_state

keycloak存到cookie中的值 AUTH_SESSION_IDKEYCLOAK_IDENTITYKEYCLOAK_SESSION AUTH_SESSION_ID 用户的当前session_state,它是会话级的,关闭浏览器就没了 KEYCLOAK_IDENTITY 它是用户跨端登录的基础,它也是一个jwt串,解析后…

Scala学习(三)

2.8 浮点类型(Float、Double) Scala的浮点类型可以表示一个小数,比如123.4f,7.8,0.12等等。 1)浮点型分类 数据类型 描述 Float [4] 32 位, IEEE 754标准的单精度浮点数 Double [8] 64 位 IEEE 754标准的双…

electron+vue3全家桶+vite项目搭建【24】设置应用图标,打包文件的图标

文章目录 引入实现步骤测试结果 引入 在electron中,我们可以通过electron-builder的配置文件来设置打包后的应用图标 实现步骤 因为mac环境下的图标需要特殊格式,这里我们可以利用electron-icon-builder进行配置 1.引入相关依赖 # 安装electron-ico…

Halcon 深度学习初探

什么是深度学习? 深度学习是一系列机器学习的方法集合,其算法结构类似于多层级的神经网络。通过对大量的训练样本图像的学习,提取其各个层次的特征,使网络具有判别和推理能力。 关于halcon中的深度学习: 自halcon17…

C#中的HashTable和Dictionary之间的区别

面试基础:C#中的HashTable和Dictionary之间的区别 HashTable和Dictionary都是用于存储数据的数据结构的类型。这两个数据结构都将存储的数据保存为键值对。

ESP32 VS Code开发环境“hello world“

程序员的世界有个不成文的约定,第一个程序先跑"hello world",今天我们就在esp32上跑下hello world! vs code配置 新建一个esp32-test文件夹,并在该文件夹下打开vs code: mkdir esp32-test cd est32-test …

小白到运维工程师的自学之路 第五十四集 (ansible自动化运维工具)

一、概述 Ansible是一种开源的自动化工具,用于自动化任务的执行、配置管理和应用部署。它采用基于Python编写的简单、轻量级的语法,可以通过SSH协议远程管理和配置多台计算机。 Ansible的主要特点包括: 1、简单易用:设计简单&a…

自动驾驶多任务框架 MultiTask V3、HybridNets和YOLOP比较

目标检测和分割是自动驾驶汽车感知系统的两个核心模块。它们应该具有高效率和低延迟,同时降低计算复杂性。目前,最常用的算法是基于深度神经网络的,这保证了高效率,但需要高性能的计算平台。 在自动驾驶汽车的场景下,大多使用的都是计算能力有限的嵌入式平台,这使得难以满…

Python 算法基础篇之散列查找算法:哈希表、哈希集合、哈希映射

Python 算法基础篇之散列查找算法:哈希表、哈希集合、哈希映射 引言 1. 散列查找算法概述2. 哈希表的概念3. 哈希集合的概念4. 哈希映射的概念5. 实例演示实例1:哈希表实例2:哈希集合实例3:哈希映射 总结 引言 散列查找算法是一种…

Spring Cloud 之 Gateway 网关

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

Web安全基础

Web安全基础 一、Web应用安全概述1.1、什么是Web应用安全?1.2、WEB应用安全的兴起1.3、常见web应用1.3.1、常见Web应用—前后台 1.4、Web应用安全与传统安全的区别 二、Web应用的基本架构2.1、Web应用的基本架构2.2、Web服务的提供者——Web中间件2.3、简单的Web服务…

javascript实现久久乘法口诀表、document、write、console、log

文章目录 正序乘法口诀表倒序乘法口诀表logconsoledocumentwrite 正序乘法口诀表 function multiplicationTable() {for (let i 1; i < 9; i) {let val ;for (let j 1; j < i; j) {document.write(j * i (i * j) &nbsp );val ${j}*${i}${i * j} ;}consol…

肯尼亚税务局如何利用RPA、AI等创新技术来推动税务合规增加税收?

在当今的数字化时代&#xff0c;税务部门的工作变得日益复杂。依赖手动程序为税务部门带来了巨大的困难&#xff0c;这使得在有效管理税收和实现收入目标上遇到了阻碍。手动流程往往效率低下&#xff0c;易出错&#xff0c;而且难以应对大规模的数据处理需求。如果不能解决该问…

泛在电力物联网、能源互联网与虚拟电厂

导读&#xff1a;从能源互联网推进受阻&#xff0c;到泛在电力物联网名噪一时&#xff0c;到虚拟电厂再次走向火爆&#xff0c;能源领域亟需更进一步的数智化发展。如今&#xff0c;随着新型电力系统建设推进&#xff0c;虚拟电厂有望迎来快速发展。除了国网和南网公司下属的电…

【Redis-01】Redis的五种数据类型

Redis五种数据类型 1.String1.1特点1.2命令1.3实例 2.Hash2.1特点2.2命令2.3实例 3.List3.1特点3.2命令3.3实例 4.Set4.1特点4.2命令4.3实例 5. SortedSet5.1特点5.2命令5.3实例 1.String 1.1特点 String类型&#xff0c;也就是字符串类型&#xff0c;是Redis中最简单的存储类…

harbor仓库故障排除

harbor仓库无法用docker login登录&#xff0c;一直报x509: cannot validate certificate for 172.17.10.29 because it doesn’t contain any IP SANs 1、检查docker和harbor的服务是否启动 [rootk8s-harbor harbor]#systemctl status harbor.service [rootk8s-harbor harbo…

应对突发流量,如何快速为自建 K8s 添加云上弹性能力

作者&#xff1a;庄宇 以 Kubernetes 为代表的容器技术带来的是一种应用交付模式的变革&#xff0c;其正迅速成为全世界数据中心的统一 API。 为了保证业务持续稳定、用户访问不中断&#xff0c;高可用、高弹性等能力是应用架构设计不变的追求&#xff0c;多集群架构天然具备…

控制对文件访问

控制对文件访问 Linux文件权限 权限文件影响目录影响r读取文件内容列出目录内容w更改文件内容创建删除目录文件x作为命令执行目录可以变成当前工作目录 命令行管理文件系统权限 更改文件和目录权限 chmod chmod WhoWhatWhich file|directoryWho (u,g,o,a代表用户&#xff…

抖音seo源码搭建,抖音矩阵系统源码分发,抖音矩阵账号管理系统

前言&#xff1a; 抖音seo源码&#xff0c;抖音矩阵系统源码搭建&#xff0c;抖音矩阵同步分发。抖音seo源码部署是需要对接到这些正规接口再来做开发的&#xff0c;目前账号矩阵程序开发的功能&#xff0c;围绕一键管理多个账号&#xff0c;做到定时投放&#xff0c;关键词自动…

C# 提示:无法加载 DLL“XXX.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。

今天再调试程序时发现程序再笔记本上运行正常&#xff0c;然而拷贝到客户主机上之后出现了&#xff08;System.DllNotFoundException: 无法加载 DLL“msc.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。&#xff09;的问题&#xff0c;经过再三调试&#xff0c; …