【大数据】机器学习-----模型的评估方法

一、评估方法

  • 留出法(Holdout Method)
    • 将数据集划分为训练集和测试集两部分,通常按照一定比例(如 70% 训练集,30% 测试集)。训练集用于训练模型,测试集用于评估模型性能。
    • 优点:简单易行。
    • 缺点:结果依赖于数据集的划分方式,不同的划分可能导致不同的评估结果。
  • 交叉验证法(Cross Validation)
    • 最常见的是 k 折交叉验证。将数据集分成 k 个大小相似的互斥子集,每次用 k-1 个子集作为训练集,余下的一个作为测试集,进行 k 次训练和测试,最终将 k 次的结果取平均值。
    • 优点:能更充分利用数据,结果相对稳定,能降低因数据划分导致的偏差。
    • 缺点:计算开销较大,尤其是对于大数据集和复杂模型。
    • 例如,5 折交叉验证就是将数据集分成 5 份,每次取 4 份训练,1 份测试,重复 5 次。
  • 自助法(Bootstrap Method)
    • 从原始数据集中有放回地抽样产生多个新的训练集,每次抽样得到的样本作为一个训练集,未被抽到的样本作为测试集。
    • 优点:在数据集较小、难以有效划分训练集和测试集时很有用。
    • 缺点:改变了初始数据集的分布,会引入一定的偏差。

二、性能度量

  • 分类问题的性能度量
    • 准确率(Accuracy):预测正确的样本数占总样本数的比例,公式为 Accuracy = (TP + TN) / (TP + TN + FP + FN),其中 TP 是真正例,TN 是真反例,FP 是假正例,FN 是假反例。
    • 精确率(Precision):预测为正例的样本中真正例的比例,公式为 Precision = TP / (TP + FP)
    • 召回率(Recall):真正例中被预测为正例的比例,公式为 Recall = TP / (TP + FN)
    • F1 分数:精确率和召回率的调和平均值,公式为 F1 = 2 * (Precision * Recall) / (Precision + Recall)
    • ROC 曲线和 AUC 值
      • ROC 曲线以假正例率(FPR)为横坐标,真正例率(TPR)为纵坐标绘制,通过调整分类阈值得到不同的点连成曲线。
      • AUC 值是 ROC 曲线下的面积,范围在 0 到 1 之间,值越大表示模型性能越好。
  • 回归问题的性能度量
    • 均方误差(MSE):预测值与真实值差的平方的平均值,公式为 MSE = (1/n) * Σ(y - y_pred)^2,其中 y 是真实值,y_pred 是预测值。
    • 平均绝对误差(MAE):预测值与真实值差的绝对值的平均值,公式为 MAE = (1/n) * Σ|y - y_pred|
    • 均方根误差(RMSE):MSE 的平方根,对较大误差更敏感,公式为 RMSE = sqrt(MSE)

三、比较检验

  • 假设检验
    • 用于比较不同模型性能差异是否显著。
    • 例如,使用 t 检验或 McNemar 检验。
    • t 检验通常用于比较两个模型在同一数据集上的性能是否有显著差异,基于样本均值和标准差。
    • McNemar 检验用于比较两种分类算法在同一测试集上的差异,主要关注两种算法的分类结果不一致的部分。
  • 交叉验证 t 检验
    • 结合了交叉验证和 t 检验,用于比较多个模型的性能。
    • 对于两个模型,分别进行多次交叉验证,得到多个性能度量,然后对这些度量进行 t 检验,以判断它们是否有显著差异。

四、偏差与方差

  • 偏差(Bias)
    • 反映了模型预测值与真实值的期望之间的差异,描述了模型的准确性。
    • 高偏差意味着模型过于简单,可能导致欠拟合,不能很好地拟合训练数据,也不能很好地泛化到新数据。
  • 方差(Variance)
    • 反映了模型在不同训练集上的预测值的变化程度,描述了模型的稳定性。
    • 高方差意味着模型对训练数据的微小变化非常敏感,可能导致过拟合,在训练集上表现好,但在新数据上表现差。
  • 偏差-方差权衡
    • 模型的泛化误差可以分解为偏差、方差和噪声。通常,简单模型偏差大、方差小,复杂模型偏差小、方差大,需要找到一个平衡,使泛化误差最小。
      在这里插入图片描述

公式

