如何在 Scikit-Learn (sklearn) 中将 `GridSearchCV` 中的 `log_loss` 与多个 class 标签一起使用?
How to use `log_loss` in `GridSearchCV` with multi-class labels in Scikit-Learn (sklearn)?
我正在尝试使用 GridSearchCV
的 scoring
参数中的 log_loss
参数来调整此 multi-class (6 classes ) class 生成器。我不明白如何给它一个 label
参数。即使我给它 sklearn.metrics.log_loss
,它也会在交叉验证中的每次迭代中改变,所以我不明白如何给它 labels
参数?
我正在使用 Python v3.6
和 Scikit-Learn v0.18.1
如何使用 GridSearchCV
和 log_loss
以及多 class 模型调整?
我的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 中只有一个 class 标签。虽然根据您发布的发行版,这似乎不太可能,但我想这是可能的。虽然我在 [sklearn.metrics.log_loss
](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.log_loss.html) 中似乎没有 运行 进入这个,但如果标签都相同,则标签参数是预期的。如果 labels
未通过,该文档的这一部分的措辞也让人觉得该方法似乎会推算一个二进制 classification。
现在你正确地假设你应该将 log_loss
作为 scorer=sklearn.metrics.log_loss(labels=your_labels)
您可以在旧版本中简单地指定 "neg_log_loss_scorer"(或 "log_loss_scorer"),这将使用负对数损失。
我正在尝试使用 GridSearchCV
的 scoring
参数中的 log_loss
参数来调整此 multi-class (6 classes ) class 生成器。我不明白如何给它一个 label
参数。即使我给它 sklearn.metrics.log_loss
,它也会在交叉验证中的每次迭代中改变,所以我不明白如何给它 labels
参数?
我正在使用 Python v3.6
和 Scikit-Learn v0.18.1
如何使用 GridSearchCV
和 log_loss
以及多 class 模型调整?
我的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 中只有一个 class 标签。虽然根据您发布的发行版,这似乎不太可能,但我想这是可能的。虽然我在 [sklearn.metrics.log_loss
](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.log_loss.html) 中似乎没有 运行 进入这个,但如果标签都相同,则标签参数是预期的。如果 labels
未通过,该文档的这一部分的措辞也让人觉得该方法似乎会推算一个二进制 classification。
现在你正确地假设你应该将 log_loss
作为 scorer=sklearn.metrics.log_loss(labels=your_labels)
您可以在旧版本中简单地指定 "neg_log_loss_scorer"(或 "log_loss_scorer"),这将使用负对数损失。