当前位置: 首页 > news >正文

网页网站关系新化网站建设

网页网站关系,新化网站建设,wordpress搭建ctf,wordpress字体大小插件sklearn机器学习库(二)sklearn中的随机森林 集成算法会考虑多个评估器的建模结果#xff0c;汇总之后得到一个综合的结果#xff0c;以此来获取比单个模型更好的回归或分类表现。 多个模型集成成为的模型叫做集成评估器#xff08;ensemble estimator#xff09;#xf…sklearn机器学习库(二)sklearn中的随机森林 集成算法会考虑多个评估器的建模结果汇总之后得到一个综合的结果以此来获取比单个模型更好的回归或分类表现。 多个模型集成成为的模型叫做集成评估器ensemble estimator组成集成评估器的每个模型都叫做基评估器base estimator。通常来说有三类集成算法装袋法Bagging提升法Boosting和stacking。 装袋法Bagging的核心思想是构建多个相互独立的评估器然后对其预测进行平均或多数表决原则来决定集成评估器的结果。装袋法的代表模型就是随机森林。 提升法Boosting中基评估器是相关的是按顺序一一构建的。其核心思想是结合弱评估器的力量一次次对难以评估的样本 进行预测从而构成一个强评估器。提升法的代表模型有Adaboost和梯度提升树(GBDT)。 sklearn中的集成算法模块ensemble 类类的功能ensemble.AdaBoostClassifierAdaBoost分类ensemble.AdaBoostRegressorAdaboost回归ensemble.BaggingClassifier装袋分类器ensemble.BaggingRegressor装袋回归器ensemble.ExtraTreesClassifierExtra-trees分类超树极端随机树ensemble.ExtraTreesRegressorExtra-trees回归ensemble.GradientBoostingClassifier梯度提升分类ensemble.GradientBoostingRegressor梯度提升回归ensemble.IsolationForest隔离森林ensemble.RandomForestClassifier随机森林分类ensemble.RandomForestRegressor随机森林回归ensemble.RandomTreesEmbedding完全随机树的集成ensemble.VotingClassifier用于不合适估算器的软投票/多数规则分类器 集成算法中有一半以上都是树的集成模型。 决策树的核心问题有两个一个是如何找出正确的特征来进行分枝二是树生长到什么时候应该停下。 对于第一个问题我们定义了用来衡量分枝质量的指标不纯度分类树的不纯度用基尼系数或信息熵来衡量回归 树的不纯度用MSE均方误差来衡量。每次分枝时决策树对所有的特征进行不纯度计算选取不纯度最低的特征进 行分枝分枝后又再对被分枝的不同取值下计算每个特征的不纯度继续选取不纯度最低的特征进行分枝。决策树非常容易过拟合为了防止决策树的过拟合我们要对决策树进行剪枝sklearn中提供了大量的剪枝参数 。 1 RandomForestClassifier 随机森林是非常具有代表性的Bagging集成算法它的所有基评估器都是决策树分类树组成的森林就叫做随机森林分类器回归树所集成的森林就叫做随机森林回归器。 sklearn.ensemble.RandomForestClassifier(n_estimators100, *, criteriongini, max_depthNone, min_samples_split2, min_samples_leaf1, min_weight_fraction_leaf0.0, max_featuressqrt, max_leaf_nodesNone, min_impurity_decrease0.0, bootstrapTrue, oob_scoreFalse, n_jobsNone, random_stateNone, verbose0, warm_startFalse, class_weightNone, ccp_alpha0.0, max_samplesNone )1.1 重要参数 1.1.1 基评估器的控制参数 参数含义criterion不纯度的衡量指标{“gini”, “entropy”, “log_loss”},默认是”gini”max_depth树的最大深度超过最大深度的树枝都会被剪掉min_samples_leaf一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本否则分枝就不会发生min_samples_split一个节点必须要包含至少min_samples_split个训练样本这个节点才允许被分枝否则分枝就不会发生max_featuresmax_features限制分枝时考虑的特征个数超过限制个数的特征都会被舍弃 默认值为总特征个数开平方取整(sqrt)可选值有**{“sqrt”, “log2”, None}**min_impurity_decrease信息增益小于设定数值的分枝不会发生 详细解释可参考官网。https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier 1.1.2 n_estimators 这是森林中树木的数量即基评估器的数量。这个参数对随机森林模型的精确性影响是单调的n_estimators越大模型的效果往往越好。 但是相应的任何模型都有决策边界n_estimators达到一定的程度之后随机森林的精确性往往不在上升或开始波动并且n_estimators越大需要的计算量和内存也越大训练的时间也会越来越长。对于这个参数我们是渴望在训练难度和模型效果之间取得平衡。 n_estimators的默认值在0.22版本中默认值从10改为100这个修正显示出了使用者的调参倾向要更大的n_estimators。 from matplotlib import pyplot as plt from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import load_wine from sklearn.model_selection import train_test_split,cross_val_score %matplotlib inline# 导入红酒数据集 wine load_wine()Xtrain, Xtest, Ytrain, Ytest train_test_split(wine.data,wine.target,test_size0.3)# 训练模型 clf DecisionTreeClassifier(random_state0) rfc RandomForestClassifier(random_state0)clf clf.fit(Xtrain, Ytrain) rfc rfc.fit(Xtrain, Ytrain)tree_score clf.score(Xtest,Ytest) forest_score rfc.score(Xtest,Ytest)print(单棵树:{}.format(tree_score),随机森林:{}.format(forest_score))单棵树:0.9444444444444444 随机森林:1.0# 交叉验证 rfc RandomForestClassifier(n_estimators25) rfc_s cross_val_score(rfc,wine.data,wine.target,cv10)clf DecisionTreeClassifier() clf_s cross_val_score(clf,wine.data,wine.target,cv10)plt.plot(range(1,11),rfc_s,label RandomForest) plt.plot(range(1,11),clf_s,label Decision Tree) plt.legend() plt.show()# n_estimators的学习曲线 forest_scores []for i in range(100):rfc RandomForestClassifier(n_estimatorsi1)s cross_val_score(rfc,wine.data,wine.target,cv10).mean()forest_scores.append(s)# 打印最大值及最大值的索引 print(max(forest_scores),forest_scores.index(max(forest_scores))) plt.figure(figsize(10,8)) plt.plot(range(1,101),forest_scores) plt.legend() plt.show()1.1.3 random_state 随机森林的本质是一种装袋集成算法bagging装袋集成算法是对基评估器的预测结果进行平均或用多数表决原则来决定集成评估器的结果。 在刚才的红酒例子中我们建立了25棵树对任何一个样本而言平均或多数表决原则下当且仅当有13棵以上的树判断错误的时候随机森林才会判断错误。单独一棵决策树对红酒数据集的分类准确率在0.85上下浮动假设一棵树判断错误的可能性为0.2(ε)那20棵树以上都判断错误的可能性是0.000369。判断错误的几率非常小这让随机森林在红酒数据集上的表现远远好于单棵决策树。 随机森林中其实也有random_state用法和分类树中相似。 只不过在分类树中一个random_state只控制生成一棵树而随机森林中的random_state控制的是生成森林的模式而非让一个森林中只有一棵树 rfc RandomForestClassifier(n_estimators20,random_state2) rfc rfc.fit(Xtrain, Ytrain)#随机森林的重要属性之一estimators查看森林中树的状况 for i in range(len(rfc.estimators_)):print(rfc.estimators_[i].random_state)1872583848 794921487 111352301 1853453896 213298710 1922988331 ......当random_state固定时随机森林中生成是一组固定的树但每棵树依然是不一致的这是用随机挑选特征进行分枝的方法得到的随机性。并且我们可以证明当这种随机性越大的时候袋装法的效果一般会越来越好。用袋装法集成时基分类器应当是相互独立的是不相同的。 但这种做法的局限性是很强的当我们需要成千上万棵树的时候数据不一定能够提供成千上万的特征来让我们构筑尽量多尽量不同的树。因此除了random_state。我们还需要其他的随机性。 1.1.4 bootstrap oob_score 要让基分类器尽量都不一样另一种很容易理解的方法是使用不同的训练集来进行训练而袋装法正是通过有放回的随机抽样技术来形成不同的训练数据bootstrap就是用来控制抽样技术的参数。 在一个含有n个样本的原始训练集中我们进行随机采样每次采样一个样本并在抽取下一个样本之前将该样本放回原始训练集也就是说下次采样时这个样本依然可能被采集到由于是随机采样这样每次的自助集和原始数据集不同和其他的采样集也是不同的。用这些自助集来训练我们的基分类器我们的基分类器自然也就各不相同了。 bootstrap参数默认True代表采用这种有放回的随机抽样技术。 一般来说自助集大约平均会包含63%的原始数据 。因此会有约37%的训练数据被浪费掉没有参与建模这些数据被称为袋外数据(out of bag data简写为oob) 1 − ( 1 − 1 / n ) n 当 n 足够大时这个概率收敛于 1 − ( 1 / e ) 约等于 0.632 。 1-(1-1/n)^n \\ 当n足够大时这个概率收敛于1-(1/e)约等于0.632。 1−(1−1/n)n当n足够大时这个概率收敛于1−(1/e)约等于0.632。 在使用随机森林时我们可以不划分测试集和训练集只需要用袋外数据来测试我们的模型即可。 当然这也不是绝对的当n和n_estimators都不够大的时候很可能就没有数据掉落在袋外自然也就无法使用oob数据来测试模型了。如果希望用袋外数据来测试则需要在实例化时就将oob_score这个参数调整为True训练完毕之后可以用oob_score_来查看在袋外数据上测试的结果 # 无需划分训练集和测试集 rfc RandomForestClassifier(n_estimators25,oob_scoreTrue) rfc rfc.fit(wine.data, wine.target)# 重要属性oob_score_ print(rfc.oob_score_) 1.2 重要接口 随机森林的接口与决策树完全一致因此依然有四个常用接口apply, fit, predict和score。 除此之外还需要注意随机森林的predict_proba接口这个接口返回每个测试样本对应的被分到每一类标签的概率标签有几个分类就返回几个概率。如果是二分类问题则predict_proba返回的数值大于0.5的被分为1小于0.5的被分为0。 传统的随机森林是利用袋装法中的规则平均或少数服从多数来决定集成的结果而sklearn中的随机森林是平均每个样本对应的predict_proba返回的概率得到一个平均概率从而决定测试样本的分类 注意 当基分类器的误差率小于0.5即准确率大于0.5时集成的效果是比基分类器要好的。 相反当基分类器的误差率大于0.5袋装的集成算法就失效了。 所以在使用随机森林之前一定要检查用来组成随机森林的分类树们是否都有至少50%的预测正确率。 2 RandomForestRegressor DecisionTreeRegressor(*,criterionsquared_error, splitterbest, max_depthNone, min_samples_split2, min_samples_leaf1, min_weight_fraction_leaf0.0, max_featuresNone, random_stateNone, max_leaf_nodesNone, min_impurity_decrease0.0, ccp_alpha0.0 )所有的参数属性与接口全部和随机森林分类器一致。仅有的不同就是回归树与分类树的不同不纯度的指标 参数Criterion不一致。 2.1 Criterion Criterion是衡量回归树分枝质量的指标 : 均方误差的squared_error父节点和叶子节点之间的均方误差的差额将被用来作为特征选择的标准这种方法通过使用叶子节点的均值来最小化L2损失 friedman_mse这种指标使用弗里德曼针对潜在分枝中的问题改进后的均方误差 平均绝对误差absolute_error这种指标使用叶节点的中值来最小化L1损失 以及poisson它使用泊松偏差的减少来寻找分裂 虽然均方误差永远为正但是sklearn当中使用均方误差作为评判标准时却是计算负均方误差。 这是因为sklearn在计算模型评估指标的时候会考虑指标本身的性质均方误差本身是一种误差所以被sklearn划分为模型的一种损失(loss)因此在sklearn当中都以负数表示。真正的均方误差MSE的数值其实就是neg_mean_squared_error去掉负号的数字 。 # 读取波士顿数据集注意新版本的sklearn中自带的已经删除 data pd.read_csv(boston_housing.data, sep\s, headerNone)x data.iloc[:, :-1] y data.iloc[:, -1]regressor RandomForestRegressor(n_estimators100,random_state0) cross_val_score(regressor, x, y, cv10,scoring neg_mean_squared_error)返回十次交叉验证的结果注意在这里如果不填写scoring “neg_mean_squared_error”交叉验证默认的模型衡量指标是R平方因此交叉验证的结果可能有正也可能有负。 而如果写上scoring则衡量标准是负MSE交叉验证的结果只可能为负。 2.2 使用随机森林填补缺失值 我们从现实中收集的数据往往都会有一些缺失值。面对缺失值很多人选择的方式是直接将含有缺失值的样本删除这是一种有效的方法。 有时候填补缺失值会比直接丢弃样本效果更好。在sklearn中我们用sklearn.impute.SimpleImputer来轻松地将均值中值或者其他最常用的数值填补到数据中。 在这个案例中我们将使用均值0和随机森林回归来填补缺失值并验证四种状况下的拟合状况找出对使用的数据集来说最佳的缺失值填补方法。 import numpy as np import pandas as pd from sklearn.impute import SimpleImputer import matplotlib.pyplot as plt from sklearn.impute import SimpleImputer from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import cross_val_score# 读取波士顿数据集注意新版本的sklearn中自带的已经删除 data pd.read_csv(boston_housing.data, sep\s, headerNone)x data.iloc[:, :-1] y data.iloc[:, -1]print(x.shape) x.info() # 均非空# 人为填充缺失值 #所有数据要随机遍布在数据集的各行各列当中而一个缺失的数据会需要一个行索引和一个列索引 #如果能够创造一个数组包含3289个分布在0~506中间的行索引和3289个分布在0~13之间的列索引那我们就可以利用索引来为数据中的任意3289个位置赋空值n_samples x.shape[0] n_features x.shape[1]rng np.random.RandomState(0) miss_rate 0.5 # 缺失50%即3289数据n_missing_samples int(np.floor(n_samples * n_features * miss_rate))missing_features rng.randint(0,n_features,n_missing_samples) missing_samples rng.randint(0,n_samples,n_missing_samples) X_missing x.copy().to_numpy() y_missing y.copy() X_missing[missing_samples,missing_features] np.nan X_missing pd.DataFrame(X_missing)X_missing.head(10)# 使用0和均值填补缺失值# 1、使用均值进行填充 s_mean SimpleImputer(missing_valuesnp.nan, strategymean)x_miss_mean s_mean.fit_transform(X_missing)# 2、使用常数0进行填充 zero_mean SimpleImputer(missing_valuesnp.nan, strategyconstant,fill_value0)x_miss_zero zero_mean.fit_transform(X_missing)# 3、使用随机森林填充缺失值特征T不缺失的值对应的其他n-1个特征 本来的标签X_train 特征T不缺失的值Y_train特征T缺失的值对应的其他n-1个特征 本来的标签X_test 特征T缺失的值未知我们需要预测的Y_test这种做法对于某一个特征大量缺失其他特征却很完整的情况非常适用那如果数据中除了特征T之外其他特征也有缺失值怎么办 答案是遍历所有的特征从缺失最少的开始进行填补因为填补缺失最少的特征所需要的准确信息最少。 填补一个特征时先将其他特征的缺失值用0代替每完成一次回归预测就将预测值放到原本的特征矩阵中 再继续填补下一个特征。每一次填补完毕有缺失值的特征会减少一个所以每次循环后需要用0来填补的特征就越来越少 X_missing_reg X_missing.copy() sortindex np.argsort(X_missing_reg.isnull().sum(axis0))for i in sortindex:#构建我们的新特征矩阵和新标签df X_missing_regfillc df.iloc[:,i]df pd.concat([df.iloc[:,df.columns ! i],y],axis1)#在新特征矩阵中对含有缺失值的列进行0的填补df_0 SimpleImputer(missing_valuesnp.nan,strategyconstant,fill_value0).fit_transform(df)#找出我们的训练集和测试集Ytrain fillc[fillc.notnull()]Ytest fillc[fillc.isnull()]Xtrain df_0[Ytrain.index,:]Xtest df_0[Ytest.index,:]#用随机森林回归来填补缺失值rfc RandomForestRegressor(n_estimators100)rfc rfc.fit(Xtrain, Ytrain)Ypredict rfc.predict(Xtest)#将填补好的特征返回到我们的原始的特征矩阵中X_missing_reg.loc[X_missing_reg.iloc[:,i].isnull(),i] Ypredict# 对填补好的数据进行建模 X [x,x_miss_mean,x_miss_zero,X_missing_reg]mse [] std [] for x in X:estimator RandomForestRegressor(random_state0, n_estimators100)scores cross_val_score(estimator,x,y,scoringneg_mean_squared_error,cv5).mean()mse.append(scores * -1)# 画图 x_labels [Full data,Zero Imputation,Mean Imputation,Regressor Imputation] colors [r, g, b, orange]plt.figure(figsize(12, 6))ax plt.subplot(111) for i in np.arange(len(mse)):ax.barh(i, mse[i],colorcolors[i], alpha0.6, aligncenter)ax.set_title(Imputation Techniques with Boston Data) ax.set_xlim(leftnp.min(mse) * 0.9,rightnp.max(mse) * 1.1) ax.set_yticks(np.arange(len(mse))) ax.set_xlabel(MSE) ax.set_yticklabels(x_labels) plt.show()3 泛化误差详解 模型调参第一步是要找准目标我们要做什么 一般来说这个目标是提升某个模型评估指标比如对于随机森林来说我们想要提升的是模型在未知数据上的准确率由score或oob_score_来衡量。 找准了这个目标我们就需要思考模型在未知数据上的准确率受什么因素影响 在机器学习中我们用来衡量模型在未知数据上的准确率的指标叫做泛化误差Genelization error 3.1 泛化误差与模型结构的关系 当模型在未知数据测试集或者袋外数据上表现糟糕时我们说模型的泛化程度不够泛化误差大模型的效果 不好。泛化误差受到模型的结构复杂度影响。 如下图 当模型太复杂模型就会过拟合泛化能力就不够所以泛化误差大。 当模型太简单模型就会欠拟合拟合能力就不够所以误差也会大。 只有当模型的复杂度刚刚好的才能够达到泛化误差最小的目标 模型的复杂度与参数的关系 对树模型来说树越茂盛深度越深枝叶越多模型就越复杂。 所以树模型是天生位于图的右上角的模型随机森林是以树模型为基础所以随机森林也是天生复杂度高的模型。随机森林的参数都是向着一个目标去减少模型的复杂度把模型往图像的左边移动防止过拟合。 当然了调参没有绝对也有天生处于图像左边的随机森林所以调参之前我们要先判断模型现在究竟处于图像的哪一边。 3.2 随机森林与泛化误差 我们现在已经知道 1模型太复杂或者太简单都会让泛化误差高我们追求的是位于中间的平衡点 2模型太复杂就会过拟合模型太简单就会欠拟合 3对树模型和树的集成模型来说树的深度越深枝叶越多模型越复杂 4树模型和树的集成模型的目标都是减少模型复杂度把模型往图像的左边移动 随机森林的调参方向降低模型的复杂度 我们就可以将那些对复杂度影响巨大的参数挑选出来研究他们的单调性然后专注调整那些能最大限度让复杂度降低的参数。 当复杂度已经不能再降低的时候我们就不必再调整了。 参数对模型在未知数据上的评估性能的影响影响程度n_estimators提升至平稳n_estimators↑不影响单个模型的复杂度⭐⭐⭐⭐max_depth有增有减默认最大深度即最高复杂度向复杂度降低的方向调参 max_depth↓模型更简单且向图像的左边移动⭐⭐⭐min_samples _leaf有增有减默认最小限制1即最高复杂度向复杂度降低的方向调参 min_samples_leaf↑模型更简单且向图像的左边移动⭐⭐min_samples _split有增有减默认最小限制2即最高复杂度向复杂度降低的方向调参 min_samples_split↑模型更简单且向图像的左边移动⭐⭐max_features有增有减默认auto是特征总数的开平方位于中间复杂度既可以 向复杂度升高的方向也可以向复杂度降低的方向调参 max_features↓模型更简单图像左移 max_features↑模型更复杂图像右移 max_features是唯一的既能够让模型更简单也能够让模型更复杂的参 数所以在调整这个参数的时候需要考虑我们调参的方向⭐criterion有增有减一般使用gini 3.3 方差与偏差 集成模型在未知数据集上的泛化误差E由方差(var)偏差(bais)和噪声(ε)共同决定。 偏差模型的预测值与真实值之间的差异模型越精确偏差越低。 方差反映的是模型每一次输出结果与模型预测值的平均水平之间的误差模型越稳定方差越低。 其中偏差衡量模型是否预测得准确偏差越小模型越“准”而方差衡量模型每次预测的结果是否接近即是说方 差越小模型越“稳” 。 偏差大偏差小方差大模型不适合这个数据过拟合 模型很复杂 对某些数据集预测很准确 对某些数据集预测很糟糕方差小欠拟合、模型相对简单 预测很稳定 但对所有的数据预测都不太准确泛化误差小我们的目标 泛化误差和方差及偏差的关系 模型复杂度大的时候方差高偏差低。 偏差低就是要求模型要预测得“准”。模型就会更努力去学习更多信息会具体于训练数据这会导致模型在一部分数据上表现很好在另一部分数据上表现却很糟糕。模型泛化性差在不同数据上表现不稳定所以方差就大。而要尽量学习训练集模型的建立必然更多细节复杂程度必然上升。所以复杂度高方差高总泛化误差高。 相对的复杂度低的时候方差低偏差高。 方差低要求模型预测得“稳”泛化性更强那对于模型来说它就不需要对数据进行一个太深的学习只需要建立一个比较简单判定比较宽泛的模型就可以了。结果就是模型无法在某一类或者某一组数据上达成很高的准确度所以偏差就会大。所以复杂度低偏差高总泛化误差高。 随机森林中的方差与偏差 随机森林的基评估器都拥有较低的偏差和较高的方差因为决策树本身是预测比较”准“比较容易过拟合的模型装袋法本身也要求基分类器的准确率必须要有50%以上。 所以以随机森林为代表的装袋法的训练过程旨在降低方差即降低模型复杂度所以随机森林参数的默认设定都是假设模型本身在泛化误差最低点的右边。 4 随机森林在乳腺癌数据集上的调参 from sklearn.datasets import load_breast_cancer from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import GridSearchCV from sklearn.model_selection import cross_val_score import matplotlib.pyplot as plt import pandas as pd import numpy as npdata load_breast_cancer()# 乳腺癌数据集有569条记录30个特征单看维度虽然不算太高但是样本量非常少。过拟合的情况可能存在 data.data.shape# 进行一次简单的建模看看模型本身在数据集上的效果 rfc RandomForestClassifier(n_estimators100,random_state20) score_pre cross_val_score(rfc,data.data,data.target,cv10).mean()print(score_pre) # 0.9648809523809524# 随机森林调整的第一步无论如何先来调n_estimatorsscorel [] for i in range(0,200,10):rfc RandomForestClassifier(n_estimatorsi1,n_jobs-1,random_state20)score cross_val_score(rfc,data.data,data.target,cv10).mean()scorel.append(score)# 打印最大分数及所在的索引 print(max(scorel),(scorel.index(max(scorel))*10)1) plt.figure(figsize[20,5]) plt.plot(range(1,201,10),scorel) plt.show()# 在确定好的范围内进一步细化学习曲线 scorel [] for i in range(45,80):rfc RandomForestClassifier(n_estimatorsi,n_jobs-1,random_state20)score cross_val_score(rfc,data.data,data.target,cv10).mean()scorel.append(score)print(max(scorel),([*range(45,80)][scorel.index(max(scorel))])) plt.figure(figsize[20,5]) plt.plot(range(45,80),scorel) plt.show()# 接下来就进入网格搜索使用网格搜索对参数一个个进行调整。 # 为什么我们不同时调整多个参数呢 # 1同时调整多个参数会运行非常缓慢。 # 2同时调整多个参数会让我们无法理解参数的组合是怎么得来的所以即便网格搜索调出来的结果不好我们也不知道从哪里去改。 # 在这里为了使用复杂度-泛化误差方法方差-偏差方法我们对参数进行一个个地调整。# 为网格搜索做准备书写网格搜索的参数有一些参数是没有参照的很难说清一个范围这种情况下我们使用学习曲线看趋势从曲线跑出的结果中选取一个更小的区间再跑曲线param_grid {n_estimators:np.arange(0, 200, 10)} param_grid {max_depth:np.arange(1, 20, 1)} param_grid {max_leaf_nodes:np.arange(25,50,1)}有一些参数是可以找到一个范围的或者说我们知道他们的取值和随着他们的取值模型的整体准确率会如何变化这样的参数我们就可以直接跑网格搜索param_grid {criterion:[gini, entropy]} param_grid {min_samples_split:np.arange(2, 220, 1)} param_grid {min_samples_leaf:np.arange(1, 110, 1)} param_grid {max_features:np.arange(1,30,1)} # 按照参数对模型整体准确率的影响程度进行调参首先调整max_depth# 调整max_depth param_grid {max_depth:np.arange(1, 20, 1)}# 一般根据数据的大小来进行一个试探乳腺癌数据很小所以可以采用1~10或者1~20这样的试探 # 但对于大型数据来说我们应该尝试30~50层深度或许还不足够更应该画出学习曲线来观察深度对模型的影响) rfc RandomForestClassifier(n_estimators59,random_state20)GS GridSearchCV(rfc,param_grid,cv10) GS.fit(data.data,data.target) print(GS.best_params_) print(GS.best_score_) # 模型评分和之前一模一样,说明已经在最佳参数了无需再调了#{max_depth: 9} #0.968421052631579# 调整max_features param_grid {max_features:np.arange(1,30,1)}max_features是唯一一个即能够将模型往左低方差高偏差推也能够将模型往右高方差低偏差推的参数。max_features的默认最小值是sqrt(n_features)。rfc RandomForestClassifier(n_estimators59,random_state20)GS GridSearchCV(rfc,param_grid,cv10) GS.fit(data.data,data.target)print(GS.best_params_) print(GS.best_score_) # 最佳模型评分和之前一模一样说明模型达到了上限 # {max_features: 5} # 0.968421052631579
http://www.dnsts.com.cn/news/122516.html

