- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 GridSearchCV
的 scoring
参数中的 log_loss
参数来调整这个多类(6 类)分类器.我不明白如何给它一个 label
参数。即使我给它 sklearn.metrics.log_loss
,它也会在交叉验证中的每次迭代中发生变化,所以我不明白如何给它 labels
参数?
我正在使用 Python v3.6
和 Scikit-Learn v0.18.1
如何将 GridSearchCV
与 log_loss
一起用于多类模型调整?
我的类(class)代表:
1 31
2 18
3 28
4 19
5 17
6 22
Name: encoding, dtype: int64
我的代码:
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)
这是错误的结尾,完整的错误在这里 https://pastebin.com/1CshpEBN :
ValueError: y_true contains only one label (1). Please provide the true labels explicitly through the labels argument.
更新:就用这个来做基于@Grr 的得分手
log_loss_build = lambda y: metrics.make_scorer(metrics.log_loss, greater_is_better=False, needs_proba=True, labels=sorted(np.unique(y)))
最佳答案
我的假设是,不知何故,您的数据拆分在 y_true 中只有一个类标签。虽然根据您发布的发行版,这似乎不太可能,但我想这是可能的。虽然我之前没有遇到过这个问题,但在 [sklearn.metrics.log_loss
]( http://scikit-learn.org/stable/modules/generated/sklearn.metrics.log_loss.html ) 中,如果标签都相同,则需要标签参数。如果未传递 labels
,文档这一部分的措辞也让人觉得该方法似乎是在进行二元分类。
现在您正确地假设您应该将 log_loss
传递为 scorer=sklearn.metrics.log_loss(labels=your_labels)
关于python - 如何在 Scikit-Learn (sklearn) 中将 `log_loss` 中的 `GridSearchCV` 与多类标签一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43377189/
我是一名优秀的程序员,十分优秀!