一、分类问题的性能度量公式

  • 准确率(Accuracy)

    • 公式: Accuracy = T P + T N T P + T N + F P + F N \text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN} Accuracy=TP+TN+FP+FNTP+TN
    • 解释:
      • T P TP TP(True Positive):真正例,即实际为正类且被预测为正类的样本数量。
      • T N TN TN(True Negative):真反例,即实际为反类且被预测为反类的样本数量。
      • F P FP FP(False Positive):假正例,即实际为反类但被预测为正类的样本数量。
      • F N FN FN(False Negative):假反例,即实际为正类但被预测为反类的样本数量。
      • 该公式计算的是预测正确的样本数(包括正确预测为正类和正确预测为反类)在总样本数中的占比,反映了模型预测的整体准确性。
  • 精确率(Precision)

    • 公式: Precision = T P T P + F P \text{Precision} = \frac{TP}{TP + FP} Precision=TP+FPTP
    • 解释:
      • 它衡量的是在所有被预测为正类的样本中,真正为正类的样本所占的比例。精确率高表示在预测为正类的样本中,误判为正类的情况较少,侧重于预测结果为正类的准确性。
  • 召回率(Recall)

    • 公式: Recall = T P T P + F N \text{Recall} = \frac{TP}{TP + FN} Recall=TP+FNTP
    • 解释:
      • 召回率表示在所有实际为正类的样本中,被正确预测为正类的样本所占的比例。召回率高表示实际正类被模型成功找出的比例高,侧重于对正类的查全能力,避免遗漏正类样本。
  • F1 分数(F1 Score)

    • 公式: F1 = 2 × Precision × Recall Precision + Recall \text{F1} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} F1=2×Precision+RecallPrecision×Recall
    • 解释:
      • F1 分数是精确率和召回率的调和平均值,是一个综合考虑精确率和召回率的指标,用于平衡精确率和召回率之间的关系。当精确率和召回率都很高时,F1 分数会比较高,避免了单独考虑精确率或召回率的片面性。
  • ROC 曲线和 AUC 值

    • ROC 曲线(Receiver Operating Characteristic Curve)
      • 绘制方式:通过调整分类器的阈值,得到一系列的真阳性率( T P R TPR TPR)和假阳性率( F P R FPR FPR),以 F P R FPR FPR 为横坐标, T P R TPR TPR 为纵坐标绘制曲线。
      • T P R = T P T P + F N TPR = \frac{TP}{TP + FN} TPR=TP+FNTP,表示在所有实际正类中被正确预测为正类的比例。
      • F P R = F P T N + F P FPR = \frac{FP}{TN + FP} FPR=TN+FPFP,表示在所有实际反类中被错误预测为正类的比例。
    • AUC 值(Area Under the Curve)
      • 解释:是 ROC 曲线下的面积,范围在 0 到 1 之间。
      • AUC 值越大,说明分类器在不同阈值下的性能越好,能够更好地区分正类和反类,当 AUC = 1 时表示完美分类器,AUC = 0.5 表示随机分类器。

二、回归问题的性能度量公式

  • 均方误差(MSE - Mean Squared Error)

    • 公式: MSE = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 MSE=n1i=1n(yiy^i)2
    • 解释:
      • y i y_i yi 是第 i i i 个样本的真实值, y ^ i \hat{y}_i y^i 是第 i i i 个样本的预测值, n n n 是样本数量。
      • MSE 计算的是预测值与真实值差的平方的平均值,对较大误差的惩罚较大,因为误差是平方项,会放大较大误差的影响,常用于评估回归模型的性能。
  • 平均绝对误差(MAE - Mean Absolute Error)

    • 公式: MAE = 1 n ∑ i = 1 n ∣ y i − y ^ i ∣ \text{MAE} = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i| MAE=n1i=1nyiy^i
    • 解释:
      • 计算预测值与真实值差的绝对值的平均值,对所有误差同等对待,不像 MSE 那样对大误差进行平方放大,更直观地反映了预测误差的平均大小。
  • 均方根误差(RMSE - Root Mean Squared Error)

    • 公式: RMSE = MSE \text{RMSE} = \sqrt{\text{MSE}} RMSE=MSE
    • 解释:
      • 是 MSE 的平方根,它与预测值和真实值具有相同的量纲,使得结果更具解释性,例如在预测房价时,RMSE 的单位与房价的单位相同。

