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,你需要以適應它對整個列車數據,然後,用它來預測未來

網格搜索找到的「正確」的參數,你把它們給了你的分類器,以便它有效地學習,但是你沒有給他實際的樹木/模型的權重。它仍然是一個空殼。

相關問題