超简单白话文机器学习 - 模型检验与评估(含算法介绍,公式,源代码实现以及调包实现)

news2025/2/22 13:16:52

1. 模型检验

1.1 Holdout交叉验证

1.1.1 算法

在这种交叉验证技术中,整个数据集被随机划分为训练集和验证集。根据经验,整个数据集的近 70% 用作训练集,其余 30% 用作验证集。

优点:可以快速进行区分,仅仅通过一次区分即可使用。

局限性:

1. 不适用于不平衡数据,例如有80%的正类样本,20%的负类样本,恰好将80%正类样本分为训练集,剩余为测试集,对模型的拟合造成误导。

2. 不适用于小数据集,可能具有我们的模型可能会错过的重要特征,因为它没有对该数据进行训练

1.1.2 代码实现:

from sklearn.model_selection import train_test_split
X = [[2,3,4],[1,2,3],[2,5,6],[1,2,3]]
y = [1,0,1,0]
X_train,x_test,Y_train,y_test = train_test_split(X,y)

1.2 LOOCV

1.2.1 算法

LOOCV方法也包含将数据集分为训练集和测试集这一步骤。但是不同的是,我们现在只用一个数据作为测试集,其他的数据都作为训练集,并将此步骤重复N次(N为数据集的数据数量)。

1.2.2 代码实现

from sklearn.model_selection import LeavePOut,cross_val_score
from sklearn.ensemble import RandomForestClassifier
lpo = LeavePOut(p=1) #p代表验证集的个数
lpo.get_n_splits(X)
tree = RandomForestClassifier()
score = cross_val_score(tree,X,y,cv=lpo) #每一个样本集合的准确率
print(score.mean())

1.3 K-fold Cross Validation K折交叉验证

1.3.1 算法

在这种 K 折交叉验证技术中,整个数据集被划分为 K 个相等大小的部分。每个分区称为一个“折叠”。因此,因为我们有 K 个部分,所以我们称之为 K 折叠。一折用作验证集,其余 K-1 折用作训练集。

该技术重复 K 次,直到每个折叠用作验证集,其余折叠用作训练集。

模型的最终精度是通过取 k-models 验证数据的平均精度来计算的。

1.3.2 代码实现

from sklearn.model_selection import KFold,cross_val_score
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression()
kf = KFold(n_splits=2)
score= cross_val_score(logreg,X,y,cv=kf)
print(score.mean())

2. 模型评估

2.1 性能指标

准确率:表示预测正确的样本数占总样本数的比例:

精确率:表示预测为正的样本中,确实为正的样本数所占的比例:

召回率:所有确实为正的样本中预测也为正的占比:

F1分数:精确率和召回率的调和平均数,用于综合考虑二者的性能:

2.2 混淆矩阵

混淆矩阵是评判模型结果的指标,属于模型评估的一部分。此外,混淆矩阵多用于判断分类器(Classifier)的优劣,适用于分类型的数据模型。衡量正确预测以及错误预测的对应关系。

from sklearn.metrics import confusion_matrix
from sklearn.metrics import ConfusionMatrixDisplay
y_predict = [1,0,1,0,0,1,1,1,0,0]
y_true = [1,0,1,1,1,1,1,1,0,1]
C1 = confusion_matrix(y_true,y_predict)
CM = ConfusionMatrixDisplay(C1)
CM.plot()

如图所示,横坐标代表预测标签,纵坐标为实际标签,每一个不同颜色的方块代表其对应关系,可以由混淆矩阵得出哪一类别分类效果好,哪一类别的分类效果不尽人意,从而针对化的去改善模型。

2.3 ROC & AUC曲线

2.3.1 概念

这是一个ROC曲线示例图,蓝色险段为ROC曲线,虚线为我们的基准线。其中 ROC 曲线距离基准线越远,则说明该模型的预测效果越好

ROC 曲线接近左上角:模型预测准确率很高

ROC 曲线略高于基准线:模型预测准确率一般

ROC 低于基准线:模型未达到最低标准,无法使用

我们深层次的去剖析这张图表,图的横坐标为FPR,代表在所有真实为负的样本中,模型错误预测为正的比例;纵坐标为TPR也就是我们的Recall(召回率)。ROC曲线不依赖于具体的阈值选择,可以全面评估模型在不同阈值下的表现。

AUC(Area Under the Curve)是ROC曲线下的面积,AUC值越接近于1,模型的性能越好,AUC若等于0.5,则表示模型没有分类能力,相当于随机猜测。AUC值为模型性能提供了一个综合指标,可以比较不同模型的优劣。

但他们的解释起来比较复杂,在某些应用中,可能不如其他指标,例如精准率等。

2.3.2 手写代码演示

