scikit-learn报”ValueError: ‘auto’ is not a valid scoring value. Valid options are {scoring_options}. “的原因以及解决办法

  • Post category:Python

scikit-learn是一个广泛使用的机器学习库,该库提供了一些常用的评分方法。在使用该库时,可能会出现”ValueError: ‘auto’ is not a valid scoring value. Valid options are {scoring_options}.”错误。

这个错误的原因是因为scikit-learn中的评分选项包括一些预定义的字符串,如’accuracy’、’balanced_accuracy’等,’auto’不是其中之一。当使用’auto’作为评分选项时,scikit-learn就无法识别该选项并报错。

要解决这个问题,需要将’auto’替换为一个确切的评分选项。如果不确定要使用哪个评分选项,可以参考scikit-learn文档中的评分参数,或考虑使用默认值。以下是一个使用默认评分选项的示例:

from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_digits
from sklearn.svm import SVC

X, y = load_digits(return_X_y=True)
clf = SVC(kernel='linear', C=1, random_state=42)
scores = cross_val_score(clf, X, y, cv=5) # 默认使用accuracy评分
print(scores)

如果要使用特定的评分选项,可以将其作为cross_val_score()函数的参数传递,如下所示:

from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_digits
from sklearn.svm import SVC
from sklearn.metrics import make_scorer, accuracy_score

X, y = load_digits(return_X_y=True)
clf = SVC(kernel='linear', C=1, random_state=42)
scorer = make_scorer(accuracy_score) # 使用accuracy评分
scores = cross_val_score(clf, X, y, cv=5, scoring=scorer)
print(scores)

在这个示例中,make_scorer()函数将accuracy_score()函数转换为可用于cross_val_score()函数的评分器。然后将该评分器作为scoring参数传递到cross_val_score()函数中。

需要注意的是,如果使用自定义的评分器,需要考虑组合折叠和多标签指标的情况。在这种情况下,需要对训练模型的模板进行修改,以便支持这些评分器。详细信息请参见scikit-learn文档。