GridSearchCV 参数不能改善分类

Posted

技术标签:

【中文标题】GridSearchCV 参数不能改善分类【英文标题】:GridSearchCV parameters don't improve classification 【发布时间】:2017-04-20 05:18:08 【问题描述】:

我有一个目标数据集,我将其分为 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 中设置相同的参数并不能带来更好的性能?

【问题讨论】:

你叫什么iteration?不清楚 你能显示MWE,包括你在gsearch.fit之后做了什么吗? 【参考方案1】:

您的gsearch.predict(...) 调用最佳分类器的预测。

我不确定ClassifierXGB 的后台发生了什么,但如果你创建一个 classifierXGB

classifierXGB = ClassifierXGB(**gsearch.best_params_)` 

然后然后调用classifierXGB.predict(4_unseen_folds),您应该会看到类似于gsearch.predict(4_unseen_folds)的内容。

这可能是在事后对classifierXGB 应用更改并没有达到您的预期。创建ClassifierXGB 的新实例应该会有所帮助。

【讨论】:

【参考方案2】:

将参数设置为classifierXGB 后,您需要将其拟合 整个火车数据,然后,用它来预测事物 p>

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

【讨论】:

以上是关于GridSearchCV 参数不能改善分类的主要内容,如果未能解决你的问题,请参考以下文章

我正在尝试实现 GridSearchCV 来调整 K 最近邻分类器的参数

使用 GridSearchCV 进行超参数调整

在 GridSearchCV 中,如何只传递 param_grid 中的默认参数?

gridsearchCV - 每个参数组合的随机数据

什么取代了 scikit 中的 GridSearchCV._grid_scores_?

GridsearchCV sklearn 中的错误