我正在使用RandomForestRegressor(scikit-learnpython包)。我正在寻找超参数的最佳值,n_estimators并将min_samples_split我的回归器拟合到火车数据集 ( X_train, y_train) 上:
param_grid = { 'n_estimators' : range( 10 , 201 ) ,
'min_samples_split' : range( 2 , 11 ) }
rfr = RandomForestRegressor()
best_score = 0
best_param = {}
for param in ParameterGrid( param_grid ):
rfr.set_params( **g )
rfr.fit( X_train , y_train )
score = rfr.score( X_train , y_train )
if score > best_score :
best_score = score
best_param = param
print( 'best_score : {0}'.format( best_score ) )
print( 'best_parameters : {0}'.format( best_param ) )
我不是故意使用交叉验证。
最好的超参数在best_param变量中,对应的分数在best_score变量中。
之后,我使用最好的参数设置我的回归器的超参数:
rfr.set_params( **best_param )
我在我的火车数据集上拟合回归器:
rfr.fit( X_train , y_train )
最后只是为了检查我获得了具有最佳超参数的回归器的分数:
rfr.score( X_train , y_train )
分数与网格中计算的分数不同:网格外为 0.806,网格内为 0.963。
我不明白为什么。超参数是最好的,用于计算这些最佳参数的数据集是相同的。有什么提示吗?