机器学习模型评估指标

2023-11-07

在机器学习建模过程中,针对不同的问题,需采用不同的模型评估指标。

主要分为两大类:分类、回归。

  • 一、分类
1、混淆矩阵
2、准确率(Accuracy)
3、错误率(Error rate)
4、精确率(Precision)
5、召回率(Recall)
6、F1 score
7、ROC曲线
8、AUC
9、PR曲线
10、对数损失(log_loss)
11、分类指标的文本报告(classification_report)
  • 二、回归
1、平均绝对误差(MAE)
2、均方误差(MSE)
3、均方根误差(RMSE)
4、归一化均方根误差(NRMSE)
5、决定系数(R2)

一、分类模型评估指标

1、混淆矩阵

from sklearn.metrics import confusion_matrix
confusion_matrix(y_true, y_pred)
混淆矩阵是监督学习中的一种可视化工具,主要用于比较分类结果和实例的真实信息。矩阵中的每一行代表实例的 预测类别,每一列代表实例的 真实类别

真正(True Positive , TP):被模型预测为正的正样本。
假正(False Positive , FP):被模型预测为正的负样本。
假负(False Negative , FN):被模型预测为负的正样本。
真负(True Negative , TN):被模型预测为负的负样本。

-------------------------------------------------------------------------------------------

真正率(True Positive Rate,TPR)或灵敏度(sensitivity)
TPR=TP/(TP+FN) ===> 正样本预测结果数 / 正样本实际数

-------------------------------------------------------------------------------------------

真负率(True Negative Rate, TNR)或特指度/特异度(specificity)
TNR = TN /(TN + FP) ===> 负样本预测结果数 / 负样本实际数

-------------------------------------------------------------------------------------------

假正率 (False Positive Rate, FPR)
FPR = FP /(FP + TN) ===> 被预测为正的负样本结果数 /负样本实际数

-------------------------------------------------------------------------------------------

假负率(False Negative Rate , FNR)
FNR = FN /(TP + FN) ===> 被预测为负的正样本结果数 / 正样本实际数

2、准确率(Accuracy)

from sklearn.metrics import accuracy_score
accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)    
#normalize:默认值为True,返回正确分类的比例;如果为False,返回正确分类的样本数
正确率,是最常用的分类性能指标。
Accuracy = (TP+TN)/(TP+FN+FP+TN)
即正确预测的正反例数 /总数

3、错误率(Error rate)

正确率与错误率是分别从正反两方面进行评价的指标,两者数值相加刚好等于1。正确率高,错误率就低;正确率低,错误率就高。
Error rate = (FP+FN)/(TP+FN+FP+TN)
即错误预测的正反例数/总数

4、精确率(Precision)

from sklearn.metrics import precision_score
precision_score(y_true, y_pred, labels=None, pos_label=1, average='binary')
只针对预测正确的正样本,表现为预测为正的里面有多少真正是正的。可理解为查准率。
Precision = TP/(TP+FP)
即正确预测的正例数 /实际正例总数

5、召回率(Recall)

from sklearn.metrics import recall_score
sklearn.metrics.recall_score(y_true, y_pred, labels=None, pos_label=1,average='binary', sample_weight=None)
召回率表现出在实际正样本中,分类器能预测出多少。与真正率相等,可理解为查全率。
Recall = TP/(TP+FN)
即正确预测的正例数 /实际正例总数

6、F1 score

from sklearn.metrics import f1_score 
f1_score(y_true, y_pred, labels=None, pos_label=1, average=’binary’, sample_weight=None)
F1 score 又称 F-Measure,是一个综合评价指标。
F值是精确率和召回率的调和值,更接近于两个数较小的那个,所以精确率和召回率接近时,F值最大。很多推荐系统的评测指标就是用F值的。
2/F1 = 1/Precision + 1/Recall

除了F1分数之外,F2分数和F0.5分数在统计学中也得到大量的应用。其中,F2分数中,召回率的权重高于精确率,而F0.5分数中,精确率的权重高于召回率。

7、ROC曲线

from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt

y_predict = model.predict(x_test)
y_probs = model.predict_proba(x_test)               #模型的预测得分
fpr, tpr, thresholds = roc_curve(y_true,y_score, pos_label=None, sample_weight=None, drop_intermediate=True)
roc_auc = auc(fpr, tpr)                                     #auc为Roc曲线下的面积
#开始画ROC曲线
plt.plot(fpr, tpr, 'b',label='AUC = %0.2f'% roc_auc)
plt.legend(loc='lower right')
plt.plot([0,1],[0,1],'r--')
plt.xlim([-0.1,1.1])
plt.ylim([-0.1,1.1])
plt.xlabel('False Positive Rate')                            #横坐标是fpr
plt.ylabel('True Positive Rate')                             #纵坐标是tpr
plt.title('Receiver operating characteristic example')
plt.show()
ROC曲线,又称 感受性曲线。
X轴:假正率(FPR)(1-TNR)(1-specificity)
Y轴:真正率(TPR)(sensitivity)
ROC曲线离对角线越近,模型的准确率越低。

