如何将一个数据帧作为训练数据帧和另一个数据帧作为验证传递到 GridSearchCV

问题描述 投票:0回答:1

我是一名程序员,正在努力寻找进入机器学习世界的方法。所以这个问题可能是基本的。

我有2010-2019年的数据。现在我正在尝试测试梯度增强回归的不同参数,我想使用 60% 用于训练,20% 用于验证,20% 用于测试。由于我要回答的问题的性质。我已经将数据分为

Train_df
从2010年到2014年,
evaluate_df
从2015年到2017年,
test_df
从2018-2019年。

模型应该在

trained_df
上进行训练,并在
evaluate_df
上进行评估,最后我使用测试数据框的最佳模型
test_df

这是我的代码:

p_test3 = {'learning_rate':[0.1,0.05,0.01,0.005], 'n_estimators':[500,750,1000,1250,1500]}

tuning = GridSearchCV(estimator =GradientBoostingRegressor( min_samples_split=2, min_samples_leaf=1, subsample=1,max_features='sqrt', random_state=10), 
            param_grid = p_test3, scoring='r2',n_jobs=-1, cv=evaluate_df)
tuning.fit(train_df[[col1]],train_df['col2'])
tuning.cv_results_, tuning.best_params_, tuning.best_score_

但是我收到了这个错误:

ValueError:需要解包的值太多(预计为 2 个)

如何在数据框上测试 GridSearchCV 模型?

python pandas machine-learning evaluation gridsearchcv
1个回答
0
投票

应合并 2 个数据帧,然后必须生成新列表,其中 0 用于训练,1 用于测试。然后将其传递给cv。

combined_df=pd.concat([train_df,evaluate_df])
test_fold = [0] * len(train_df) + [1] * len(evaluate_df)



p_test3 = {'learning_rate':[0.1,0.05,0.01,0.005], 'n_estimators':[500,750,1000,1250,1500]}
ps = PredefinedSplit(test_fold=test_fold)
tuning = GridSearchCV(estimator =GradientBoostingRegressor( min_samples_split=2, min_samples_leaf=1, subsample=1,max_features='sqrt', random_state=10), 
        param_grid = p_test3, scoring='r2',n_jobs=-1, cv=ps)
© www.soinside.com 2019 - 2024. All rights reserved.