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)
输出是相同的值。如何修复它?
根据 sklearn\'s文档,使用时的行为是预期的micro
,当使用平均值和处理多类设置时,
\n\n请注意,如果包含所有标签,\n多类设置中的 \xe2\x80\x9cmicro\xe2\x80\x9d 平均将产生与准确率\n完全相同的精度、召回率和 F。
\n
这是一篇不错的博客文章,描述了为什么这些分数可以相等(也有一个直观的例子)
\n长话短说
\nF1
等于recall
并且precision
如果recall
==precision
recall
==precision
micro F1
始终等于accuracy
。看这里