网格搜索CV参数不能改善分类



我有一个目标数据集,我将我分为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,您需要才能将其适合在整个火车数据上,,然后是,请使用它可以预测事物

网格搜索找到了"正确的"参数,您将它们交给了分类器以使其有效地学习,但是您没有给他模型的实际树/重量。它仍然是一个空壳。

相关内容

  • 没有找到相关文章

最新更新