原文链接:https://blog.csdn.net/hfutdog/article/details/88085878
1、混淆矩阵
混淆矩阵中的P表示Positive,即正例或者阳性,N表示Negative,即负例或者阴性。
表中FP表示实际为负但被预测为正的样本数量,TN表示实际为负被预测为负的样本的数量,TP表示实际为正被预测为正的样本数量,FN表示实际为正但被预测为负的样本的数量。
另外,TP+FP=P’表示所有被预测为正的样本数量,同理FN+TN为所有被预测为负的样本数量,TP+FN为实际为正的样本数量,FP+TN为实际为负的样本数量。
2、准确率(准确率是分类正确的样本占总样本个数的比例)
a
c
c
u
r
a
c
y
=
(
T
P
+
T
N
)
/
(
T
P
+
F
P
+
F
N
+
T
N
)
accuracy=(TP+TN)/(TP+FP+FN+TN)
accuracy=(TP+TN)/(TP+FP+FN+TN)
## accuracy
import numpy as np
from sklearn.metrics import accuracy_score
y_pred = [0, 1, 0, 1]
y_true = [0, 1, 1, 1]
print('ACC:',accuracy_score(y_true, y_pred))#0.75
3、精确率(精确率指模型预测为正的样本中实际也为正的样本占被预测为正的样本的比例)
召回率(召回率指实际为正的样本中被预测为正的样本所占实际为正的样本的比例)
F1 score(F1 score是精确率和召回率的调和平均值)
p
r
e
c
i
s
i
o
n
=
T
P
/
(
T
P
+
F
P
)
precision=TP/(TP+FP)
precision=TP/(TP+FP)
r e c a l l = T P / ( T P + F N ) recall=TP/(TP+FN) recall=TP/(TP+FN)
F 1 = 2 ∗ p r e c i s i o n ∗ r e c a l l / ( p r e c i s i o n + r e c a l l ) F1=2*precision*recall/(precision+recall) F1=2∗precision∗recall/(precision+recall)
## Precision,Recall,F1-score
from sklearn import metrics
y_pred = [0,1,0,0,1,1,0,1,0,0]
y_true = [0,1,0,1,1,0,0,1,1,1]
#精确率召回率分子都是预测为正,且实际为正的样本的数目,分母的话,精确率(理解为预测的准不准)所以分母是预测值中,也就是y_pred中,预测为正的样本的数目;召回率分母是实际值中为正的样本的数目
print('Precision',metrics.precision_score(y_true, y_pred))#0.75
print('Recall',metrics.recall_score(y_true, y_pred))#0.5
print('F1-score:',metrics.f1_score(y_true, y_pred))#0.6
4、P-R曲线
P-R曲线就是精确率precision vs 召回率recall 曲线,以recall作为横坐标轴,precision作为纵坐标轴
import numpy as np
from sklearn.metrics import precision_recall_curve
y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])
precision, recall, thresholds = precision_recall_curve( y_true, y_scores)
precision#最后一个值为1
array([0.66666667, 0.5 , 1. , 1. ])
recall#最后一个值为0
array([1. , 0.5, 0.5, 0. ])
thresholds#这个阈值这里为啥只有三个数,且是从小到大排列???
#阈值个数小于等于y_scores的不同值的个数,是从小到大排(这里为啥舍去0.1??)
array([0.35, 0.4 , 0.8 ])
5、
## AUC
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])
print('AUC socre:',roc_auc_score(y_true, y_scores))
6、
import numpy as np
from sklearn import metrics
# MAPE需要自己实现
def mape(y_true, y_pred):
return np.mean(np.abs((y_pred - y_true) / y_true))
y_true = np.array([1.0, 5.0, 4.0, 3.0, 2.0, 5.0, -3.0])
y_pred = np.array([1.0, 4.5, 3.8, 3.2, 3.0, 4.8, -2.2])
# MSE
print('MSE:',metrics.mean_squared_error(y_true, y_pred))
# RMSE
print('RMSE:',np.sqrt(metrics.mean_squared_error(y_true, y_pred)))
# MAE
print('MAE:',metrics.mean_absolute_error(y_true, y_pred))
# MAPE
print('MAPE:',mape(y_true, y_pred))