sklearn.metrics
上篇文章本小白學習了混淆矩陣、ROC曲線和AUC面積,就迫不及待想看看sklearn實現的方法,sklearn官網打開,來幾個比較常用的方法小試身手。
accuracy_score
分類準確率分數是指分類正確的樣本數佔總樣本總數的比例
sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)
normalize:默認爲true,返回正確分類的比例,如果是false,返回正確分類的數目
>>> import numpy as np
>>> from sklearn.metrics import accuracy_score
>>> y_pred = [0, 2, 1, 3]
>>> y_true = [0, 1, 2, 3]
>>> accuracy_score(y_true, y_pred)
0.5
>>> accuracy_score(y_true, y_pred, normalize=False)
2
confusion_matrix
先看個混淆矩陣的例子
(1)貓預測成貓的有92個,貓預測正狗的有7個,貓預測成豬的有1個
(2)狗預測成貓的有10個,狗預測正狗的有88個,狗預測成豬的有2個
(3)豬預測成貓的有1個,豬預測正狗的有9個,豬預測成豬的有90個
可以看出來對角線上的都是預測正確的樣本,其餘爲分類錯誤的樣本
sklearn.metrics.confusion_matrix(y_true, y_pred, labels=None, sample_weight=None)
看個官網的例子
>>> from sklearn.metrics import confusion_matrix
>>> y_true = [2, 0, 2, 2, 0, 1]
>>> y_pred = [0, 0, 2, 2, 0, 2]
>>> confusion_matrix(y_true, y_pred)
array([[2, 0, 0],
[0, 0, 1],
[1, 0, 2]])
把這個例子做到表格裏看下(標籤按sklearn中,數據一般是按大小排序,字母按時字母順序排序)
classification_report
這個方法經常會用到,可以一次性獲得好幾個指標的值
sklearn.metrics.classification_report(y_true, y_pred, labels=None, target_names=None, sample_weight=None, digits=2, output_dict=False)
官網例子
>>> from sklearn.metrics import classification_report
>>> y_true = [0, 1, 2, 2, 2]
>>> y_pred = [0, 0, 2, 2, 1]
>>> target_names = ['class 0', 'class 1', 'class 2']
>>> print(classification_report(y_true, y_pred, target_names=target_names))
precision recall f1-score support
class 0 0.50 1.00 0.67 1
class 1 0.00 0.00 0.00 1
class 2 1.00 0.67 0.80 3
accuracy 0.60 5
macro avg 0.50 0.56 0.49 5
weighted avg 0.70 0.60 0.61 5
precision 精度 TP / (TP+FP)
recall 召回率 TP / (TP+FN)
f1-score F1 2* P*R/(P+R)
support: 樣本數
accuracy:準確率 TP +TN/ (TP+FP+TN+FN)
roc_auc_score
sklearn.metrics.roc_auc_score(y_true, y_score, average=’macro’, sample_weight=None, max_fpr=None)
計算roc曲線下的面積,
>>> import numpy as np
>>> from sklearn.metrics import roc_auc_score
>>> y_true = np.array([0, 0, 1, 1])
>>> y_scores = np.array([0.1, 0.4, 0.35, 0.8])
>>> roc_auc_score(y_true, y_scores)
0.75