机器学习(四) -- 模型评估(1)

系列文章目录

机器学习(一) -- 概述

机器学习(二) -- 数据预处理(1-3)

机器学习(三) -- 特征工程(1-2)

机器学习(四) -- 模型评估(1-2)

未完待续……


目录

系列文章目录

前言

一、模型评估概述

1、模型评估定义

2、基本概念

3、过拟合、欠拟合

3.1、过拟合

3.2、欠拟合

3.3、防止欠拟合,过拟合的方法

4、偏差、方差

4.1、偏差(biase)

4.2、方差(variance)

4.3、噪声(Noise)

二、评估方法

1、留出法

2、交叉验证法(k折交叉验证)

3、留一法

4、自助法



前言

tips:这里只是总结,不是教程哈。

“***”开头的是给好奇心重的宝宝看的,其实不太重要可以跳过。

此处以下所有内容均为暂定,因为我还没找到一个好的,让小白(我自己)也能容易理解(更系统、嗯应该是宏观)的讲解顺序与方式。

第一文主要简述了一下机器学习大致有哪些东西(当然远远不止这些),对大体框架有了一定了解。接着我们根据机器学习的流程一步步来学习吧,掐掉其他不太用得上我们的步骤,精练起来就4步(数据预处理,特征工程,训练模型,模型评估),其中训练模型则是我们的重头戏,基本上所有算法也都是这一步,so,这个最后写,先把其他三个讲了,然后,在结合这三步来进行算法的学习,兴许会好点(个人拙见)。


一、模型评估概述

1、模型评估定义

对训练好的模型性能进行评估。

2、基本概念

错误率(error rate):分类错误的样本数/样本总数

精度(accuracy):1-错误率=分类正确的样本数/样本总数

误差(error):学习器(模型)的预测输出与样本真实输出的差异。(误差期望,排除数据集大小的影响)

        训练误差(training error,经验误差,empirical error):学习器在训练集上的误差。

         测试误差(test error):学习器在测试集上的误差。

         泛化误差(generalization error):学习器在未知新样本上的误差。(我们是为了得到泛化误差小的学习器。因为,泛化误差无法测量,因此,通常我们会将测试误差近似等同于泛化误差。)

3、过拟合、欠拟合

3.1、过拟合

模型对于训练数据拟合得太好了。
很可能已经把训练样本自身的一些特点当作所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降。反映到评估指标上,就是模型在训练集上的表现很好,但在测试集和新数据上的表现较差。

(过拟合是机器学习的关键障碍,虽然各类学习算法都必然带有一些针对过拟合的措施;然而,必须认识到过拟合是无法彻底避免的,我们所能做的只是“缓解”,或者说减小其风险。)

3.2、欠拟合

指模型在训练数据上拟合得不好。
反映到评估指标上,是模型在训练和预测时表现都不好的情况。主要原因在于模型的学习能力低下。

3.3、防止欠拟合,过拟合的方法

3.3.1、防止欠拟合

数据

        获得更多的训练数据:更多的样本能够让模型学习到更多更有效的特征,减小噪声的影响。

        添加新特征:当特征不足或者现有特征与样本标签的相关性不强时,模型容易出现欠拟合。

                挖掘“上下文特征”、“ID 类特征”、“组合特征”等新的特征。

                深度学习:因子分解机、梯度提升决策树、Deep-crossing 等都可以成为丰富特征的方法。

模型

        增加模型复杂度:通过增加模型的复杂度可以使模型拥有更强的拟合能力。

                线性模型:添加高次项。

                决策树模型:不采用剪枝手段,不限制叶节点的个数以及树的深度。

                神经网络:增加网络层数或神经元个数。

        减小正则化系数:针对性地减小正则化系数。(后面会说到)

3.3.2、防止过拟合

数据

        获得更多的训练数据:更多的样本能够让模型学习到更多更有效的特征,减小噪声的影响。

                图像分类问题:通过图像的平移、旋转、缩放等方式扩充数据。
                生成式对抗网络:合成大量的新训练数据。