三、假设检验公式(以 t 检验为例)

  • t 检验
    • 公式: t = X 1 ˉ − X 2 ˉ s p 1 n 1 + 1 n 2 t = \frac{\bar{X_1} - \bar{X_2}}{s_p \sqrt{\frac{1}{n_1} + \frac{1}{n_2}}} t=spn11+n21 X1ˉX2ˉ
    • 解释:
      • X 1 ˉ \bar{X_1} X1ˉ X 2 ˉ \bar{X_2} X2ˉ 是两个样本的均值, n 1 n_1 n1 n 2 n_2 n2 是两个样本的大小。
      • s p s_p sp 是合并标准差,公式为 s p = ( n 1 − 1 ) s 1 2 + ( n 2 − 1 ) s 2 2 n 1 + n 2 − 2 s_p = \sqrt{\frac{(n_1 - 1)s_1^2 + (n_2 - 1)s_2^2}{n_1 + n_2 - 2}} sp=n1+n22(n11)s12+(n21)s22 ,其中 s 1 2 s_1^2 s12 s 2 2 s_2^2 s22 是两个样本的方差。
      • t 检验用于检验两个样本的均值是否有显著差异,根据计算得到的 t 值和自由度,查 t 分布表可得到对应的 p 值,若 p 值小于显著性水平(如 0.05),则认为两个样本的均值有显著差异。

四、偏差与方差公式(在平方损失下)

  • 偏差(Bias)

    • 对于一个模型 f ( x ) f(x) f(x),假设真实的数据生成函数是 y = g ( x ) + ϵ y = g(x) + \epsilon y=g(x)+ϵ,偏差的期望定义为: Bias ( f ^ ( x ) ) = E [ f ^ ( x ) ] − g ( x ) \text{Bias}(\hat{f}(x)) = E[\hat{f}(x)] - g(x) Bias(f^(x))=E[f^(x)]g(x)
    • 解释:
      • 偏差反映了模型预测的期望与真实值的差距,衡量了模型对数据的拟合能力,高偏差可能导致欠拟合,即模型过于简单,无法很好地拟合训练数据和潜在的数据模式。
  • 方差(Variance)

    • 对于一个模型 f ( x ) f(x) f(x),方差定义为: Variance ( f ^ ( x ) ) = E [ ( f ^ ( x ) − E [ f ^ ( x ) ] ) 2 ] \text{Variance}(\hat{f}(x)) = E[(\hat{f}(x) - E[\hat{f}(x)])^2] Variance(f^(x))=E[(f^(x)E[f^(x)])2]
    • 解释:
      • 方差反映了模型在不同训练集上预测结果的波动情况,高方差可能导致过拟合,即模型对训练数据过于敏感,在不同训练集上会产生较大的预测差异。

这些公式在评估机器学习模型的性能、比较不同模型以及分析模型的拟合能力等方面都起着至关重要的作用,你可以根据具体的问题和数据类型选择合适的评估指标和检验方法,使用相应的公式进行计算和分析。

Python 的 numpy 库来进行向量和矩阵的操作,以方便计算上述公式中的求和、平方、绝对值等操作。,计算 MSE 的
Python 代码如下:

import numpy as npdef mse(y_true, y_pred):return np.mean((y_true - y_pred) ** 2)# 示例使用
y_true = np.array([1, 2, 3, 4, 5])
y_pred = np.array([1.2, 2.1, 2.8, 4.2, 5.1])
print(mse(y_true, y_pred))

代码解释:

  • 导入 numpy 库,使用 numpyarray 存储真实值和预测值。
  • 定义 mse 函数,使用 numpymean 函数计算差值的平方的平均值。
  • 最后给出一个示例调用函数,计算并输出 MSE 值。

五、代码示例(Python 实现)

from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target# 留出法示例
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
model = LogisticRegression()
model.fit(X_train, y_train)
accuracy = model.score(X_test, y_test)
print(f"Holdout Method Accuracy: {accuracy}")# 交叉验证示例
model = LogisticRegression()
cv_scores = cross_val_score(model, X, y, cv=5)
print(f"Cross Validation Scores: {cv_scores}")
print(f"Cross Validation Mean Accuracy: {cv_scores.mean()}")# 性能度量示例(使用混淆矩阵计算精确率、召回率和 F1 分数)
from sklearn.metrics import confusion_matrix, precision_score, recall_score, f1_score
y_pred = model.predict(X_test)
cm = confusion_matrix(y_test, y_pred)
precision = precision_score(y_test, y_pred, average='macro')
recall = recall_score(y_test, y_pred, average='macro')
f1 = f1_score(y_test, y_pred, average='macro')
print(f"Confusion Matrix:\n{cm}")
print(f"Precision: {precision}")
print(f"Recall: {recall}")
print(f"F1 Score: {f1}")# 比较检验示例(这里简单对比两个不同参数的逻辑回归模型)
model1 = LogisticRegression(C=1.0)
model2 = LogisticRegression(C=0.1)
cv_scores1 = cross_val_score(model1, X, y, cv=5)
cv_scores2 = cross_val_score(model2, X, y, cv=5)
from scipy.stats import ttest_ind
t_stat, p_value = ttest_ind(cv_scores1, cv_scores2)
print(f"T-Test Statistic: {t_stat}, P-Value: {p_value}")# 偏差与方差示例(这里仅为概念说明,实际需要多次实验)
def train_and_predict(X_train, y_train, X_test):model = LogisticRegression()model.fit(X_train, y_train)return model.predict(X_test)# 多次实验观察结果的变化,可判断方差
results = []
for i in range(10):X_train, _, y_train, _ = train_test_split(X, y, test_size=0.3, random_state=i)y_pred = train_and_predict(X_train, y_train, X_test)results.append(y_pred)

