无法在 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。
我正在处理多类分类问题。
我在使用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。