我的问题是,我试图调优一个RandomForestRegressor。在使用默认参数进行交叉验证以及Train Test Split方法时,我得到的R2得分约为0. 85到0. 90。当我试图使用GridSearchCV找到最佳参数时,我得到了最佳的R2,大约在0.60到0.62之间。请注意,我在网格中也包含了默认参数。(因此,如果默认值是最佳设置,它应该在那里)
我尝试过许多方法,比如改变网格值(并将默认参数包含回网格中),但它甚至没有接近默认设置带给我的效果。
请在此处查找代码
my_steps = list()
my_steps.append(('pt_transformer', PowerTransformer(method='box-cox')))
my_steps.append(('model', RandomForestRegressor()))
pipeline = Pipeline(steps=steps)
cv = KFold(n_splits=10,
random_state=1,
shuffle=True)
# evaluate the model using cross-validation
scores = cross_validate(pipeline,
X,
y,
scoring=['r2', 'neg_mean_absolute_error'],
cv=cv,
n_jobs=-1)
print('Average R2 test score: ', scores['test_r2'].mean())
print('Average MAE test score: ', np.mean([abs(s) for s in scores['test_neg_mean_absolute_error']]))
这给出了R2分数为0.85到0.90为了进一步改进,我选择使用以下基本参数进行超参数调优
parameters= {'model__max_depth' : [None, 50, 100, 150, 200],
'model__max_leaf_nodes': [None, 5, 10],
'model__max_samples': [None, 10, 20, 50],
'model__max_depth': [None, 100, 150]}
接下来是:
grid = GridSearchCV(estimator = pipe,
param_grid = parameters,
cv = 5,
scoring='r2',
n_jobs = -1,
verbose=3)
grid.fit(X, y)
print(grid.best_params_)
print(grid.best_score_)
我在这里得到的最好分数是0.6067。
注:请注意,所有这些无是默认设置的那些参数。
谢谢你!
1条答案
按热度按时间o2rvlv0m1#
它们衡量不同的事物:
第一个在训练过程中看到90%的数据并给
0.9
打分,第二个在训练过程中看到80%的数据并给0.6
打分。如果交叉验证拆分的数量相同,则结果应更加一致。