无法在 sklearn cross_val_score 上评估 f1-score

Cannot evaluate f1-score on sklearn cross_val_score

我正在处理多类分类问题。

我在使用train_test_split时可以得到f1的分数,然后得到如下图的分类报告:

    X_train, X_test, y_train, y_test = train_test_split(data, y_data,test_size=0.3, random_state = 1, stratify=y_data)
    knn_clf=KNeighborsClassifier(n_neighbors)
    knn_clf.fit(X_train,y_train)
    ypred=knn_clf.predict(X_test) #These are the predicted output values
    print(classification_report(y_test, ypred))

但是,由于数据集的大小,交叉验证更适用。问题是我无法使用交叉验证方法获得 f1 分数。如果不添加 f1,交叉验证如下所示:

    knn_cv = KNeighborsClassifier(n_neighbors)
    cv_scores = cross_val_score(knn_cv, data, y_data, cv=3)

    #print each cv score (accuracy) and average them
    print("cv_scores: ", cv_scores)
    print('cv_scores mean:{}'.format(np.mean(cv_scores)))

输出: cv_scores: [0.83333333 1. 1. ] cv_scores mean:0.9444444444444445

当我在F1中添加如下:

print(cross_val_score(knn_cv, data, y_data, scoring="f1", cv = 3))

它输出: [楠楠楠] cv_scores: [南南南] cv_scores mean:nan

任何帮助将不胜感激,谢谢!

编辑: 引发的错误是: ValueError:目标是多类,但平均值='binary'。请选择另一个平均设置,[None、'micro'、'macro'、'weighted'] 之一。

然而当运行:

print(cross_val_score(knn_cv, data, y_data, average ='weighted', scoring='f1', cv = 3, error_score="raise"))

返回的错误是: TypeError: cross_val_score() 得到了一个意外的关键字参数 'average'

对于所有 None、'micro'、'macro' 和 'weighted'

都会发生

错误消息对 average 参数的引用是针对函数 f1_score 的。将 cross_val_score 的得分手指定为字符串时,正确的指定是 scoring="f1_weighted" 等;参见 https://scikit-learn.org/stable/modules/model_evaluation.html#common-cases-predefined-values