机器学习评估标准:回归与分类

一、回归模型的评估指标

y_true:验证集的实际类别;y_pred:验证集的预测类别

1. 绝对误差

绝对误差指预测点和真实点之间的距离之差的绝对值的平均值;

#绝对误差的实现
from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_true,y_pred)

2. 均方误差

均方误差即预测点和实际点之间的距离之差的平方和的均值;

#均方误差的实现
from sklearn.metrics import mean_squared_error
mean_squared_error(y_true,y_pred)

二、分类模型的评估指标

分类模型的不同评估指标的侧重点不同,彼此可能还会存在冲突。
TP:预测为正实际为正           TN:预测为负,实际为负
FP:预测为正实际为负           FN:预测为负,实际为正
T/F:表示预测结果是否正确       P/N:表示预测结果是正或负样本

1. 准确率

衡量模型对于数据集中样本预测正确的比例,即预测正确的样本数量与参加预测的全部样本数量之比;

a c c u r a c y = 预测正确的样本总数 参 加 预 测 的 样 本 总 数 量 accuracy=\frac{\text{预测正确的样本总数}}{参加预测的样本总数量} accuracy=预测正确的样本总数

#准确率的实现
from sklearn.metrics import accuracy_score
Accuracy=accuracy_score(y_true,y_pred,normalize=True)
#normalize:默认值为True,返回正确分类的比例;若为False,则返回正确分类的样本数

2. 精度

所有预测为正例的样本(TP+FP)中真正为正例的样本(TP)的比率;就是你找到的信息中,真正是想要的有多少的衡量量,又称“查准率”
p r e c i s i o n = T P T P + F P precision=\frac{TP}{TP+FP} precision=TP+FPTP

#精度的实现
from sklearn.metrics import precision_score
Precision=precision_score(y_true,y_pred,average=None)
#评价值的平均值的计算方式;可以接收[None, 'binary' (default), 'micro','macro', 'samples', 'weighted']对于多类/多标签目标需要此参数
#None:直接返回各个类别的精度列表;macro:直接计算各个类别的精度值的平均;weight:可通过对每个类别的score进行加权求得;micro:多标签问题中,大类被忽略

3. 召回率(在犯罪检索等活动中较为重要)

所有为正例的样本(TP+FN)中真的正例(TP)的比率;用于评测是否把样本中的所有真的正例全部找出来,又称“查全率”
r e c a l l = T P T P + F N recall=\frac{TP}{TP+FN} recall=TP+FNTP

#召回率的实现
from sklearn.metrics import recall_score
Recall=recall_score(y_true,y_pred,average=None)
#average的参数含义与precision_score相同

4. F1值

一般来说,精度与召回率是一对矛盾的值;当recall=precision时,是一个平衡点,是另一种度量方式,即为F1值(即精度和召回率的调和平均数)
对于P-R曲线,如果一个机器学习的曲线被另一个机器学习的曲线完全包住,则后者优于前者。
F 1 = 2 × P × R P + R F1=\frac{2×P×R}{P+R} F1=P+R2×P×R

#F1值的实现
from sklearn.metrics import f1_score
F1=f1_score(y_true,y_pred,pos_label=1,average=None)        #average必需

对于以上的三个评价标准,可以使用一个整体使用函数:classification_report进行输出

from sklearn.metrics import classification_report
#target_names=['class 0','class 1','class 2']
classification_report(y_true,y_pred,target_names=None)
#target_names是字符列表形式,可以用来指定输出类别的名字

5. ROC曲线

很多学习器对测试样本产生一个实数值或是概率,然后将这个预测值和一个分类阈值进行比较,大于阈值取1,小于阈值取0。
我们根据学习器预测结果对样例进行排序,按此顺序逐个把样本作为正例预测,每次计算(纵轴:真正率TP;横轴:假正率FP),并绘图即可得到ROC曲线。并且如果一个机器学习的曲线被另一个机器学习的曲线完全包住,则前者优于后者。(如果两条ROC曲线相交,那么就要通过求解曲线围成的面积AUC)
步骤:

  1. 得到全部样本的概率输出(pred),根据每个测试样本属于正例的概率从大到小排序;
  2. 从高到低依次将pred作为阈值(threshold),如果预测概率大于等于阈值,则为正样本;否则为负样本;
  3. 每选取一次不同的阈值,就可以得到一组FP和TP,即ROC曲线上的一点,进而得到ROC曲线。
#ROC曲线的实现
from sklearn import metrics
metrics.roc_curve(y_true,y_pred,pos_label=1)
#pos_label是指正例的类别

6. AUC

ROC曲线和坐标轴围成的面积;

#AUC的实现
from sklearn.metrics import roc_auc_score
print roc_auc_score(y_true,y_pred_prob)
#y_true是验证集样本的实际类别;y_pred_prob是验证集样本的预测概率值

7. 混淆矩阵

评估分类模型好坏的形象化展示工具;如果混淆矩阵中非对角线元素全为0,则表示是一个完美的分类器。

#混淆矩阵的实现
from sklearn.metrics import confusion_matrix
print confusion_matrix(y_true,y_pred,labels=true)
#label字符类别形式,指定各个类别显示的名称,默认为None

在这里插入图片描述

混淆矩阵:第一行是实际值为0的这些值中,4个预测值为0,1个预测值是1,0个预测值是2;
第二行是实际值为1的这些值中,0个预测值为0,2个预测值是1,0个预测值是2;
第三行是实际值为2的这些值中,0个预测值为0,0个预测值是1,2个预测值是2;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值