相关文章:

  • 网站开发服务合同属于什么合同做二手货的网站有哪些
  • 网站平台做捐助功能有风险吗wordpress页面无法更新
  • 中山市两学一做网站电脑手机网站首页
  • 网站建设涉及到哪些方面企业展示型网站 建站系统
  • 资金盘网站建设注册新公司流程
  • 怎么做网站seo优化wordpress内页锚文本
  • 海南网站建设获客网站搭建的意义
  • wordpress 企业站教程wordpress 页面显示分类文章列表
  • 网站可行性分析wordpress禁止抓取
  • 开发区网站建设方案石家庄做网站需要多少钱
  • 没有备案的网站 公司服务器 查到会怎么样哈尔滨网站建设渠道
  • 成都哪家网站建设好wordpress调用文章的tags
  • 网站里的横幅广告怎么做商业网站模板制作与开发
  • 平台网站怎么做seo拖拽式制作网站可以做会员吗
  • 网页游戏网站斗地主计算机毕设做网站
  • 专业苏州网站建设公司wordpress导航栏图标
  • 做网站租服务器多少钱游戏资讯网站哪个好
  • 实木复合门网站建设价格江苏企业网站制作哪家好
  • 湖北建设部网站网站开发形成收入怎么做帐
  • 国内全屏网站有哪些青岛建个网站多少钱
  • 西安网站建设gj天津专业网站建设公司
  • 云南建设局网站网站建设图文教程
  • 中国建设银行蚌埠官方网站广联达工程造价软件
  • 专门找图片素材的网站激光网站建设
  • 获得网站php管理员密码上海房产网最新二手房
  • 网站备案系统做速卖通要关注的几个网站
  • 成都本地做网站的运营网站需要多少钱
  • 甘肃省建设厅不动产网站免费的工程信息网站
  • 网站排名优化服务中山祥云做的网站
  • 住建厅电子证书的查询方式seo从0到1怎么做