我有一个目标数据集,我将其划分为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
中设置相同的参数不会带来更好的效果呢?
答案 0 :(得分:0)
您的gsearch.predict(...)
电话 是对最佳分类器的预测。
我不确定在ClassifierXGB
的背景下发生了什么,但如果您创建新 classifierXGB
:
classifierXGB = ClassifierXGB(**gsearch.best_params_)`
和然后致电classifierXGB.predict(4_unseen_folds)
您应该看到与gsearch.predict(4_unseen_folds)
类似的内容。
可能是在事件发生之后将更改应用于classifierXGB
可能不符合您的预期。创建ClassifierXGB
的新实例应该会有所帮助。
答案 1 :(得分:0)
将参数设置为classifierXGB
后,您需要使其适合整个列车数据然后,用它来预测事物
网格搜索找到了“正确的”参数,你把它们交给你的分类器以便它有效地学习,但你没有给他模型的实际树木/权重。它仍然是一个空壳。