8、AUC

from sklearn.metrics import auc
auc(fpr, tpr)

from sklearn.metrics import roc_auc_score        #常用
roc_auc_score(y_ture, y_pred)
#直接根据真实值(必须是二值)、预测值(可以是0/1,也可以是proba值)计算出auc值,中间过程的roc计算省略。
AUC(Area Under Curve)被定义为ROC曲线下的面积(ROC的积分),通常大于0.5小于1。随机挑选一个正样本以及一个负样本,分类器判定正样本的值高于负样本的概率就是 AUC 值。AUC值(面积)越大的分类器,性能越好。

9、PR曲线

# 绘制PR曲线
def PR_curve(y,pred):
    pos = np.sum(y == 1)
    neg = np.sum(y == 0)
    pred_sort = np.sort(pred)[::-1]  # 从大到小排序
    index = np.argsort(pred)[::-1]  # 从大到小排序
    y_sort = y[index]
    print(y_sort)

    Pre = []
    Rec = []
    for i, item in enumerate(pred_sort):
        if i == 0:#因为计算precision的时候分母要用到i,当i为0时会出错,所以单独列出
            Pre.append(1)
            Rec.append(0)


        else:
            Pre.append(np.sum((y_sort[:i] == 1)) /i)
            Rec.append(np.sum((y_sort[:i] == 1)) / pos)
    print(Pre)
    print(Rec)
## 画图
    plt.plot(Rec, Pre, 'k')
    # plt.legend(loc='lower right')

    plt.title('Receiver Operating Characteristic')
    plt.plot([(0, 0), (1, 1)], 'r--')
    plt.xlim([-0.01, 1.01])
    plt.ylim([-0.01, 01.01])
    plt.ylabel('Precision')
    plt.xlabel('Recall')
    plt.show()
PR曲线的横坐标是精确率P,纵坐标是召回率R。评价标准和ROC一样,先看平滑不平滑(越平滑越好)。一般来说,在同一测试集,上面的比下面的好(绿线比红线好)。当P和R的值接近时,F1值最大,此时画连接(0,0)和(1,1)的线,线和PRC重合的地方的F1是这条线最大的F1(光滑的情况下),此时的F1对于PRC就好像AUC对于ROC一样。一个数字比一条线更方便调型。

PR曲线下的面积称为AP(Average Precision),表示召回率从0-1的平均精度值。AP可用积分进行计算。
AP面积的不会大于1。PR曲线下的面积越大,模型性能则越好。性能优的模型应是在召回率(R)增长的同时保持精度(P)值都在一个较高的水平,而性能较低的模型往往需要牺牲很多P值才能换来R值的提高。

10、对数损失 log_loss

from sklearn.metrics import log_loss
log_loss(y_true,y_pred)

11、classification_report 分类指标的文本报告

classification_report函数用于显示主要分类指标的文本报告.在报告中显示每个类的精确度,召回率,F1值等信息。

二、回归模型评估指标

1、MAE(mean absolute error)平均绝对误差

from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_true, y_pred, sample_weight=None, multioutput='uniform_average')

2、MSE(mean squared error)均方误差

from sklearn.metrics import mean_squared_error
mean_squared_error(y_true, y_pred, sample_weight=None, multioutput='uniform_average')

3、RMSE(root mean squared error)均方根误差

from sklearn.metrics import mean_squared_error np.sqrt(mean_squared_error(y_test,y_predict))

4、NRMSE (normalized root mean squared error)归一化均方根误差

5、R2 决定系数

from sklearn.metrics import r2_score 
r2_score(y_true, y_pred, sample_weight=None, multioutput='uniform_average')

R2 是多元回归中的回归平方和占总平方和的比例,它是度量多元回归方程中拟合程度的一个统计量,反映了在因变量y的变差中被估计的回归方程所解释的比例。
R2 越接近1,表明回归平方和占总平方和的比例越大,回归线与各观测点越接近,用x的变化来解释y值变差的部分就越多,回归的拟合程度就越好。

注:以上为常用指标,还有部分模型评估指标未赘述······

文章来源:机器学习模型评估指标 - 知乎

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习模型评估指标 的相关文章