模型

        降低模型复杂度:在数据较少时,模型过于复杂是产生过拟合的主要因素,适当降低模型复杂度可以避免模型拟合过多的采样噪声。
                神经网络:减少网络层数、神经元个数。
                决策树:降低树的深度和叶节点的个数、进行剪枝等。
        正则化方法:给模型的参数加上一定的正则约束,比如将权值的大小加入到损失函数中。常用的惩罚项有 L1 惩罚项和 L2 惩罚项。
        集成学习方法:把多个模型集成在一起,来降低单一模型的过拟合风险。

4、偏差、方差

模型泛化能力:指机器学习算法对未知样本的适应能力。 

通常我们会用过拟合、欠拟合来定性地描述模型是否很好地解决了特定的问题。
从定量的角度来说,可以用模型的偏差(Bias)与方差(Variance)来描述模型的泛化性能,这称为偏差-方差分解(bias-variance decomposition),是解释学习算法泛化性能(即为什么具有这样的性能)的一种重要工具。

这个训练数据集的损失与一般化的数据集的损失之间的差异就叫做泛化误差(generalization error)。而泛化误差可以分解为偏差(Biase)、方差(Variance)和噪声(Noise)

4.1、偏差(biase)

是用所有可能的训练数据集训练出的所有模型的输出的平均值真实模型输出值之间的差异。

4.2、方差(variance)

不同的训练数据集训练出的模型输出值之间的差异。即刻画了数据扰动所造成的影响。(预测值离散程度)

4.3、噪声(Noise)

噪声的存在是学习算法所无法解决的问题,数据的质量决定了学习的上限。假设在数据已经给定的情况下,此时上限已定,我们要做的就是尽可能的接近这个上限。

为了更好地说明偏差与方差的关系,以射击靶心作为例子。

二、评估方法

因为通常通过实验测试来对学习器的泛化误差进行评估并进而做出选择。而上面也说过因为泛化误差无法测量,因此,通常我们会将测试误差近似等同于泛化误差。所以需要将数据集进行划分。

1、留出法

留出法将测试数据集和训练数据集完全分开,采用测试数据集来评估算法模型。

其实就是和数据划分讲的一样。一般训练集S占70%-80%,测试集T占20%-30%。(数据量越大,训练集占比越大)
训练集用于训练算法生成模型。测试集通过模型来预测结果并与已知结果比较,最终通过一些模型评价指标评估算法模型的优劣。

训练集和测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。基于该情况考虑的采样方式称为“分层采样”。

API:

sklearn.model_selection.train_test_split
导入:
from sklearn.model_selection import train_test_split

eg:

from sklearn.model_selection import train_test_split

# 先查看原先数据集的尺寸
print(iris.data.shape)  # 输出 (150, 4)


# 按照 70%训练集 30% 测试集进行划分
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=134)
print(x_train.shape)  # 输出训练集尺寸(105, 4)
print(x_test.shape)  # 输出测试集尺寸(45, 4)

2、交叉验证法(k折交叉验证)

交叉验证法(cross validation)先将数据集 D 划分为 k 个大小相似的互斥子集,每次用k-1个子集的并集做训练集,余下那个做测试集,最终k次训练和测试,最终返回的是k个测试结果的均值。

 【当不知道如何选择分离数据集的方法时,请选择 K 折交叉验证来分离数据集;】
【当不知道如何设定 K 值时,请将 K 值设为 10。】

API:

sklearn.model_selection.cross_val_score
导入
from sklearn.model_selection import cross_val_score

实例:

from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier

score = cross_val_score(DecisionTreeClassifier(), iris.data, iris.target, cv=10)
print("%.3f%% (%.3f)" % (score.mean() * 100, score.std() * 100)) 
print(score)

3、留一法

留一法(Leave-One-Out,简称 LOO),假定数据集 D 中包含 m 个样本,若令 k = m,则得到交叉验证法的一个特例,即留一法,又被称为“弃一交叉验证”。

