sklearn.metrics学习

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章