代码解释:

  1. 留出法
    • 使用 train_test_splitiris 数据集中划分出训练集和测试集。
    • 创建 LogisticRegression 模型,在训练集上训练并在测试集上评估准确率。
  2. 交叉验证
    • 直接使用 cross_val_score 进行 5 折交叉验证,得到 5 次验证的准确率得分,取平均值。
  3. 性能度量
    • 使用 confusion_matrix 计算混淆矩阵,进而计算精确率、召回率和 F1 分数。
  4. 比较检验
    • 创建两个不同参数的 LogisticRegression 模型,使用 cross_val_score 得到它们的交叉验证得分。
    • 使用 ttest_ind 进行 t 检验,得到 t 统计量和 p 值,根据 p 值判断差异是否显著。
  5. 偏差与方差
    • 定义 train_and_predict 函数进行训练和预测。
    • 多次不同划分进行实验,观察结果的变化,可定性分析方差。

通过上述评估方法、性能度量、比较检验和对偏差与方差的理解,你可以更好地评估和选择机器学习模型,使模型在训练和测试中取得更好的性能,并能有效地比较不同模型的优劣。

阅读代码时,注意 sklearn 中函数的参数设置,如 train_test_splittest_size 决定了测试集比例,cross_val_scorecv
表示交叉验证的折数。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/2871.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能-机器学习之多分类分析(项目实战二-鸢尾花的多分类分析)

Softmax回归听名字,依然好像是做回归任务的算法,但其实它是去做多分类任务的算法。 篮球比赛胜负是二分类,足球比赛胜平负就是多分类 识别手写数字0和1是二分类,识别手写数字0-9就是多分类 Softmax回归算法是一种用于多分类问题…

[系统安全] 六十一.恶意软件分析 (12)LLM赋能Lark工具提取XLM代码的抽象语法树(初探)

您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系…

一文掌握Docker

目录 1.快速入门 1.1.部署MySQL 1.2.命令解读 2.Docker基础 2.1.常见命令 2.1.1.命令介绍 2.1.2.演示 2.1.3.命令别名 2.2.数据卷 2.2.1.什么是数据卷 2.2.2.数据卷命令 2.2.3.挂载本地目录或文件 2.3.镜像 2.3.1.镜像结构 2.3.2.Dockerfile构建镜像 2.3.3.构建…

【网络编程】基础知识

目录 网络发展史 局域网和广域网 局域网(LAN) 广域网(Wan) 光猫 路由器 网线 设备通信的要素 IP地址 基本概念 地址划分 特殊地址(后续编程使用) IP地址转换 字节序 网络模型 网络的体系结…

细说STM32F407单片机窗口看门狗WWDG的原理及使用方法

