sklearn.metrics.classification_report()模型評估的一種,輸出一個報告
sklearn.metrics.classification_report(y_true, y_pred, labels=None, target_names=None, sample_weight=None, digits=2, output_dict=False)
參數說明
- y_true:1 維數組,真實數據的分類標簽
- y_pred:1 維數組,模型預測的分類標簽
- labels:列表,需要評估的標簽名稱
- target_names:列表,指定標簽名稱
- sample_weight:1 維數組,不同數據點在評估結果中所占的權重
- digits:評估報告中小數點的保留位數,如果 output_dict=True,此參數不起作用,返回的數值不作處理
- output_dict:若真,評估結果以字典形式返回
返回
每個分類標簽的精確度,召回率和 F1-score。
精確度:precision,正確預測為正的,占全部預測為正的比例,TP / (TP+FP)
召回率:recall,正確預測為正的,占全部實際為正的比例,TP / (TP+FN)
F1-score:精確率和召回率的調和平均數,2 * precision*recall / (precision+recall)
同時還會給出總體的微平均值,宏平均值和加權平均值。
微平均值:micro average,所有數據結果的平均值
宏平均值:macro average,所有標簽結果的平均值
加權平均值:weighted average,所有標簽結果的加權平均值
在二分類場景中,正標簽的召回率稱為敏感度(sensitivity),負標簽的召回率稱為特異性(specificity)
from sklearn.datasets import load_iris from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import classification_report from sklearn.model_selection import train_test_split # 鳶尾花數據集 iris = load_iris() X = iris.data y = iris.target # [0, 1, 2] 標簽轉換為名稱 ['setosa' 'versicolor' 'virginica'] y_labels = iris.target_names[y] # 數據集拆分為訓練集與測試集 X_train, X_test, y_train, y_test = train_test_split(X, y_labels, test_size=0.2) # 使用訓練集訓練模型 clf = RandomForestClassifier(n_estimators=100) clf.fit(X_train, y_train) # 使用測試集預測結果 y_pred = clf.predict(X_test) # 生成文本型分類報告 print(classification_report(y_test, y_pred))
輸出如下:
precision recall f1-score support setosa 1.00 1.00 1.00 11 versicolor 0.83 0.83 0.83 6 virginica 0.92 0.92 0.92 13 accuracy 0.93 30 macro avg 0.92 0.92 0.92 30 weighted avg 0.93 0.93 0.93 30
生成字典類分類報告
# 生成字典型分類報告 report = classification_report(y_test, y_pred, output_dict=True) for key, value in report["setosa"].items(): print(f"{key:10s}:{value:10.2f}")
參考:https://www.cnblogs.com/jfdwd/p/11046694.html