python 即使在GridSearchCV中使用RandomForestRegressor的默认参数时,R2评分也比基线差

k10s72fa  于 2023-01-01  发布在  Python
关注(0)|答案(1)|浏览(166)

我的问题是,我试图调优一个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
注:请注意,所有这些无是默认设置的那些参数。
谢谢你!

o2rvlv0m

o2rvlv0m1#

它们衡量不同的事物:

KFold(n_splits=10)

GridSearchCV(cv=5)

第一个在训练过程中看到90%的数据并给0.9打分,第二个在训练过程中看到80%的数据并给0.6打分。
如果交叉验证拆分的数量相同,则结果应更加一致。

相关问题