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 中,如何只传递 param_grid 中的默认参数?