Sklearn评估准确率、精确率、召回率,f1显示相同结果

use*_*575 4 python evaluation scikit-learn

我想像这段代码一样评估准确度、精确度、召回率、f1,但它显示相同的结果。

df = pd.read_csv(r'test.csv')

X = df.iloc[:,:10]
Y = df.iloc[:,10]

X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2)

clf = DecisionTreeClassifier()

clf = clf.fit(X_train,y_train)

predictions = clf.predict(X_test)

accuracy = accuracy_score(y_test, predictions)
precision = precision_score(y_test, predictions,average='micro')
recall = recall_score(y_test, predictions,average='micro')
f1 = f1_score(y_test, predictions,average='micro')

print("Accuracy: ", accuracy)
print("precision: ", precision)
print("recall: ", recall)
print("f1: ", f1)
Run Code Online (Sandbox Code Playgroud)

它显示这样的输出。

Accuracy:  0.8058823529411765
precision:  0.8058823529411765
recall:  0.8058823529411765
f1:  0.8058823529411765
Run Code Online (Sandbox Code Playgroud)

输出是相同的值。如何修复它?

Gus*_*sto 5

根据 sklearn\'s文档,使用时的行为是预期的micro,当使用平均值和处理多类设置时,

\n
\n

请注意,如果包含所有标签,\n多类设置中的 \xe2\x80\x9cmicro\xe2\x80\x9d 平均将产生与准确率\n完全相同的精度、召回率和 F。

\n
\n

这是一篇不错的博客文章,描述了为什么这些分数可以相等(也有一个直观的例子)

\n

长话短说

\n
    \n
  1. F1等于recall并且precision如果recall==precision
  2. \n
  3. 在微平均的情况下,假阳性的数量始终等于假阴性的数量。因此,recall ==precision
  4. \n
  5. 最后,请注意micro F1始终等于accuracy。看这里
  6. \n
\n