当前位置: 首页 > web >正文

机器学习任务的常用评估指标

不同的机器学习任务(如回归、分类、聚类等)有不同的常用评估指标,以下为你详细介绍:

回归任务评估指标

1. 平均绝对误差(Mean Absolute Error,MAE)

  • 定义:预测值与真实值之间绝对误差的平均值。
  • 公式 M A E = 1 n ∑ i = 1 n ∣ y i − y ^ i ∣ MAE=\frac{1}{n}\sum_{i = 1}^{n}\vert y_i-\hat{y}_i\vert MAE=n1i=1nyiy^i,其中 y i y_i yi是真实值, y ^ i \hat{y}_i y^i是预测值, n n n是样本数量。
  • 特点:MAE 对所有误差的处理是平等的,不会像均方误差(MSE)那样放大较大的误差,因此对异常值相对不敏感。
  • 代码示例
from sklearn.metrics import mean_absolute_error
import numpy as npy_true = np.array([3, -0.5, 2, 7])
y_pred = np.array([2.5, 0.0, 2, 8])
mae = mean_absolute_error(y_true, y_pred)
print(f"平均绝对误差: {mae}")

2. 均方根误差(Root Mean Squared Error,RMSE)

  • 定义:MSE 的平方根,它衡量了预测值与真实值之间的平均偏差程度。
  • 公式 R M S E = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 RMSE = \sqrt{\frac{1}{n}\sum_{i = 1}^{n}(y_i - \hat{y}_i)^2} RMSE=n1i=1n(yiy^i)2
  • 特点:RMSE 与原始数据具有相同的单位,便于理解和解释,同时由于对误差进行了平方运算,会放大较大的误差,因此对异常值比较敏感。
  • 代码示例
from sklearn.metrics import mean_squared_error
import numpy as npy_true = np.array([3, -0.5, 2, 7])
y_pred = np.array([2.5, 0.0, 2, 8])
rmse = np.sqrt(mean_squared_error(y_true, y_pred))
print(f"均方根误差: {rmse}")