目录 一、窗口看门狗的工作原理 1、递减计数器 2、窗口值和比较器 3、看门狗的启动 4、提前唤醒中断 二、窗口看门狗的HAL驱动程序 1、窗口看门狗初始化 2.窗口看门狗刷新 3.EWI中断及其处理 三、不开启EWI的WWDG示例 1、示例功能 2、项目设置 (1&…

Windows 蓝牙驱动开发-蓝牙设备栈

蓝牙设备栈 蓝牙驱动程序堆栈包含 Microsoft 为蓝牙协议提供支持的核心部分。 有了这个堆栈,已启用蓝牙的设备可以彼此定位并建立连接。 在此类连接中,设备可以通过各种应用程序交换数据并彼此交互。 下图显示了蓝牙驱动程序堆栈中的模块,以…

港科夜闻 | 香港科大与微软亚洲研究院签署战略合作备忘录,推动医学健康教育及科研协作...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大与微软亚洲研究院签署战略合作备忘录,推动医学健康教育及科研协作。根据备忘录,双方将结合各自于科研领域的优势,携手推动医学健康领域的交流与合作。合作方向将涵盖人才培训、…

设计模式03:行为型设计模式之策略模式的使用情景及其基础Demo

1.策略模式 好处:动态切换算法或行为场景:实现同一功能用到不同的算法时和简单工厂对比:简单工厂是通过参数创建对象,调用同一个方法(实现细节不同);策略模式是上下文切换对象,调用…

Spring Boot 下的Swagger 3.0 与 Swagger 2.0 的详细对比

先说结论: Swgger 3.0 与Swagger 2.0 区别很大,Swagger3.0用了最新的注释实现更强大的功能,同时使得代码更优雅。 就个人而言,如果新项目推荐使用Swgger 3.0,对于工具而言新的一定比旧的好;对接于旧项目原…

3 前端(上): Web开发相关概念 、HTML语法、CSS语法

文章目录 前言:导学1 Web开发相关概念2 Web标准(网页标准)3 软件架构(CS/BS)(1)C/S: Client/Server 客户端 / 服务器端(2)B/S: Browser/Server 浏览器 / 服务器端VSCode配置前段开发环境一、HTML概念1 概念2 HTML快速入门(1)语法快速入门(2)VSCode一个 !(快捷键…

目标检测新视野 | YOLO、SSD与Faster R-CNN三大目标检测模型深度对比分析

目录 引言 YOLO系列 网络结构 多尺度检测 损失函数 关键特性 SSD 锚框设计 损失函数 关键特性 Faster R-CNN 区域建议网络(RPN) 两阶段检测器 损失函数 差异分析 共同特点 基于深度学习 目标框预测 损失函数优化 支持多类别检测 应…

go chan底层分析

go chan底层分析 底层源码hchanmakechan 方法 环形队列阻塞机制向管道写数据流程图源码 从管道读数据流程图源码 关闭通道 底层源码 hchan type hchan struct {qcount uint // 当前队列中剩余元素个数dataqsiz uint // 环形队列长度,即可以…

【Git版本控制器--1】Git的基本操作--本地仓库

目录 初识git 本地仓库 认识工作区、暂存区、版本库 add操作与commit操作 master文件与commit id 修改文件 版本回退 撤销修改 删除文件 初识git Git 是一个分布式版本控制系统,主要用于跟踪文件的更改,特别是在软件开发中。 为什么要版本…

【C语言】_字符串拷贝函数strcpy

目录 1. 函数声明及功能 2. 使用示例 3. 注意事项 4. 模拟实现 4.1 第一版:基本功能判空const修饰 4.2 第二版:优化对于\0的单独拷贝 4.3 第三版:仿strcpy的char*返回值 1. 函数声明及功能 char * strcpy ( char * destination, cons…

AIGC时代:如何快速搞定Spring Boot+Vue全栈开发

文章目录 一、Spring Boot基础二、Vue.js基础三、Spring Boot与Vue.js集成四、性能优化与最佳实践《快速搞定Spring BootVue全栈开发》 内容简介作者简介目录前言/序言本书内容本书特点读者对象 随着人工智能生成内容(AIGC)技术的迅速发展,…

C语言结构体漫谈:从平凡中见不平凡

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文《1》 结构体的两种声明一、结构…

lwip单网卡多ip的实现

1、今天要实现lwip的多个ip配置,本来以为需要自己修改很多核心代码 2、查阅资料才发现,lwip已经把接口留出来了 /** Define this to 1 and define LWIP_ARP_FILTER_NETIF_FN(pbuf, netif, type) * to a filter function that returns the correct neti…

MySQL NaviCat 安装及配置教程(Windows)【安装】

文章目录 一、 MySQL 下载 1. 官网下载2. 其它渠道 二、 MySQL 安装三、 MySQL 验证及配置四、 NaviCat 下载 1. 官网下载2. 其它渠道 五、 NaviCat 安装六、 NaviCat 逆向工程 软件 / 环境安装及配置目录 一、 MySQL 下载 1. 官网下载 安装地址:https://www.m…

HarmonyOS Next 实现登录注册页面(ARKTS) 并使用Springboot作为后端提供接口

1. HarmonyOS next ArkTS ArkTS围绕应用开发在 TypeScript (简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集 ArkTS在TS的基础上扩展了struct和很多的装饰器以达到描述UI和状态管理的目的 以下代码是一个基于…

Web第一次作业

主页: <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>主页</title> </head> <body> <h1>你好&#xff01; 来到我的网站</h1> <p><a href"login…