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

「日拱一码」025 机器学习——评价指标

目录

回归任务评估指标

均方误差(MSE)

均方根误差(RMSE)

平均绝对误差(MAE)

决定系数(R²)

调整的 R²

平均绝对百分比误差(MAPE)

绝对相对误差(ARD)

平均绝对相对误差(AARD)

分类任务评估指标

准确率(Accuracy)

精确率(Precision)

召回率(Recall) 

F1 分数(F1 Score)

ROC 曲线与 AUC

混淆矩阵(Confusion Matrix)

聚类任务评估指标

轮廓系数(Silhouette Coefficient)

调整兰德指数(Adjusted Rand Index, ARI)

其他评估指标

对数损失(Log Loss)

Jaccard 相似系数(Jaccard Similarity)


机器学习评估指标可以根据任务类型(分类、回归、聚类等)进行分类。以下是对常见评估指标的介绍

回归任务评估指标

均方误差(MSE)

预测值与真实值之差的平方的平均值

## 回归任务评价指标
# 1. 均方误差 MSE
from sklearn.metrics import mean_squared_error
y_true = [3.0, 2.5, 4.0, 5.0, 3.5]
y_pred = [2.8, 2.7, 4.2, 4.8, 3.4]
mse = mean_squared_error(y_true, y_pred)
print(f"MSE: {mse:.2f}")  # 0.03

均方根误差(RMSE)

MSE 的平方根,与目标变量单位一致,更易于解释

# 2. 均方根误差 RMSEfrom sklearn.metrics import mean_squared_error
y_true = [3.0, 2.5, 4.0, 5.0, 3.5]
y_pred = [2.8, 2.7, 4.2, 4.8, 3.4]
mse = mean_squared_error(y_true, y_pred)
rmse = mse ** 0.5
print(f"RMSE: {rmse:.2f}")  # 0.18

平均绝对误差(MAE)

预测值与真实值之差的绝对值的平均值

# 3. 平均绝对误差 MAEfrom sklearn.metrics import mean_absolute_error
y_true = [3.0, 2.5, 4.0, 5.0, 3.5]
y_pred = [2.8, 2.7, 4.2, 4.8, 3.4]
mae = mean_absolute_error(y_true, y_pred)
print(f"MAE: {mae:.2f}")  # 0.18

决定系数(R²)

衡量模型对因变量方差的解释程度,取值范围在 0 到 1 之间

# 4. 决定系数 R²from sklearn.metrics import r2_score
y_true = [3.0, 2.5, 4.0, 5.0, 3.5]
y_pred = [2.8, 2.7, 4.2, 4.8, 3.4]
r2 = r2_score(y_true, y_pred)
print(f"R²: {r2:.2f}")  # 0.95

调整的 R²

考虑模型中特征数量对 R² 的影响,用于比较不同复杂度的回归模型

# 5. 调整的 R²from sklearn.metrics import r2_scorey_true = [3.0, 2.5, 4.0, 5.0, 3.5]
y_pred = [2.8, 2.7, 4.2, 4.8, 3.4]
n = len(y_true)
k = 1  # 假设模型中只有一个特征
adjusted_r2 = 1 - (1 - r2) * (n - 1) / (n - k - 1)
print(f"Adjusted R²: {adjusted_r2:.2f}")  # 0.94

平均绝对百分比误差(MAPE)

预测值与真实值之差的绝对值与真实值的比例的平均值

# 6. 平均绝对百分比误差 MAPE
import numpy as npy_true = [3.0, 2.5, 4.0, 5.0, 3.5]
y_pred = [2.8, 2.7, 4.2, 4.8, 3.4]
mape = np.mean(np.abs((np.array(y_true) - np.array(y_pred)) / np.array(y_true))) * 100
print(f"MAPE: {mape:.2f}%")  # 5.30%

绝对相对误差(ARD)

预测值与真实值之差的绝对值与真实值的比值

# 7. 绝对相对误差 ARDimport numpy as npy_true = np.array([3.0, 2.5, 4.0, 5.0, 3.5])
y_pred = np.array([2.8, 2.7, 4.2, 4.8, 3.4])ard = np.abs((y_pred - y_true) / y_true)# 打印每个样本的 ARD
print("ARD (每个样本的绝对相对偏差):")
for i, error in enumerate(ard):print(f"样本 {i+1}: {error:.2f}%")# 样本 1: 0.07%
# 样本 2: 0.08%
# 样本 3: 0.05%
# 样本 4: 0.04%
# 样本 5: 0.03%

