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