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

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

我使用的是Python v3.6Scikit-Learn v0.18.1

如何使用GridSearchCVlog_loss来调整多类模型?

我的类表示:

1    312    183    284    195    176    22Name: 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)中,如果所有标签都相同,则需要提供label参数。文档这一部分的措辞也表明,如果不传递labels,该方法会假设为二分类。

正如你正确假设的,你应该传递log_loss作为scorer=sklearn.metrics.log_loss(labels=your_labels)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注