平均绝对相对误差(AARD)

所有样本的绝对相对偏差的平均值

# 8. 平均绝对相对误差import numpy as npy_true = np.array([3.0, 2.5, 4.0, 5.0, 3.5])
y_pred = np.array([2.8, 2.7, 4.2, 4.8, 3.4])ard = np.abs((y_pred - y_true) / y_true)aard = np.mean(ard)
print(f"AARD (平均绝对相对偏差): {aard:.2f}%") # 0.05%

分类任务评估指标

准确率(Accuracy)

模型正确预测的样本数占总样本数的比例

## 分类任务评价指标
# 1. 准确率 Accuracyfrom sklearn.metrics import accuracy_score
y_true = [0, 1, 1, 0, 1, 0, 1, 1]
y_pred = [0, 1, 1, 0, 0, 0, 1, 1]
accuracy = accuracy_score(y_true, y_pred)
print(f"Accuracy: {accuracy:.2f}")  # 0.88

精确率(Precision)

模型预测为正的样本中实际为正的比例

# 2. 精确率 Precisionfrom sklearn.metrics import precision_score
y_true = [0, 1, 1, 0, 1, 0, 1, 1]
y_pred = [0, 1, 1, 0, 0, 0, 1, 1]
precision = precision_score(y_true, y_pred)
print(f"Precision: {precision:.2f}")  # 1.00

召回率(Recall) 

实际为正的样本中被模型正确预测为正的比例

# 3. 召回率 Recallfrom sklearn.metrics import recall_score
y_true = [0, 1, 1, 0, 1, 0, 1, 1]
y_pred = [0, 1, 1, 0, 0, 0, 1, 1]
recall = recall_score(y_true, y_pred)
print(f"Recall: {recall:.2f}")  # 0.80

F1 分数(F1 Score)

精确率和召回率的调和平均值,用于综合衡量模型性能

# 4. F1分数from sklearn.metrics import f1_score
y_true = [0, 1, 1, 0, 1, 0, 1, 1]
y_pred = [0, 1, 1, 0, 0, 0, 1, 1]
f1 = f1_score(y_true, y_pred)
print(f"F1 Score: {f1:.2f}")  # 0.89

ROC 曲线与 AUC

ROC 曲线以真正例率(TPR)为纵轴、假正例率(FPR)为横轴,AUC 是 ROC 曲线下的面积,衡量模型的整体性能

# 5. ROC 曲线与 AUCimport numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegressionX, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = LogisticRegression(random_state=42)
model.fit(X_train, y_train)
y_scores = model.predict_proba(X_test)[:, 1]# 计算 FPR 和 TPR
fpr, tpr, thresholds = roc_curve(y_test, y_scores)# 计算 AUC
roc_auc = auc(fpr, tpr)
print(f"AUC: {roc_auc:.4f}")  # 0.9216# 绘制 ROC 曲线
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'ROC curve (area = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate (FPR)')
plt.ylabel('True Positive Rate (TPR)')
plt.title('Receiver Operating Characteristic (ROC)')
plt.legend(loc="lower right")
plt.show()

混淆矩阵(Confusion Matrix)

一个表格,显示模型预测结果与真实标签的对应关系,包括真正例(TP)、假正例(FP)、真负例(TN)和假负例(FN)

# 6. 混淆矩阵from sklearn.metrics import confusion_matrix
y_true = [0, 1, 1, 0, 1, 0, 1, 1]
y_pred = [0, 1, 1, 0, 0, 0, 1, 1]
cm = confusion_matrix(y_true, y_pred)
print("Confusion Matrix:\n", cm)
# [[3 0]
#  [1 4]]

聚类任务评估指标

轮廓系数(Silhouette Coefficient)

衡量聚类效果的好坏,值越接近 1 表示聚类效果越好。a是同一聚类中其他点的平均距离,b是最近聚类中点的平均距离

