GridSearchCV 不支持多类吗?

Bor*_*rys 7 python scikit-learn

我尝试根据此处的答案将 GridSearchCV 用于多类案例:

加速预测

但我得到了价值错误, multiclass format is not supported.

如何将这种方法用于多类案例?

以下代码来自上述链接中的答案。

import numpy as np
from sklearn.datasets import make_classification
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.pipeline import make_pipeline
from sklearn.grid_search import GridSearchCV
from sklearn.metrics import accuracy_score, recall_score, f1_score, roc_auc_score, make_scorer

X, y = make_classification(n_samples=3000, n_features=5, weights=[0.1, 0.9, 0.3])

pipe = make_pipeline(StandardScaler(), SVC(kernel='rbf', class_weight='auto'))

param_space = dict(svc__C=np.logspace(-5,0,5), svc__gamma=np.logspace(-2, 2, 10))

accuracy_score, recall_score, roc_auc_score
my_scorer = make_scorer(roc_auc_score, greater_is_better=True)

gscv = GridSearchCV(pipe, param_space, scoring=my_scorer)
gscv.fit(X, y)

print gscv.best_params_
Run Code Online (Sandbox Code Playgroud)

And*_*eus 6

来自roc_auc_score的文档:

注意:此实现仅限于标签指示符格式的二元分类任务或多标签分类任务。

通过“标签指示符格式”,它们意味着每个标签值都表示为一个二进制列(而不是单个列中的唯一目标值)。您不想为您的预测器这样做,因为它可能会导致非互斥的预测(即,预测案例 p1 的标签 2 和 4,或预测案例 p2 的无标签)。

选择或自定义实现为多类问题定义明确的评分函数,例如F1 score。就我个人而言,我发现知情比 F1 分数更有说服力,并且比 roc_auc_score 更容易推广到多类问题。


小智 5

它支持多类,您可以设置 的para scoring = f1.macro,例如:

gsearch1 = GridSearchCV(estimator = est1, param_grid=params_test1, scoring='f1_macro', cv=5, n_jobs=-1)
Run Code Online (Sandbox Code Playgroud)

或者得分='roc_auc_ovr'