混淆矩阵
TP(True Positive):【真的正例】,模型预测为正例,实际是正例【预测正确】
核酸结果显示他感染了病毒,实际上他确实感染了病毒。
FP(False Positive):【假的正例】,模型预测为正例,实际是反例
核酸结果显示他感染了病毒,但是,实际上他**并没有**感染病毒。
FN(False Negative):【假的反例】,模型预测为反例,实际是正例
核酸结果显示他没感染病毒,但是,实际上他确实感染了病毒。
TN(True Negative):【真的反例】,模型预测为反例,实际是反例【预测正确】
核酸结果显示他没感染病毒,实际上他真的没有感染病毒。
>>> from sklearn.metrics import confusion_matrix
>>> y_true = ["cat", "dog", "cat", "cat"]
>>> y_pred = ["cat", "cat", "dog", "dog"]
>>> confusion_matrix(y_true, y_pred, labels=["dog","cat"])
array([[0, 1],
[2, 1]])
accuracy_score(acc)
-
准确率,直接比对实际值和预测值,看有多少预测正确
-
使用方法:
sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True)
- normalize的默认值为True,返回正确分类的比例(百分比)
- normalize如果为False,返回正确分类的样本数(数量)
>>> from sklearn.metrics import accuracy_score
>>> data_label = [0, 1, 2, 3] # 真实值
>>> predict = [1, 1, 2, 3] # 预测值
>>> accuracy_score(y_true = data_label, y_pred = predict) # 0.75
0.75
>>> accuracy_score(y_true = data_label, y_pred = predict, normalize=False) #3
3
Precision(查准率)
表示在模型识别为正类的样本中,真正为正类的样本所占的比例。一般情况下,查准率越高,说明模型的效果越好。
Precision = T P T P + F P \text{Precision} = \frac{TP}{TP+FP} Precision=TP+FPTP
Recall(查全率)
模型正确识别出为正类的样本的数量占总的正类样本数量的比值。
一般情况下,Recall越高,说明有更多的正类样本被模型预测正确,模型的效果越好。
Recall = T P T P + F N \text{Recall} = \frac{TP}{TP+FN} Recall=TP+FNTP
auc和roc曲线
roc曲线:横轴FP,纵轴TP,连接成线
fpr, tpr, thresholds=sklearn.metrics.roc_curve(y_true,y_score,pos_label=None,sample_weight=None,drop_intermediate=True)
y_true: 即真实标签
y_score : 即模型的预测结果【概率形式】
pos_label:指定正类是哪个
>>> import numpy as np
>>> from sklearn import metrics
>>> import matplotlib.pyplot as plt
>>> from sklearn.metrics import auc
>>> y = np.array(['+','+','-','-']) #y为数据的真实标签
>>> scores = np.array([0.1, 0.2, 0.35, 0.8]) #scores为分类其预测的得分
>>> fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label='+') #得到fpr,tpr, thresholds
>>> fpr, tpr, thresholds
(array([0. , 0.5, 1. , 1. ]),
array([0., 0., 0., 1.]),
array([1.8 , 0.8 , 0.35, 0.1 ]))
thresholds: 阈值,score ≥ \geq ≥阈值就是正类
fpr:false postive rate
tpr:true postive rate
>>> plt.plot(fpr,tpr,marker = 'o')
>>> plt.show() # 画图
>>> auc(fpr, tpr) # 计算auc
0.67777777