def roc(y_true,y_score,pos_label):
    #统计正样本和负样本的个数
    num_positive_examples = (y_true == pos_label).sum()
    num_negative_examples = len(y_true) - num_positive_examples
    tp,fp = 0,0
    
    tpr,fpr,thresholds=[],[],[]
    score = max(y_score)+1
    
    for i in np.flip(np.argsort(y_score)):
        if y_score[i] != score:
            fpr.append(fp/num_negative_examples) #对于上一轮的结果进行汇总
            tpr.append(tp/num_positive_examples)
            thresholds.append(score) #记录阈值
            score = y_score[i] #进入新一轮的计算
        if y_true[i] == pos_label: #新一轮意味都会增加一个预测为pos_label的样本,只需要关注他的真实标签即可
            tp += 1
        else:
            fp += 1
    fpr.append(fp / num_negative_examples)
    tpr.append(tp / num_positive_examples)
    thresholds.append(score)
    
    return fpr,tpr,thresholds
y_true = np.array([1,1,0,1,1,1])
y_score = np.array([.9,.8,.7,.6,.55,.54])

fpr,tpr,threshold = roc(y_true,y_score,pos_label=1)

import matplotlib.pyplot as plt
plt.plot(fpr,tpr)
plt.axis("square")
plt.xlabel("False")
plt.ylabel("True")
plt.show()

2.3.3 调包代码演示

#库绘制ROC,AUC
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 LogisticRegression
X,y = make_classification(n_samples=1000,n_classes=2,random_state=42)
X_train,X_test,y_train,y_test = train_test_split(X,y)
model = LogisticRegression()
model.fit(X_train,y_train)
y_scores = model.predict_proba(X_test)[:,1]
fpr,tpr,thresholds = roc_curve(y_test,y_scores)
roc_auc = auc(fpr,tpr)

plt.figure()
plt.xlim([0,1])
plt.ylim([0,1])
plt.plot(fpr,tpr,color='darkorange',lw=2)
plt.plot([0,1],[0,1],color='navy',linestyle='-')
plt
print(roc_auc)

3. 应用前景

这些指标通过定量评估分类模型性能,帮助我们在实际应用中做出更明智的决策。

1. 制造业:

质量控制:评估自动化质量检测系统的性能,减少产品缺陷率,提高生产效率。

故障预测:精确预测设备故障,减少停机时间和维护成本。

2. 网络安全:

入侵检测:评估入侵检测系统的性能,确保能够准确识别网络攻击和减少误报。

恶意软件检测:评估恶意软件检测模型的精确率和召回率,以确保能够有效识别和阻止恶意软件。

3. 金融领域:

信用评分:高精准率和召回率可以帮助银行降低坏账率。

欺诈检测:高召回率对于捕捉尽可能多的欺诈行为非常重要,同时需要保持精确率以避免过多的误报。

etc.

4. 参考资料

详解机器学习中的7种交叉验证方法!

【机器学习】Cross-Validation(交叉验证)详解 - 知乎

混淆矩阵(Confusion Matrix)-CSDN博客

小白也能看懂的 ROC 曲线详解!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【cmake】cmake cache

