成都网站建设套餐h5页面用什么软件
- 作者: 五速梦信息网
- 时间: 2026年03月21日 11:32
当前位置: 首页 > news >正文
成都网站建设套餐,h5页面用什么软件,网络维保,国内新闻最近新闻今天文章目录一、弱分类器的结构1. 分枝标准与特征重要性2. 调节树结构来控制过拟合二、弱分类器的数量三、弱分类器训练的数据1. 样本的随机抽样2. 特征的随机抽样3. 随机抽样的模式四、弱分类器的其他参数在开始学习之前#xff0c;先导入我们需要的库。 import numpy as np im… 文章目录一、弱分类器的结构1. 分枝标准与特征重要性2. 调节树结构来控制过拟合二、弱分类器的数量三、弱分类器训练的数据1. 样本的随机抽样2. 特征的随机抽样3. 随机抽样的模式四、弱分类器的其他参数在开始学习之前先导入我们需要的库。 import numpy as np import pandas as pd import sklearn import matplotlib as mlp import seaborn as sns import re, pip, conda 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当填写参数之后随机森林可以变得更强大。比起经典机器学习算法逻辑回归、岭回归等随机森林回归器的参数数量较多因此我们可以将随机森林类的参数分为如下 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 一、弱分类器的结构 在集成算法当中控制单个弱评估器的结构是一个重要的课题因为单个弱评估器的复杂度/结果都会影响全局其中单棵决策树的结构越复杂集成算法的整体复杂度会更高计算会更加缓慢、模型也会更加容易过拟合因此集成算法中的弱评估器也需要被剪枝。随机森林回归器的弱评估器是回归树因此集成评估器中有大量的参数都与弱评估器回归树中的参数重合 类型参数弱分类器结构criterion弱评估器分枝时的不纯度衡量指标max_depth弱评估器被允许的最大深度默认Nonemin_samples_split弱评估器分枝时父节点上最少要拥有的样本个数min_samples_leaf弱评估器的叶子节点上最少要拥有的样本个数min_weight_fraction_leaf当样本权重被调整时叶子节点上最少要拥有的样本权重max_leaf_nodes弱评估器上最多可以有的叶子节点数量min_impurity_decrease弱评估器分枝时允许的最小不纯度下降量 这些参数在随机森林中的用法与默认值与决策树类 DecisionTreeRegressor 中完全一致专门用于对决策树进行剪枝、控制单个弱评估器的结构考虑到大家在决策树中已经充分掌握这些参数我们不再对这些参数一一进行详细说明了。在这里我们重点复习一下以下两部分参数
分枝标准与特征重要性 criterion 与 featureimportances 与分类树中的信息熵/基尼系数不同回归树中的 criterion 可以选择squared_error平方误差“absolute_error”绝对误差以及poisson泊松偏差。对任意样本 iii 而言yiy_iyi 为真实标签yi^\hat{y_i}yi^ 为预测标签则各个 criterion 的表达式为平方误差∑(yi−yi^)2\sum{(y_i - \hat{y_i})^2}∑(yi−yi^)2。绝对误差∑∣yi−yi^∣\sum{|y_i - \hat{y_i}|}∑∣yi−yi^∣。泊松偏差2∑(yilog(yiyi^)−(yi−yi^))2\sum{(y_ilog(\frac{y_i}{\hat{y_i}})-(y_i - \hat{y_i}))}2∑(yilog(yi^yi)−(yi−yi^))。其中平方误差与绝对误差是大家非常熟悉的概念作为分枝标准平方误差比绝对误差更敏感类似于信息熵比基尼系数更敏感并且在计算上平方误差比绝对误差快很多。泊松偏差则是适用于一个特殊场景的当需要预测的标签全部为正整数时标签的分布可以被认为是类似于泊松分布的。正整数预测在实际应用中非常常见比如预测点击量、预测客户/离职人数、预测销售量等。我们现在正在使用的数据房价预测也可能比较适合于泊松偏差。另外当我们选择不同的 criterion 之后决策树的 featureimportances 也会随之变化因为在 sklearn 当中featureimportances 是特征对 criterion 下降量的总贡献量因此不同的 criterion 可能得到不同的特征重要性。对我们来说选择 criterion 的唯一指标就是最终的交叉验证结果——无论理论是如何说明的我们只取令随机森林的预测结果最好的 criterion。
调节树结构来控制过拟合 max_depth 是最粗犷的剪枝方式从树结构层面来看对随机森林抗过拟合能力影响最大的参数。max_depth 的默认值为 None也就是不限深度。因此当随机森林表现为过拟合时选择一个小的 max_depth 会很有效。max_leaf_nodes 与 min_sample_split 是比 max_depth 更精细的减枝方式但限制叶子数量和分枝既可以实现微调也可以实现大刀阔斧的剪枝。max_leaf_nodes 的默认值为 None即不限叶子数量。min_sample_split 的默认值为 2等同于不限制分枝。min_impurity_decrease 最精细的减枝方式可以根据不纯度下降的程度减掉相应的叶子。默认值为 0因此是个相当有空间的参数。 二、弱分类器的数量 n_estimators 是森林中树木的数量即弱评估器的数量在 sklearn 中默认 100它是唯一一个对随机森林而言必填的参数。n_estimators 对随机森林模型的精确程度、复杂度、学习能力、过拟合情况、需要的计算量和计算时间都有很大的影响因此 n_estimators 往往是我们在调整随机森林时第一个需要确认的参数。对单一决策树而言模型复杂度由树结构树深、树宽、树上的叶子数量等与数据量样本量、特征量决定而对随机森林而言模型复杂度由森林中树的数量、树结构与数据量决定其中树的数量越多模型越复杂。当模型复杂度上升时模型的泛化能力会先增加再下降相对的泛化误差会先下降再上升我们需要找到模型泛化能力最佳的复杂度。在实际进行训练时最佳复杂度往往是一个比较明显的转折点当复杂度高于最佳复杂度时模型的泛化误差要么开始上升要么不再下降。 对随机森林而言该图像的横坐标可以被无缝切换为参数 n_estimators 上的值。当 n_estimators 越大时1 模型的复杂程度上升泛化能先增强再减弱或不变。2 模型的学习能力越来越强在训练集上的分数可能越来越高过拟合风险越来越高。3 模型需要的算力和内存越来越多。4 模型训练的时间会越来越长。因此在调整 n_estimators 时我们总是渴望在模型效果与训练难度之间取得平衡同时我们还需要使用交叉验证来随时关注模型过拟合的情况。在 sklearn 现在的版本中n_estimators 的默认值为 10。 def RMSE(cvresult,key):return (abs(cvresult[key])**0.5).mean()reg_f RFR(n_estimators3) cv KFold(n_splits5,shuffleTrue,random_state1412) result_f cross_validate(reg_f,X,y,cvcv,scoringneg_mean_squared_error,return_train_scoreTrue,verboseTrue,n_jobs-1) #[Parallel(n_jobs-1)]: Using backend LokyBackend with 16 concurrent workers. #[Parallel(n_jobs-1)]: Done 5 out of 5 | elapsed: 0.8s finishedRMSE(result_f,test_score) #36398.0444570051reg_f RFR(n_estimators100) cv KFold(n_splits5,shuffleTrue,random_state1412) result_f cross_validate(reg_f,X,y,cvcv,scoringneg_mean_squared_error,return_train_scoreTrue,verboseTrue,n_jobs-1) #[Parallel(n_jobs-1)]: Using backend LokyBackend with 16 concurrent workers. #[Parallel(n_jobs-1)]: Done 5 out of 5 | elapsed: 1.9s finishedRMSE(result_f,test_score) #30156.835268943938reg_f RFR(n_estimators500) cv KFold(n_splits5,shuffleTrue,random_state1412) result_f cross_validate(reg_f,X,y,cvcv,scoringneg_mean_squared_error,return_train_scoreTrue,verboseTrue,n_jobs-1) #[Parallel(n_jobs-1)]: Using backend LokyBackend with 16 concurrent workers. #[Parallel(n_jobs-1)]: Done 5 out of 5 | elapsed: 7.1s finishedRMSE(result_f,test_score) #30305.720408696703对上述总结 类型参数弱分类器数量n_estimators弱评估器的数量 三、弱分类器训练的数据 对每个特征决策树都会找到不纯度下降程度最大的节点进行分枝因此原则上来说只要给出数据一致、并且不对决策树进行减枝的话决策树的结构一定是完全相同的。对集成算法来说平均多棵相同的决策树的结果并没有意义因此集成算法中每棵树必然是不同的树Bagging 算法是依赖于随机抽样数据来实现这一点的。随机森林会从提供的数据中随机抽样出不同的子集用于建立多棵不同的决策树最终再按照 Bagging 的规则对众多决策树的结果进行集成。因此在随机森林回归器的参数当中有数个关于数据随机抽样的参数。
样本的随机抽样 bootstrap 参数的输入为布尔值默认 True控制是否在每次建立决策树之前对数据进行随机抽样。如果设置为 False则表示每次都使用全部样本进行建树如果为 True则随机抽样建树。从语言的意义上来看bootstrap 可以指代任意类型的随机抽样但在随机森林中它特指有放回随机抽样技术。如下图所示在一个含有 m 个样本的原始训练集中我们进行随机采样。每次采样一个样本并在抽取下一个样本之前将该样本放回原始训练集也就是说下次采样时这个样本依然可能被采集到这样采集 max_samples 次最终得到 max_samples 个样本组成的自助集。 通常来说max_samples 是等于 m 的行业惯例也就是抽样数据集的大小与原始数据集一致但是如果原始数据集太大、或者太小我们也可以自由调整 max_samples 的大小。由于是随机采样这样每次的自助集和原始数据集不同和其他的采样集也是不同的。这样我们就可以自由创造取之不尽用之不竭并且互不相同的自助集用这些自助集来训练我们的弱分类器我们的弱分类器自然也就各不相同了。然而有放回抽样也会有自己的问题。由于是有放回一些样本可能在同一个自助集中出现多次而其他一些却可能被忽略。当抽样次数足够多、且原始数据集足够大时自助集大约平均会包含全数据的 63%这个数字是有数学依据的。因为在 max_samples 次抽样中一个样本被抽到某个自助集中的概率为1−(1−1m)max_samples1-(1-\frac{1}{m})^{max_samples}1−(1−m1)max_samples这个式子是怎么来的呢对于任意一个样本而言一次抽样时抽到该样本的概率为 1m\frac{1}{m}m1。一次抽样时抽不到该样本的概率为 1−1m1-\frac{1}{m}1−m1。总共抽样 max_samples 次一次也没有抽到该样本的概率就是 (1−1m)max_samples(1-\frac{1}{m})^{max_samples}(1−m1)max_samples。因此 1 减去该概率就是一个样本在抽样中一定会被抽到某个自助集的概率。当 m 刚好等于 max_samples 时公式可以被修改为1−(1−1m)m1-(1-\frac{1}{m})^{m}1−(1−m1)m这明显是一个经典的极限问题由洛必达法则L’Hôpital’s rule我们可知当 m 足够大时接近极限时这个概率收敛于 1-(1/e)其中 e 是自然常数整体概率约等于 0.632。因此会有约 37% 的训练数据被浪费掉没有参与建模这些数据被称为袋外数据out of bag data简写为oob。在实际使用随机森林时袋外数据常常被我们当做验证集使用所以我们或许可以不做交叉验证、不分割数据集而只依赖于袋外数据来测试我们的模型即可。当然这也不是绝对的当树的数量 n_estimators 不足或者 max_samples 太小时很可能就没有数据掉落在袋外自然也有无法使用 oob 数据来作为验证集了。在随机森林回归器中当 boostrapTrue 时我们可以使用参数 oob_score 和 max_samples其中oob_score 控制是否使用袋外数据进行验证输入为布尔值默认为 False如果希望使用袋外数据进行验证修改为 True 即可。max_samples 表示自助集的大小可以输入整数、浮点数或 None默认为 None。当我们输入整数 m则代表每次从全数据集中有放回抽样 m 个样本。当我们输入浮点数 f则表示每次从全数据集中有放回抽样 f * 全数据量个样本。当我们输入 None则表示每次抽样都抽取与全数据集一致的样本量X.shape[0]。在使用袋外数据时我们可以用随机森林的另一个重要属性oobscore 来查看我们的在袋外数据上测试的结果遗憾的是我们无法调整 oobscore 输出的评估指标它默认是 R2。 reg RFR(n_estimators20, bootstrapTrue #进行随机抽样, oob_scoreTrue #按袋外数据进行验证, max_samples500).fit(X,y) #D:\ProgramData\Anaconda3\lib\site-packages\sklearn\base.py:445: UserWarning: X does not have #valid feature names, #but RandomForestRegressor was fitted with feature names
warnings.warn(#重要属性oobscore
reg.oobscore #在袋外数据上的R2为83%
#0.8254774869029703reg RFR(n_estimators20, bootstrapFalse, oob_scoreTrue, max_samples500).fit(X,y) #直接无法运行因为boostrapFalse时oob_score分数根本不存在
reg RFR(n_estimators20, bootstrapTrue #允许抽样, oob_scoreFalse #但不进行计算, max_samples500).fit(X,y) reg.oobscore #虽然可以训练但oob_score无法被调用2. 特征的随机抽样 max_features 数据抽样还有另一个维度对特征的抽样。在学习决策树时我们已经学习过对特征进行抽样的参数 max_features在随机森林中 max_features 的用法与决策树中完全一致其输入也与决策树完全一致1 当我们输入整数表示每次分枝时随机抽取 max_features 个特征。2 当我们输入浮点数表示每次分枝时抽取 round(max_features * n_features) 个特征。3 当我们输入 auto 或者 None表示每次分枝时使用全部特征 n_features。4 当我们输入 sqrt表示每次分枝时使用 sqrt(n_features)。5当我们输入 log2表示每次分枝时使用 log2(nfeatures)。 sqrt [] log_ [] for nfeatures in range(1,101,2):sqrt.append(np.sqrt(nfeatures))log.append(np.log2(nfeatures))
xaxis range(1,101,2) plt.figure(figsize(8,6),dpi80) #RMSE plt.plot(xaxis,sqrt,colorgreen,label sqrt(n)) plt.plot(xaxis,log_,colororange,label log2(n)) plt.xticks(range(1,101,10)) plt.legend() plt.show()不难发现sqrt(n_features) 和 log2(n_features) 都会返回一个比原始特征量小很多的数但一般情况下 log2 返回的值比 sqrt 返回的值更小因此如果我们想要树之间的差异更大我们可以设置模式为 log2。在实际使用时我们往往会先使用上述的文字输入观察模型的结果然后再在有效的范围附近进行网格搜索。需要注意的是无论对数据进行怎样的抽样我们能够控制的都只是建立单棵树时的数据而已。在总数据量有限的情况下单棵树使用的数据量越大每一棵树使用的数据就会越相似每棵树的结构也就会越相似bagging 的效果难以发挥、模型也很容易变得过拟合。因此当数据量足够时我们往往会消减单棵树使用的数据量。随机抽样的模式 随机抽样的模式函数是random_state。随机模式的相关说明random_state 是一个较为抽象的参数对于刚接触 sklearn 运作方式的人们来说random_state 可能会比较难以理解。在日常生活中当我们讨论随机时我们指的是真正的随机包括如下三个方面1 不可预测。2 不可有目的地重复。3 实验之间完全相互独立。就比如游戏当中抽卡比如抛硬币我们无法预料会抛出正面还是反面、并且抛出一次正面自后、无法有目的地再次抛出正面无论上一次是正面还是反面都不影响下一次抛硬币的时候的结果。真正的随机一定伴随着物理实验是只有自然界才有的现象。在计算机的世界中任意的随机一定是通过某种计算方式得到和实现的这种随机是伪随机。无论是随机抽样还是随机打乱数据顺序等等其实背后都有着计算机的规则在进行控制只要我们找到背后的规则我们就可以有目的地重复随机的结果而 randomstate 就是在随机过程当中控制随机规则的参数。例如现在我们需要在 [1,2,3,4,5] 中随机抽取 3 个数字我们可以有多种规则0 号规则4,5,1。1 号规则2,1,5。2 号规则1,5,4。3 号规则2,5,4。… list [1,2,3,4,5] import random random.sample(list_,k3) #随机从列表中抽取样本抽取3个根据排列组合的规则总共有 A53A_5^3A5360 种选择。每当我们执行抽样的代码时计算机会在所有规则中选择一个返回给我们。当我们多次执行抽样代码计算机会返回不同的结果营造一种随机的氛围但并非真正的在列表中进行了不可预测、不可重复的抽样。- 只要我们设置随机数种子我们就可以重复抽样的结果令本来应该随机的过程变成固定过程。 #random.seed是random模块中的随机数种子等同于sklearn中的randomstate random.seed(0) #0号规则 random.sample(list,k3) random.seed(2) random.sample(list,k3)即便只有 60 种选择我们的随机数种子也可以设置为任意的数字。当然无论我们设置怎样的数字最终计算机都会从这 60 中选择中挑选一个返回给我们这也是计算机的规则决定的。无论我们输入了什么数字只要我们认为当下随机操作返回的结果是可以接受的就可以持续使用我们设置的数字。 random.seed(1412) random.sample(list,k3) random.seed(2333) random.sample(list_,k3)在决策树当中我们已经学习过控制随机模式的参数 random_state这个参数是随机数种子它控制决策树当中多个具有随机性的流程。在 sklearn 实现的随机森林当中决策树上也存在众多有随机性的流程1「强制」随机抽取每棵树建立时分枝用的特征抽取的数量可由参数 max_features 决定。2「强制」随机排序每棵树分枝时所用的特征。3「可选」随机抽取每棵树建立时训练用的样本抽取的比例可由参数 maxsamples 决定。因此每次使用随机森林类时我们建立的集成算法都是不同的在同一个数据集上多次建树自然也会产生不同的模型结果。因此在工程部署和教学当中我们在建树的第一步总是会先设置随机数种子为一个固定值让算法固定下来。在设置的时候需要注意两个问题第一不同库中的随机数种子遵循不同的规则对不同库中的随机数种子给与相同的数字也不会得到相同的结果。 import pandas as pd import random list [1,2,3,4,5] listp pd.Series(list) listp #0 1 #1 2 #2 3 #3 4 #4 5 #dtype: int64#random中的随机抽样 random.seed(1) random.sample(list,k3) #[2, 1, 5]#pandas中的随机抽样 list_p.sample(n3,random_state1).values #array([3, 2, 5], dtypeint64)同样的sklearn 中的随机抽样、numpy 中的随机抽样、cuda 中的随机抽样在相同的随机数种子数值下都会得到不同的结果。第二如何选择最佳随机数种子当数据样本量足够大的时候数万变换随机数种子几乎不会对模型的泛化能力有影响因此在数据量巨大的情况下我们可以随意设置任意的数值。当数据量较小的时候我们可以把随机数种子当做参数进行调整但前提是必须依赖于交叉验证的结果。选择交叉验证结果中均值最高、方差最低的随机数种子以找到泛化能力最强大的随机模式。 类型参数弱分类器的训练数据bootstrap是否对样本进行随机抽样oob_score如果使用随机抽样是否使用袋外数据作为验证集max_samples如果使用随机抽样每次随机抽样的样本量max_features随机抽取特征的数目random_state控制一切随机模式 四、弱分类器的其他参数 类型参数其他n_jobs允许调用的线程数verbose打印建树过程ccp_alpha结构风险$ 我们已经了解过前三个参数需要稍微说明一下 verbose 参数。随机森林的 verbose 参数打印的是建树过程但只有在树的数量众多、建模耗时很长时verbose 才会打印建树的具体过程否则它只会打印出一行两简单的报告。这些参数中需要重点说明的是 warm_start。warm_start 是控制增量学习的参数默认为 False该参数可以帮助随机森林处理巨量数据解决围绕随机森林的众多关键问题。
相关文章
-
成都网站建设索q479185700天津建设监理协会网站
成都网站建设索q479185700天津建设监理协会网站
- 技术栈
- 2026年03月21日
-
成都网站建设上市做网站怎么把字弄图片上去
成都网站建设上市做网站怎么把字弄图片上去
- 技术栈
- 2026年03月21日
-
成都网站建设商家潍坊云建站模板
成都网站建设商家潍坊云建站模板
- 技术栈
- 2026年03月21日
-
成都网站建设推广在线咨询在哪注册域名
成都网站建设推广在线咨询在哪注册域名
- 技术栈
- 2026年03月21日
-
成都网站建设推来客网站系统报价中卫市设计院
成都网站建设推来客网站系统报价中卫市设计院
- 技术栈
- 2026年03月21日
-
成都网站建设外贸做公众号app网站app吗
成都网站建设外贸做公众号app网站app吗
- 技术栈
- 2026年03月21日






