回归、分类评价指标

原文链接:https://blog.csdn.net/hfutdog/article/details/88085878

1、混淆矩阵

img

混淆矩阵中的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=2precisionrecall/(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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值