atheme wordpress整站优化与关键词排名
atheme wordpress,整站优化与关键词排名,淮安新港建设有限公司网站,做淘宝详情的网站随机森林超参数的网格优化#xff08;机器学习的精华–调参#xff09;
随机森林各个参数对算法的影响
影响力参数⭐⭐⭐⭐⭐几乎总是具有巨大影响力n_estimators#xff08;整体学习能力#xff09;max_depth#xff08;粗剪枝#xff09;max_features#xff08;随机…随机森林超参数的网格优化机器学习的精华–调参
随机森林各个参数对算法的影响
影响力参数⭐⭐⭐⭐⭐几乎总是具有巨大影响力n_estimators整体学习能力max_depth粗剪枝max_features随机性⭐⭐⭐⭐大部分时候具有影响力max_samples随机性class_weight样本均衡⭐⭐可能有大影响力大部分时候影响力不明显min_samples_split精剪枝min_impurity_decrease精剪枝max_leaf_nodes精剪枝criterion分枝敏感度⭐当数据量足够大时几乎无影响random_stateccp_alpha结构风险
探索的第一步学习曲线
先看看n_estimators的学习曲线当然我们也可以看一下其他参数的学习曲线
#参数潜在取值由于现在我们只调整一个参数因此参数的范围可以取大一些、取值也可以更密集
Option [1,*range(5,101,5)]#生成保存模型结果的arrays
trainRMSE np.array([])
testRMSE np.array([])
trainSTD np.array([])
testSTD np.array([])#在参数取值中进行循环
for n_estimators in Option:#按照当下的参数实例化模型reg_f RFR(n_estimatorsn_estimators,random_state83)#实例化交叉验证方式输出交叉验证结果cv KFold(n_splits5,shuffleTrue,random_state83)result_f cross_validate(reg_f,X,y,cvcv,scoringneg_mean_squared_error,return_train_scoreTrue,n_jobs-1)#根据输出的MSE进行RMSE计算train abs(result_f[train_score])**0.5test abs(result_f[test_score])**0.5#将本次交叉验证中RMSE的均值、标准差添加到arrays中进行保存trainRMSE np.append(trainRMSE,train.mean()) #效果越好testRMSE np.append(testRMSE,test.mean())trainSTD np.append(trainSTD,train.std()) #模型越稳定testSTD np.append(testSTD,test.std())定义画图函数
def plotCVresult(Option,trainRMSE,testRMSE,trainSTD,testSTD):#一次交叉验证下RMSE的均值与std的绘图xaxis Optionplt.figure(figsize(8,6),dpi80)#RMSEplt.plot(xaxis,trainRMSE,colork,label RandomForestTrain)plt.plot(xaxis,testRMSE,colorred,label RandomForestTest)#标准差 - 围绕在RMSE旁形成一个区间plt.plot(xaxis,trainRMSEtrainSTD,colork,linestyledotted)plt.plot(xaxis,trainRMSE-trainSTD,colork,linestyledotted)plt.plot(xaxis,testRMSEtestSTD,colorred,linestyledotted)plt.plot(xaxis,testRMSE-testSTD,colorred,linestyledotted)plt.xticks([*xaxis])plt.legend(loc1)plt.show()plotCVresult(Option,trainRMSE,testRMSE,trainSTD,testSTD)当绘制学习曲线时我们可以很容易找到泛化误差开始上升、或转变为平稳趋势的转折点。因此我们可以选择转折点或转折点附近的n_estimators取值例如20。然而n_estimators会受到其他参数的影响例如 单棵决策树的结构更简单时依赖剪枝时可能需要更多的树单棵决策树训练的数据更简单时依赖随机性时可能需要更多的树 因此n_estimators的参数空间可以被确定为range(20,100,5)如果你比较保守甚至可以确认为是range(15,25,5)。
探索第二步随机森林中的每一棵决策树 属性.estimators_查看森林中所有的树 参数参数含义对应属性属性含义n_estimators树的数量reg.estimators_森林中所有树对象max_depth允许的最大深度.tree_.max_depth0号树实际的深度max_leaf_nodes允许的最大叶子节点量.tree_.node_count0号树实际的总节点量min_sample_split分枝所需最小样本量.tree_.n_node_samples0号树每片叶子上实际的样本量min_weight_fraction_leaf分枝所需最小样本权重tree_.weighted_n_node_samples0号树每片叶子上实际的样本权重min_impurity_decrease分枝所需最小不纯度下降量.tree_.impurity.tree_.threshold0号树每片叶子上的实际不纯度0号树每个节点分枝后不纯度下降量
可以通过对上述属性的调用查看当前模型每一棵树的各个属性对我们对于参数范围的选择给予帮助。
正戏开始网格搜索
import numpy as np
import pandas as pd
import sklearn
import matplotlib as mlp
import matplotlib.pyplot as plt
import time #计时模块time
from sklearn.ensemble import RandomForestRegressor as RFR
from sklearn.model_selection import cross_validate, KFold, GridSearchCV# 定义RMSE函数
def RMSE(cvresult,key):return (abs(cvresult[key])**0.5).mean()#导入波士顿房价数据
data pd.read_csv(rD:\Pythonwork\datasets\House Price\train_encode.csv,index_col0)
#查看数据
data.head()
X data.iloc[:,:-1]
y data.iloc[:,-1]Step 1.建立benchmark # 定义回归器
reg RFR(random_state83)
# 进行5折交叉验证
cv KFold(n_splits5,shuffleTrue,random_state83)result_pre_adjusted cross_validate(reg,X,y,cvcv,scoringneg_mean_squared_error,return_train_scoreTrue,verboseTrue,n_jobs-1)
#分别查看训练集和测试集在调参之前的RMSE
RMSE(result_pre_adjusted,train_score)
RMSE(result_pre_adjusted,test_score)结果分别是 11177.272008319653 30571.26665524217 Step 2.创建参数空间 param_grid_simple {criterion: [squared_error,poisson], n_estimators: [*range(20,100,5)], max_depth: [*range(10,25,2)], max_features: [log2,sqrt,16,32,64,auto], min_impurity_decrease: [*np.arange(0,5,10)]}Step 3.实例化用于搜索的评估器、交叉验证评估器与网格搜索评估器 #n_jobs4/8,verboseTrue
reg RFR(random_state1412,verboseTrue,n_jobs-1)
cv KFold(n_splits5,shuffleTrue,random_state83)
search GridSearchCV(estimatorreg,param_gridparam_grid_simple,scoring neg_mean_squared_error,verbose True,cv cv,n_jobs-1)Step 4.训练网格搜索评估器 #【TIME WARNING: 15mins】# 当然博主的电脑比较慢
start time.time()
search.fit(X,y)
print(time.time() - start)Step 5.查看结果 search.best_estimator_# 直接使用最优参数进行建模
ad_reg RFR(n_estimators85, max_depth23, max_features16, random_state83)cv KFold(n_splits5,shuffleTrue,random_state83)
result_post_adjusted cross_validate(ad_reg,X,y,cvcv,scoringneg_mean_squared_error,return_train_scoreTrue,verboseTrue,n_jobs-1)
#查看调参后的结果
RMSE(result_post_adjusted,train_score)
RMSE(result_post_adjusted,test_score)得出结果 11000.81099038192 28572.070208366855
调参前后对比
#默认值下随机森林的RMSE
xaxis range(1,6)
plt.figure(figsize(8,6),dpi80)
#RMSE
plt.plot(xaxis,abs(result_pre_adjusted[train_score])**0.5,colorgreen,label RF_pre_ad_Train)
plt.plot(xaxis,abs(result_pre_adjusted[test_score])**0.5,colorgreen,linestyle--,label RF_pre_ad_Test)
plt.plot(xaxis,abs(result_post_adjusted[train_score])**0.5,colororange,label RF_post_ad_Train)
plt.plot(xaxis,abs(result_post_adjusted[test_score])**0.5,colororange,linestyle--,label RF_post_ad_Test)
plt.xticks([1,2,3,4,5])
plt.xlabel(CVcounts,fontsize16)
plt.ylabel(RMSE,fontsize16)
plt.legend()
plt.show()不难发现网格搜索之后的模型过拟合程度减轻且在训练集与测试集上的结果都有提高可以说从根本上提升了模型的基础能力。我们还可以根据网格的结果继续尝试进行其他调整来进一步降低模型在测试集上的RMSE。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/88839.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!