0

我有一个目标数据集,我将其分成5个非重叠的折叠。 在每次迭代中(总迭代== 5),我使用1倍(我们称之为fold_for_tuning)进行参数调整,并使用4次折叠进行测试。GridSearchCV参数不会改进分类

原因是我想做域自适应,并且在调整之前,我将源数据拟合到分类器中,并且我正在使用目标数据的小子集进行调整)。

我打电话GridSearchCV和适应fold_for_tuning的,也是我经过一堆参数,我想调:

param_test1 = { 
      'max_depth': [5, 7], 
      'min_child_weight': [0.5, 1, 2], 
      'gamma': [0.1, 1], 
      'subsample': [0.6, 0.7], 
      'colsample_bytree': [0.6, 0.7], 
      'reg_alpha': [0.01, 0.1] 
     } 

gsearch = GridSearchCV(estimator=classifierXGB, 
           param_grid=param_test1, 
           scoring='accuracy', 
           n_jobs=4, iid=False, cv=2) 

gsearch.fit(fold_for_tuning_data, fold_for_tuning_labels) 

每次迭代之后,我得到gsearch.best_params_,我将它们设置为classifierXGB(因为他们应该根据我的理解,给出更好的预测)。 然后,当我打电话 test_y_predicted = classifierXGB.predict(4_unseen_folds) 我得到不改善:

prediction before tuning: 
acc: 0.690658872245 
auc: 0.700764301397 
f1: 0.679211922203 
prediction after tuning: 
acc: 0.691382460414 
auc: 0.701595887248 
f1: 0.680132554837 

但如果我叫gsearch.predict(4_unseen_folds) 我得到更好的性能:

prediction grid search : 
acc: 0.933313032887 
auc: 0.930058979926 
f1: 0.920623414281 

所以我很困惑:网格搜索内部发生了什么?它不应该只优化我在param_grid中传递的参数吗?如果是这样,那么为什么在classifierXGB中设置非常相同的参数不会导致更好的性能?

+0

你叫什么'迭代'?目前尚不清楚 – MMF

+0

您可以展示[MWE](http://stackoverflow.com/help/mcve),包括您在gsearch.fit后面做了什么? – ncfirth

回答

0

您的gsearch.predict(...)致电预测的最佳分类器。

我不知道发生了什么事在ClassifierXGB背景,但如果你创建一个新的classifierXGB

classifierXGB = ClassifierXGB(**gsearch.best_params_)` 

然后呼叫classifierXGB.predict(4_unseen_folds)你应该会看到类似的东西gsearch.predict(4_unseen_folds)

这可能是在事实不符合您的期望后应用对classifierXGB的更改。创建ClassifierXGB的新实例应该有所帮助。

0

一旦您将参数设置为你的classifierXGB,你需要以适应它对整个列车数据,然后,用它来预测未来

网格搜索找到的“正确”的参数,你把它们给了你的分类器,以便它有效地学习,但是你没有给他实际的树木/模型的权重。它仍然是一个空壳。

相关问题