3. 决定系数(Coefficient of Determination, R 2 R^2 R2

  • 定义:表示模型对数据的拟合程度,取值范围为 ( − ∞ , 1 ] (-\infty, 1] (,1] R 2 R^2 R2越接近 1,说明模型对数据的拟合效果越好。
  • 公式 R 2 = 1 − ∑ i = 1 n ( y i − y ^ i ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 R^2 = 1-\frac{\sum_{i = 1}^{n}(y_i-\hat{y}_i)^2}{\sum_{i = 1}^{n}(y_i-\bar{y})^2} R2=1i=1n(yiyˉ)2i=1n(yiy^i)2,其中 y ˉ \bar{y} yˉ是真实值的平均值。
  • 特点 R 2 R^2 R2可以直观地反映模型的优劣,并且考虑了数据的整体变化情况,但当模型中增加无关特征时, R 2 R^2 R2可能会虚高。
  • 代码示例
from sklearn.metrics import r2_score
import numpy as npy_true = np.array([3, -0.5, 2, 7])
y_pred = np.array([2.5, 0.0, 2, 8])
r2 = r2_score(y_true, y_pred)
print(f"决定系数: {r2}")

回归任务评估指标对比

graph TD
A[真实值] --> B[预测值]
B --> C{误差计算}
C --> D[MAE: 绝对误差平均]
C --> E[MSE: 平方误差平均]
E --> F[RMSE: 平方根]
C --> G[R²: 方差解释比例]
指标公式特点异常值敏感度
MAE 1 n ∑ ∣ y i − y ^ i ∣ \frac{1}{n}\sum \vert y_i-\hat{y}_i\vert n1yiy^i直观易解释,单位一致
RMSE 1 n ∑ ( y i − y ^ i ) 2 \sqrt{\frac{1}{n}\sum (y_i-\hat{y}_i)^2} n1(yiy^i)2 放大大误差,同量纲
1 − S S r e s S S t o t 1-\frac{SS_{res}}{SS_{tot}} 1SStotSSres无量纲,可跨数据集比较

分类任务评估指标

1. 准确率(Accuracy)

  • 定义:分类正确的样本数占总样本数的比例。
  • 公式 A c c u r a c y = T P + T N T P + T N + F P + F N Accuracy=\frac{TP + TN}{TP+TN+FP+FN} Accuracy=TP+TN+FP+FNTP+TN,其中 T P TP TP(真正例)是实际为正类且预测为正类的样本数, T N TN TN(真反例)是实际为反类且预测为反类的样本数, F P FP FP(假正例)是实际为反类但预测为正类的样本数, F N FN FN(假反例)是实际为正类但预测为反类的样本数。
  • 特点:简单直观,但在类别不平衡的情况下,准确率可能不能很好地反映模型的性能。
  • 代码示例
from sklearn.metrics import accuracy_score
import numpy as npy_true = np.array([0, 1, 0, 1])
y_pred = np.array([1, 1, 0, 1])
accuracy = accuracy_score(y_true, y_pred)
print(f"准确率: {accuracy}")

2. 精确率(Precision)

  • 定义:预测为正类的样本中,实际为正类的比例。
  • 公式 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
import numpy as npy_true = np.array([0, 1, 0, 1])
y_pred = np.array([1, 1, 0, 1])
precision = precision_score(y_true, y_pred)
print(f"精确率: {precision}")

3. 召回率(Recall)

  • 定义:实际为正类的样本中,被预测为正类的比例。
  • 公式 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
import numpy as npy_true = np.array([0, 1, 0, 1])
y_pred = np.array([1, 1, 0, 1])
recall = recall_score(y_true, y_pred)
print(f"召回率: {recall}")

4. F1值(F1 - Score)

  • 定义:精确率和召回率的调和平均数,用于综合衡量模型的性能。
  • 公式 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\times\frac{Precision\times Recall}{Precision + Recall} F1=2×Precision+RecallPrecision×Recall
  • 特点:F1 值在精确率和召回率之间取得了平衡,当两者都较高时,F1 值也会较高。
  • 代码示例
from sklearn.metrics import f1_score
import numpy as npy_true = np.array([0, 1, 0, 1])
y_pred = np.array([1, 1, 0, 1])
f1 = f1_score(y_true, y_pred)
print(f"F1值: {f1}")

分类指标对比表

指标公式关注重点适用场景
准确率 ( T P + T N ) / T o t a l (TP+TN)/Total (TP+TN)/Total整体正确率类别平衡
精确率 T P / ( T P + F P ) TP/(TP+FP) TP/(TP+FP)预测正类的准确性减少误报(如垃圾邮件检测)
召回率 T P / ( T P + F N ) TP/(TP+FN) TP/(TP+FN)正类样本的覆盖率疾病筛查(避免漏诊)
F1值 2 ∗ P ∗ R P + R 2*\frac{P*R}{P+R} 2P+RPR精确率与召回率的平衡类别不平衡

聚类任务评估指标

1. 轮廓系数(Silhouette Coefficient)

  • 定义:衡量每个样本与其所在簇的紧密程度以及与其他簇的分离程度,取值范围为 [ − 1 , 1 ] [-1, 1] [1,1]。值越接近 1 表示样本聚类效果越好,越接近 -1 表示样本可能被错误地分配到了其他簇。
  • 公式 s ( i ) = b ( i ) − a ( i ) max ⁡ { a ( i ) , b ( i ) } s(i)=\frac{b(i)-a(i)}{\max\{a(i),b(i)\}} s(i)=max{a(i),b(i)}b(i)a(i),其中 a ( i ) a(i) a(i)是样本 i i i到同一簇内其他样本的平均距离, b ( i ) b(i) b(i)是样本 i i i到其他最近簇中所有样本的平均距离。
  • 特点:可以在不知道真实标签的情况下评估聚类效果,但计算复杂度较高。
  • 代码示例
from sklearn.metrics import silhouette_score
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeansX, _ = make_blobs(n_samples=500, centers=4, random_state=42)
kmeans = KMeans(n_clusters=4, random_state=42).fit(X)
labels = kmeans.labels_
silhouette_avg = silhouette_score(X, labels)
print(f"轮廓系数: {silhouette_avg}")

2. 兰德指数(Rand Index)

  • 定义:当已知真实标签时,用于衡量聚类结果与真实标签的一致性。取值范围为 [ 0 , 1 ] [0, 1] [0,1],值越接近 1 表示聚类结果与真实标签越一致。
  • 公式 R I = T P + T N T P + T N + F P + F N RI=\frac{TP + TN}{TP+TN+FP+FN} RI=TP+TN+FP+FNTP+TN(这里的 T P TP TP T N TN TN F P FP FP F N FN FN是基于聚类结果和真实标签的组合情况计算得到的)
  • 特点:考虑了所有样本对的分类情况,能够全面地评估聚类结果的准确性。
  • 代码示例
from sklearn.metrics import rand_score
import numpy as nplabels_true = np.array([0, 0, 1, 1])
labels_pred = np.array([0, 0, 1, 1])
ri = rand_score(labels_true, labels_pred)
print(f"兰德指数: {ri}")

聚类指标对比表

指标公式是否需要标签取值范围特点
轮廓系数 b ( i ) − a ( i ) max ⁡ ( a ( i ) , b ( i ) ) \frac{b(i)-a(i)}{\max(a(i),b(i))} max(a(i),b(i))b(i)a(i)[-1, 1]评估簇内紧密度与簇间分离度
兰德指数 T P + T N T P + T N + F P + F N \frac{TP+TN}{TP+TN+FP+FN} TP+TN+FP+FNTP+TN[0, 1]衡量与真实标签的一致性

核心指标速查表

任务类型首选指标次要指标使用建议
回归预测RMSER² + MAE优先报告RMSE,补充R²解释方差
二分类F1值精确率 + 召回率类别不平衡时用F1,需控制误报时看精确率
多分类准确率宏平均F1类别平衡时用准确率,不平衡时用宏平均F1
聚类分析轮廓系数兰德指数(带标签)无监督场景用轮廓系数,有标签时用兰德指数

http://www.xdnf.cn/news/6299.html

相关文章:

  • JVM内存模型
  • 前端面试题:vue3 为什么不需要时间分片?
  • Linux程序设计--期末复习
  • 企业网络新选择:软件定义架构下的MPLS
  • 【Docker】Windows10环境下安装DockerDesktop
  • TCP 三次握手建立连接详解
  • C2S-Scale:Cell2Sentence v2
  • 在星河社区学习PARL使用强化学习来训练AI
  • C#高级编程:IO和序列化
  • linux内核主要由哪五个模块构成?
  • ultralytics 中的 RT-DETR 之 模型结构解析
  • 【python机器学习】Day 25 异常处理
  • 吴恩达机器学习笔记:多变量梯度下降
  • Permission Denied Error on Port 6277 When Starting MCP
  • 彻底解决QT5 中文编译不过问题
  • HCIP-Datacom Core Technology V1.0_1认识网络设备
  • 【unity游戏开发——编辑器扩展】EditorWindow自定义unity窗口拓展
  • AI-02a5a6.神经网络-与学习相关的技巧-批量归一化
  • Spring Boot拦截器详解:原理、实现与应用场景
  • centos7忘记root密码后使用单用户模式重置
  • 算法备案如何判断自己的产品是否具备舆论属性
  • LeetCode100.5 盛最多水的容器
  • Linux系统之----基础IO
  • 亚马逊电商广告革命:当AI推荐沦为红海陷阱,中国卖家如何破局?
  • AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年5月14日第77弹
  • 最短路与拓扑(2)
  • vim启动的时候,执行gg
  • 现场维护三重四极杆质谱系统和四极杆清洗方法,确保所有目标化合物的可靠性检测
  • 牛顿均差知识
  • 写作--简单句基础练习