如何在带有Scikit-Learn(sklearn)中的多类标签的`GridSearchCV`中使用`log_loss`?

时间:2017-04-12 18:37:44

标签: python optimization machine-learning scikit-learn grid-search

我试图在log_loss的{​​{1}}参数中使用scoring参数来调整这个多类(6类)分类器。我不明白如何给它一个GridSearchCV参数。即使我给它label,它也会在交叉验证中的每次迭代中发生变化,所以我不明白如何给它sklearn.metrics.log_loss参数?

我正在使用labelsPython v3.6

如何将Scikit-Learn v0.18.1GridSearchCV一起用于多级模型调整?

我的班级代表:

log_loss

我的代码:

1    31
2    18
3    28
4    19
5    17
6    22
Name: encoding, dtype: int64

这里是错误的尾部,完整的一个在https://pastebin.com/1CshpEBN

param_test = {"criterion": ["friedman_mse", "mse", "mae"]}
gsearch_gbc = GridSearchCV(estimator = GradientBoostingClassifier(n_estimators=10), 
                        param_grid = param_test, scoring="log_loss", n_jobs=1, iid=False, cv=cv_indices)
gsearch_gbc.fit(df_attr, Se_targets)

更新 只需使用它来根据@Grr

制作得分手
ValueError: y_true contains only one label (1). Please provide the true labels explicitly through the labels argument.

2 个答案:

答案 0 :(得分:3)

我的假设是,你的数据分割在y_true中只有一个类标签。虽然这似乎不太可能基于你发布的分布,我想这是可能的。虽然我似乎在data](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.log_loss.html)之前没遇到过这种情况,但如果标签全部相同,则会出现label参数。文档的这一部分的措辞也使得如果未传递[sklearn.metrics.log_loss,该方法似乎会影响二进制分类。

现在正确地假设您应该将labels作为log_loss

传递

答案 1 :(得分:2)

你可以简单地指定" neg_log_loss_scorer" (或" log_loss_scorer")旧版本中将使用负日志丢失。