## 聚类任务评价指标
# 1. 轮廓系数 Silhouette Coefficient
from sklearn.metrics import silhouette_score
from sklearn.cluster import KMeans
import numpy as np# 示例数据
X = np.array([[1, 2], [1, 4], [1, 0],[4, 2], [4, 4], [4, 0]])
kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
labels = kmeans.labels_
silhouette = silhouette_score(X, labels)
print(f"Silhouette Coefficient: {silhouette:.2f}")  # 0.17

调整兰德指数(Adjusted Rand Index, ARI)

衡量聚类结果与真实标签的一致性,值越接近 1 表示一致性越高

# 2. 调整兰德指数 Adjusted Rand Index, ARI
from sklearn.metrics import adjusted_rand_scorey_true = [0, 0, 1, 1]
y_pred = [0, 0, 1, 1]
ari = adjusted_rand_score(y_true, y_pred)
print(f"Adjusted Rand Index: {ari:.2f}")  # 1.00

其他评估指标

对数损失(Log Loss)

衡量分类模型输出概率与真实标签的一致性,值越小越好

## 其他评估指标
# 1. 对数损失 Log Loss
from sklearn.metrics import log_lossy_true = [0, 1, 1, 0]
y_pred_proba = [[0.9, 0.1], [0.1, 0.9], [0.8, 0.2], [0.7, 0.3]]
log_loss_value = log_loss(y_true, y_pred_proba)
print(f"Log Loss: {log_loss_value:.4f}")  # 0.5442

Jaccard 相似系数(Jaccard Similarity)

衡量两个集合的交集与并集的比例,用于评估分类任务中预测和真实标签的相似性

# 2. Jaccard 相似系数
from sklearn.metrics import jaccard_scorey_true = [0, 1, 1, 0, 1, 0, 1, 1]
y_pred = [0, 1, 1, 0, 0, 0, 1, 1]
jaccard = jaccard_score(y_true, y_pred)
print(f"Jaccard Similarity: {jaccard:.2f}")  # 0.80

http://www.dtcms.com/a/275451.html

相关文章:

  • Android音视频探索之旅 | C++层使用OpenGL ES实现音频渲染
  • 单片机学习笔记.根据芯片数据手册写驱动程序(这里使用的是普中开发版,以DS1302为例)
  • 创建Spring Boot项目
  • 解决‘vue‘ 不是内部或外部命令,也不是可运行的程序
  • 前端开发的「设计鸿沟」:为什么我学了CSS却做不出好看的网页?
  • 用YOLOv5系列教程(1)-用YOLOv5轻松实现设备状态智能监控!工业级教程来了
  • 【工具】什么软件识别重复数字?
  • C++结构体的定义与使用
  • 机器学习(ML)、深度学习(DL)、强化学习(RL)关系和区别
  • Redis 基本操作笔记
  • 关于wpf的自适应
  • 基于 Redisson 实现分布式系统下的接口限流
  • [特殊字符] 深入掌握 dsquery:Active Directory 高效查询与安全运维指南
  • sqli-labs靶场通关笔记:第7-8关 布尔盲注
  • Gemini CLI 代理问题解决[API Error: exception TypeError: fetch failed sending request]
  • 【Linux-云原生-笔记】数据库操作基础
  • 【机器学习|学习笔记】详解决策树CART算法,并对比ID3 C4.5和CART算法
  • 系统分析师-计算机系统-计算机系统概述存储系统
  • 内网穿透系列九:开源的网络穿透与组网工具 EasyTier,支持多种数据传输通道,去中心化,兼具高效与安全
  • 【Java八股文总结 — 包学会】(二)计算机网络
  • PyTorch的计算图是什么?为什么绘图前要detach?
  • 【设计模式】单例模式 饿汉式单例与懒汉式单例
  • 人工智能自动化编程:传统软件开发vs AI驱动开发对比分析
  • 云原生技术与应用-生产环境构建高可用Harbor私有镜像仓库
  • ​BRPC核心架构解析:高并发RPC框架的设计哲学
  • Whistle抓包
  • 【设计模式】桥接模式(柄体模式,接口模式)
  • 为什么有些PDF无法复制文字?原理分析与解决方案
  • Oxygen XML Editor 26.0编辑器
  • 闲庭信步使用图像验证平台加速FPGA的开发:第十课——图像gamma矫正的FPGA实现