随机推荐

  • K8s为什么需要calico? calico 原理深入理解.

    文章目录 为什么需要calico 网络插件 千千万 为何k8s要用calico calico的架构 calico Pod 跨node通信 tunl0 的作用 为什么所有pod的默认网关都是 169 254 1 1 什么是ARP 代理 jks
  • Springboot使用@Data注解,不用写get/set方法

    Springboot使用 Data注解 不用写get set方法 1 引入依赖
  • 关于项目跟进

    为什么写这个 因为之前自己同时在跟进几个项目 还在做新需求 没有忙过来 自己觉得自己项目那块没有抽出时间做好 所以列下看看哪些流程 是自己需要注意的 这都谈不上项目管理 只能说项目跟进 距离项目经理更是差得远 总之后面会补上这块的知识 激励
  • Ubuntu下安装VS Code以及C/C++插件(PS工作目录的创建)

    参考 Visual Studio Code Ubuntu下安装 以及C C 插件大全 作者 一只青木呀 发布时间 2020 08 05 11 55 53 网址 https blog csdn net weixin 45309916 arti
  • 8.ElasticSearch系列之索引模板与索引

    1 索引模板创建索引 可以通过kibana工具进行创建索引模板 也可以自定义语句 如创建poi索引模板 POST index template poi index patterns poi template settings index n
  • 【Spring】Spring依赖注入与控制反转理解

    Spring是一个庞大的框架 封装了很多成熟的功能 能够让我们无需重复造轮子 其次 它使用IOC进行依赖管理 利用JAVA的反射机制 将实例的初始化交给Spring Spring可以通过配置文件管理实例 我们就不用自己初始化实例啦 有人会问
  • 2021-01-13

    Jacinto 7处理器设备和子系统概述 上 本文概述TI下一代汽车处理器系列的主要架构特征和优势 这张幻灯片列出了Jacinto 7 SoC的不同方面 我将在后续章节中介绍这些内容 这里讨论的特性一般适用于Jacinto 7系列中的所有派
  • [学习日志]伤害生效由谁来决定?

    伤害生效由谁来决定 普通攻击 使用动画事件 用动画事件是最普遍的一种方式 假如我的伤害生效是在动画结束之后呢 攻击动画片段只有2秒时长 要在3秒才对敌方造成伤害 那么动画事件就做不到了 计时器 把伤害生效是点交给计时器去操作 攻击的时候开始
  • 网络拓扑的分类

    一 按网络所覆盖的地理范围分类 1 局域网 LAN 局域网Local Area Network 简称 LAN 是一种私有网络 一般在一座建筑物内或建筑物附近 比如家庭 办公室或工厂 局域网络被广泛用来连接个人计算机和消费类电子设备 通过网络
  • swift 之AVFoundation自定义相机界面拍照、录像、保存到相册、合成视频

    1 自定义相机拍照 自定义相机 1 前置和后置摄像头 typedef NS ENUM NSInteger AVCaptureDevicePosition AVCaptureDevicePositionUnspecified 0 AVCapt
  • CVPR 2020

    Editing in Style Uncovering the Local Semantics of GANs 作者 Edo Collins Sabine S sstrunk School of Computer and Communica
  • 笔试题目1

    腾讯笔试 2 假设函数f1的时间复杂度O n 那么f1 f1的时间复杂度为 A O n B O n n C O n log n D 以上都不对 这个题目我的思路是A 讨论后答案应该是D 因为f1的返回值不确定 如果是个数组当然复杂度就不同了
  • linux基础——vim及bash的使用

    vim vim介绍 vim是linux里的文本编辑工具 是vi的升级版的软件 是程序员文本编辑器 用来写程序的工具 安装 yum install vim y 用法 命令模式 yy 复制当前行 5yy 向下复制5行 copy dd 删除 剪切
  • 使用vue里面el-upload,照片反显后,然后再上传照片,发现上传的照片只要最新上传的,之前反显的照片没有了,解决办法如下

    第一步 首先先将照片反显存到两个数组里面如图 第二步 照片上传成功回调里面就在查看添加照片这个数组接着push 就可以了 切记先反显的时候把之前数据添加到里面
  • R Plot添加中文及其他字体【showtext】

    文章目录 前言 R Packages showtext 安装 简单示例 加载字体 更多详见 前言 之前 一个群里的群友 想要在它画的图上加入中文 保存为PDF之后 中文字符也不变成乱码 当时随手推荐了一个R package showtext
  • Linux的shell编程(四)

    六 bash程序的调试 在编程过程中难免会出错 有的时候 调试程序比编写程序花费的时间还要多 shell程序同样如此 shell程序的调试主要是利用bash命令解释程序的选择项 调用bash的形式是 bash 选择项shell程序文件名 几
  • Conda安装失败:Solving environment: failed with initial frozen solve. Retrying with flexible solve.

    Conda安装包安装包出现错误 比如 conda install imutils 出现如下错误 Collecting package metadata current repodata json done Solving environme
  • linux qt通过ps获取进程

    在linux 当中 通过qt 程序获取进程的名称 来对后续进行操作 QProcess m process m process start ps ef if m process waitForFinished const QByteArray
  • 按钮卡片特效代码集锦

    css最好看最全的按钮卡片样式 动画效果大全 纯css样式打造的20款按钮特效和11款卡片合集 喜欢的可以收藏 备开发时使用 按钮代码
  • 机器学习模型评估指标

    在机器学习建模过程中 针对不同的问题 需采用不同的模型评估指标 主要分为两大类 分类 回归 一 分类 1 混淆矩阵 2 准确率 Accuracy 3 错误率 Error rate 4 精确率 Precision 5 召回率 Recall 6