cmake cache是什么 cmake cache是cmake在配置好后生成的一个CMakeCache.txt的文件,里面存储了一堆变量,这些变量一般都是关于项目的配置和环境的。 比如你用的什么编译器,编译器选项,还有项目目录。 例如(在cmakelist…

06- 数组的基础知识详细讲解

06- 数组的基础知识详细讲解 一、基本概念 一次性定义多个相同类型的变量,并且给它们分配一片连续的内存。 int arr[5];1.1 初始化 只有在定义的时候赋值,才可以称为初始化。数组只有在初始化的时候才可以统一赋值。 以下是一些示例规则: …

Vivado 设置关联使用第三方编辑器 Notepad++

目录 1.前言2.Vivado关联外部编辑器步骤3.Notepad的一些便捷操作 微信公众号获取更多FPGA相关源码: 1.前言 Vivado软件自带的编辑器超级难用,代码高亮对比不明显,而且白色背景看久了眼睛痛。为了写代码时有更加舒适的体验,可以…

伯克希尔·哈撒韦:“股神”的“登神长阶”

股价跳水大家见过不少,但一秒跌掉62万美元的你见过吗? 今天我们来聊聊“股市”巴菲特的公司——伯克希尔哈撒韦 最近,由于纽交所技术故障,伯克希尔哈撒韦A类股股价上演一秒归“零”,从超过62万美元跌成185.1美元&…

《QT从基础到进阶·四十一》无法解析的外部符号及生成事件加入QT打包命令报错问题

其他无法解析的外部符号: 无法解析的外部符号 "public: virtual struct QMetaObject const * __cdecl ML_AddinManger::metaObject(void)const "… 无法解析的外部符号 “public: virtual void * __cdecl ML_AddinManger::qt_metacast(char const *)” (?…

微信小程序毕业设计-民大食堂用餐综合服务平台系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

查看服务器端口是否打开,如何查看服务器端口是否打开

查看服务器端口是否打开,是确保服务器正常运行和网络通信畅通的关键步骤。以下是几个有力的方法,帮助你快速、准确地判断端口状态。 首先,你可以使用telnet命令来检测端口的连通性。telnet是一个网络协议,可以用于远程登录和管理网…

中国新闻网怎么投稿 新闻稿件文章如何发布到中国新闻网上,附中国新闻网价格明细

中国新闻网是中国最具影响力和权威性的新闻门户网站之一。作为广大作者和媒体从业者,怎样向中国新闻网投稿一直是一个备受关注的话题。在这篇文章中,我们将着重介绍媒介库网发稿平台,并分享如何在该平台上成功投稿至中国新闻网。 媒介库网发稿…

代码片段 | Matlab三维图显示[ R T 0 1] 的最佳方法

% 输入N组RT矩阵 N 4; R zeros(3, 3, N); T zeros(3, N); R(:,:,1) [-0.902608 0.250129 0.350335 ; 0.314198 0.939127 0.138996 ;-0.294242 0.235533 -0.926253 ]; T(:,1) [205.877;2796.02; 907.116];R(:,:,2) [-0.123936 0.643885 0.755018 ;0.816604 0.464468 -0.26…

Docker基础篇之本地镜像发布到阿里云

文章目录 1. 本地镜像发布到阿里云的流程2. 阿里云开发平台3. 将自己的本地镜像推送到阿里云 1. 本地镜像发布到阿里云的流程 阿里云ECS Docker生态如下图所示: 2. 阿里云开发平台 在控制台找到容器和镜像服务: 然后创建一个个人实例: 下面…

LeetCode 算法:合并区间c++

原题链接🔗:合并区间 难度:中等⭐️⭐️ 题目 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰…

java第二十课 —— 面向对象习题

类与对象练习题 编写类 A01,定义方法 max,实现求某个 double 数组的最大值,并返回。 public class Chapter7{public static void main(String[] args){A01 m new A01();double[] doubleArray null;Double res m.max(doubleArray);if(res !…

内地户口转香港身份的7种途径!2024年怎么同时拥有2个身份?一篇说明白

很多人还不知道怎么同时拥有内地身份和香港身份,这里一次性说明白,不同背景情况及政策有可能随时变化,这里分享最近拿香港身份的7种途径。 #01 优才『香港优秀人才计划』 获批准的申请人无须在来港定居前先获得本地雇主聘任。所有申请人均必…

搜索与图论:图中点的层次

搜索与图论&#xff1a;图中点的层次 题目描述参考代码 题目描述 输入样例 4 5 1 2 2 3 3 4 1 3 1 4输出样例 1参考代码 #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int N 100010;int n, m; int h[N], e[N]…

【云岚到家】-day01-项目熟悉-查询区域服务开发

文章目录 1 云岚家政项目概述1.1 简介1.2 项目业务流程1.3 项目业务模块1.4 项目架构及技术栈1.5 学习后掌握能力 2 熟悉项目2.1 熟悉需求2.2 熟悉设计2.2.1 表结构2.2.2 熟悉工程结构2.2.3 jzo2o-foundations2.2.3.1 工程结构2.2.3.2 接口测试 3 开发区域服务模块3.1 流程分析…

【命令scp】Linux不同主机之间拷贝指令scp

scp可以在不同主机之间拷贝文件 # 将本地文件拷贝到远程服务器 scp a.tar changxr192.168.100.100:/home/changxr/cxr

Android——热点开关演讲稿

SoftAP打开与关闭 目录 1.三个名词的解释以及关系 Tethering——网络共享&#xff0c;WiFi热点、蓝牙、USB SoftAp——热点(无线接入点)&#xff0c;临时接入点 Hostapd——Hostapd是用于Linux系统的软件&#xff0c;&#xff0c;支持多种无线认证和加密协议&#xff0c;将任…

Visual Studio和BOM历史渊源

今天看文档无意间碰到了微软对编码格式解释&#xff0c;如下链接&#xff1a; Understanding file encoding in VS Code and PowerShell - PowerShell | Microsoft LearnConfigure file encoding in VS Code and PowerShellhttps://learn.microsoft.com/en-us/powershell/scrip…

锁存器(Latch)的产生与特点

Latch 是什么 Latch 其实就是锁存器&#xff0c;是一种在异步电路系统中&#xff0c;对输入信号电平敏感的单元&#xff0c;用来存储信息。锁存器在数据未锁存时&#xff0c;输出端的信号随输入信号变化&#xff0c;就像信号通过一个缓冲器&#xff0c;一旦锁存信号有效&#…

服务器数据恢复—raid5阵列上层XFS文件系统数据恢复案例

服务器存储数据恢复环境&#xff1a; 某品牌CX4-480型号服务器存储&#xff0c;该服务器存储内有一组由20块硬盘组建的raid5磁盘阵列&#xff1b;存储空间分配了1个lun。 服务器存储故障&#xff1a; 工作人员将服务器重装操作系统后&#xff0c;未知原因导致服务器操作系统层…