我有一个目标数据集,我将我分为5个不重叠的折叠。在每次迭代时(总迭代== 5),我使用1倍(我们称其为 fold_for_tuning
)进行参数调整,然后我使用4倍进行测试。
这样做的原因是我想进行域的适应性,在调整之前,我将源数据贴上分类器,然后使用较小的目标数据子集来调整)。
我致电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
中设置非常相同的参数不会导致更好的性能?
您的gsearch.predict(...)
调用是最好的分类器的预测。
我不确定ClassifierXGB
背景中发生了什么,但是如果您创建 new classifierXGB
:
classifierXGB = ClassifierXGB(**gsearch.best_params_)`
和然后呼叫classifierXGB.predict(4_unseen_folds)
您应该看到类似于gsearch.predict(4_unseen_folds)
的东西。
事实不按照您的期望,可能将更改应用于classifierXGB
。创建ClassifierXGB
的新实例应有所帮助。
将参数设置为 classifierXGB
,您需要才能将其适合在整个火车数据上,,然后是,请使用它可以预测事物
网格搜索找到了"正确的"参数,您将它们交给了分类器以使其有效地学习,但是您没有给他模型的实际树/重量。它仍然是一个空壳。