k=m,每个样本就是一个子集。

缺点:数据量较大时对算力要求较高

实例:

from sklearn.model_selection import LeaveOneOut
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier

loo = LeaveOneOut()
score = cross_val_score(DecisionTreeClassifier(), iris.data, iris.target, cv=loo)
print("%.3f%% (%.3f)" % (score.mean() * 100, score.std() * 100))  
print(score)

 

4、自助法

自助法(bootstraping)直接以自助采样法(bootstrap sampling)为基础。

D为基础,随机抽取放回抽样m次,产生D',
m次采样中始终不被采到的概率是(1-1/m)^m,取极限得到0.368
D'做训练集,D\D'(D-D')做测试集,即有36.8%做测试集

也可以如下描述:给定包含 m 个样本的数据集 D,对其进行采样产生数据集 D’:

每次随机从 D 中挑选一个样本,将其拷贝放入 D’;
然后再将该样本放回初始数据集 D 中,使得该样本在下次采样时仍有可能被采到,其实就是有放回地采样;
该过程重复执行 m 次后,就得到包含 m 个样本的数据集 D’。

这样的测试结果称为“包外估计”。

适用于:数据集较小,难以划分的时候。

缺点:改变初始数据集分布,会引入估计偏差

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

5.vue学习笔记(数组变化的侦测+计算属性+Class绑定)

文章目录 1.数组变化的侦测1.1.变更方法1.2.替换一个数组 2.计算属性计算属性缓存vs方法 3.Class绑定3.1.绑定对象3.2.多个对象的绑定形式3.3.绑定数组3.4.数组与对象 1.数组变化的侦测 1.1.变更方法 vue能够侦听响应式数组的变更方法,并在它们被调用时出发相关的…

在centos7部署redis7

一、目标 在centos7.9上部署安装redis-7.2.3 二、步骤 官网 https://redis.io/download/ 1、下载合适版本的redis wget https://github.com/redis/redis/archive/7.2.3.tar.gz --no-check-certificate 如果这个链接失效,自行去官网找个合适的版本 2、安装redi…

【CFP-专栏2】计算机类SCI优质期刊汇总(含IEEE/Top)

一、计算机区块链类SCI-IEEE 【期刊概况】IF:4.0-5.0, JCR2区,中科院2区; 【大类学科】计算机科学; 【检索情况】SCI在检; 【录用周期】3-5个月左右录用; 【截稿时间】12.31截稿; 【接收领域】区块链…

vue的小入门

vue的快速上手 Vue概念 是一个用于构建用户界面的渐进式框架优点:大大提高开发效率缺点:需要理解记忆规则 创建Vue实例 步骤: 准备容器引包创建Vue实例new Vue()指定配置项el data>渲染数据 el指定挂载点,选择器指定控制…

【REST2SQL】03 GO读取JSON文件

REST2SQL需要一些配置信息,用JSON文件保存,比如config.json 1 创建config.json配置文件 {"hostPort":"localhost:5217","connString":"oracle://blma:5217127.0.0.1:1521/CQYH","_oracle":"ora…

linux centos使用rz、sz命令上传下载文件

一般情况下,我们会使用终端软件,如 XShell、SecureCRT 或 FinalShell 来连接远程服务器后,使用 rz 命令上传本地文件到远程服务器,再解压发版上线。 一、安转使用 系统:Linux CentOS 7 安装 rz 和 sz 命令 yum -y ins…

Python 学习路线:介绍、基础语法、数据结构、算法、高级主题、框架及异步编程详解

Python 介绍 Python 是一种 高级 的、解释型 的、通用 的编程语言。其设计哲学强调代码的可读性,使用显著的缩进。Python 是 动态类型 和 垃圾收集 的。 基本语法 设置 Python 环境并开始基础知识。 变量 变量用于存储在计算机程序中引用和操作的信息。它们还提…

leetcode第206题反转链表❤

一:题目: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 题目链接:力扣(LeetCode)官网…

友思特分享 | CamSim相机模拟器:极大加速图像处理开发与验证过程

来源:友思特 机器视觉与光电 友思特分享 | CamSim相机模拟器:极大加速图像处理开发与验证过程 原文链接:https://mp.weixin.qq.com/s/IED7Y6R8WE4HmnTiRY8lvg 欢迎关注虹科,为您提供最新资讯! 随着图像处理技术的不断…

第二证券机构策略:股指预计维持蓄势震荡格局 关注煤炭、电力等板块

第二证券以为,技能面看,在元旦节前资金抄底推进指数收回2900整数关口,并向着3000点渠道压力前进。沪指在底部均线位支撑摆放较强,调整空间估计不大,在3000点渠道下方调整就是再次优化低吸的时机。操作上,在…

win下持续观察nvidia-smi

简介:在Windows操作系统中,没有与Linux中watch命令直接对应的内置工具,但有1种方法快速简单的方法可以实现类似的效果,尤其是用于监控类似于nvidia-smi的命令输出。 历史攻略: Python:查看windows下GPU的…

解析启动页设计的三种常见形式!

在日常生活中,当我们打开应用程序时,我们总是跳出很多页面,有些人说这是一个启动页面,有些人认为这是一个启动页面,有各种各样的名字。那么,当我们启动应用程序时,我们看到的页面的专业术语是什…

天翼运行高校云盘在线扩容

天翼云文档地址:https://www.ctyun.cn/document/10027696/10169558 1、输入 growpart命令,检查此云主机是否已安装growpart扩容工具。若出现图中回显信息,则说明已经安装,无需手动安装。 注意 若没有图示信息,请执行…

【MySQL】MySQL如何查询和筛选存储的JSON数据?

MySQL如何查询和筛选存储的JSON数据? 一、背景介绍二、支持的JSON数据类型三、基础数据3.1 创建表3.2 插入 JSON 数据3.3 查询 JSON 数据 四、操作函数4.1 JSON_OBJECT4.2 JSON_ARRAY4.3 JSON_EXTRACT 一、背景介绍 JSON(JavaScript Object Notation)是一种轻量级的…

【ESP32接入国产大模型之文心一言】

1. 怎样接入文心一言 随着人工智能技术的不断发展,自然语言处理领域也得到了广泛的关注和应用。在这个领域中,文心一言作为一款强大的自然语言处理工具,具有许多重要的应用价值。本文将重点介绍如何通过ESP32接入国产大模型之文心一言api&am…

SSM框架注解大全

先赞后看,养成习惯!!!❤️ ❤️ ❤️ 文章码字不易,如果喜欢可以关注我哦! ​如果本篇内容对你有所启发,欢迎访问我的个人博客了解更多内容:链接地址 SSM框架注解大全 三大框架注解…

【ModelScope】部署一个属于自己的AI服务

前言 技术栈是Fastapi。 FastAPI 是一个现代、快速(基于 Starlette 和 Pydantic)、易于使用的 Python web 框架,主要用于构建 RESTful API。以下是 FastAPI 的一些优势: 性能卓越: FastAPI 基于 Starlette 框架&…

第34期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大型语言模型(LLM)等安全领域应用的知识。在这里,您可以…

ElecardStreamEye使用教程(视频质量分析工具、视频分析)

文章目录 Elecard StreamEye 使用教程安装与设置下载安装 界面导航主菜单视频窗口分析窗口 文件操作打开视频文件 视频流分析帧类型识别码率分析分析报告 高级功能视觉表示比较模式自动化脚本 下载地址1:https://www.onlinedown.net/soft/58792.htm 下载地址2&…

又又又崩了?盘点 23 年十大线上事故!

以下文章来源于前端充电宝 ,作者CUGGZ 2023 年,互联网世界日新月异,线上应用已成为我们生活中不可或缺的一部分。然而,在这一年里,一系列令人咋舌的线上事故频频发生。“XXX 崩了” 成为热搜常客。这些事故不仅给用户带…