机器学习中的模型选择和评估

news2024/11/23 11:37:18

机器学习中的模型选择和评估

  • 1. 介绍
  • 2. 模型拟合效果
    • 2.1欠拟合与过拟合表现方式
    • 2.2 避免欠拟合与过拟合的方法
  • 3.实例分析
    • 3.1鸢尾花数据集
    • 3.2 对鸢尾花数据进行聚类

1. 介绍

在机器学习系统中,如何训练出更好的模型、如何判断模型的效果,以及模型是否过拟合,对模型的最终使用有重要的意义。

2. 模型拟合效果

在机器学习模型的训练过程中,可能会出现3种情况:模型欠拟合、模型正常拟合与模型过拟合。其中模型欠拟合与模型过拟合都是不好的情况。下面将从不同的角度介绍如何判断模型属于哪种拟合情况。

2.1欠拟合与过拟合表现方式

数据的3种拟合情况说明如下。

  • 欠拟合:欠拟合是指不能很好地从训练数据中学到有用的数据模式,从而针对训练数据和待预测的数据,均不能获得很好的预测效果。如果使用的训练样本过少,较容易获得欠拟合的训练模型。
  • 正常拟合:正常拟合是指训练得到的模型可以从训练集上学习,得到泛化能力强、预测误差小的模型,同时该模型还可以针对待测试的数据进行良好的预测,获得令人满意的预测效果。
  • 过拟合:过拟合是指过于精确地匹配了特定数据集,导致获得的模型不能很好地拟合其他数据或预测未来的观察结果。模型如果过拟合,会导致模型的偏差很小,但是方差会很大。

下面分别介绍针对分类问题和回归问题,不同任务下的拟合效果获得的模型对数据训练后的表示形式。

针对二分类问题,可以使用分界面表示所获得的模型与训练数据的表现形式。
二分问题

从上图欠拟合的数据模型较为简单,因此获得的预测误差也会较大,而过拟合的模型则正好相反,其分界面完美地将训练数据全部正确分类,获得的模型过于复杂,虽然训练数据能够百分百预测正确,但是当预测新的测试数据时会有较高的错误率。而数据正常拟合的模型,对数据的拟合效果则是介于欠拟合和过拟合之间,训练获得不那么复杂的模型,保证在测试集上的泛化能力。3种情况在训练集上的预测误差的表现形式为:欠拟合>正常拟合>过拟合;而在测试集上的预测误差形式为:欠拟合>过拟合>正常拟合。

针对回归问题,在对连续变量进行预测时,3种数据拟合情况如下图所示,显示了对一组连续变量进行数据拟合时,可能出现的欠拟合、正常拟合与过拟合的三种情形。
在这里插入图片描述

很多时候面对高维的数据,很难可视化出分类模型的分界面与回归模型的预测效果,那么如何判断模型的拟合情况呢?针对这种情况,通常可以使用两种判断方案:一是判断在训练集和测试集上的预测误差的差异大小,正常拟合的模型通常在训练集和测试集上的预测误差相差不大,而且预测效果均较好;欠拟合模型在训练集和测试集上的预测效果均较差;过拟合模型则会在训练集上获得很小的预测误差,但是在测试集上会获得较大的预测误差。二是可视化出模型在训练过程中,3种不同的数据拟合在训练数据和测试数据(或验证数据)上的损失函数变化情况,如下图所示。
在这里插入图片描述

2.2 避免欠拟合与过拟合的方法

在实践中,如果发现训练的模型对数据进行了欠拟合或者过拟合,通常要对模型进行调整,解决这些问题是一个复杂的过程,而且经常需要进行多项调整,下面介绍一些可以采用的解决方法。

1.增加数据量
如果训练数据较少,可能会导致数据欠拟合,偶尔也会发生在训练集上过拟合的问题。因此较多的训练样本通常会使模型更加稳定,所以训练样本的增加不仅可以得到更有效的训练结果,也能在一定程度上调整模型的拟合效果,增强其泛化能力。但是如果训练样本有限,也可以利用数据增强技术对现有的数据集进行扩充。

2.合理的数据切分
针对现有的数据集,在训练模型时,可以将数据集切分为训练集、验证集和测试集(或者使用交叉验证的方法)。在对数据进行切分后,可以使用训练集来训练模型,通过验证集监督模型的学习过程,也可以在网络过拟合之前提前终止模型的训练。在模型训练结束后,可以利用测试集来测试训练结果的泛化能力。
当然在保证数据尽可能地来自同一分布的情况下,如何有效地对数据集进行切分也很重要,传统的数据切分方法通常按照60:20:20的比例拆分,但是数据量不同,数据切分的比例也不尽相同,尤其在大数据时代,如果数据集有几百万甚至上亿级条目时,这种60:20:20比例的传统划分已经不再适合,更好的方式是将98%的数据集用于训练,保证尽可能多的样本接受训练,1%的样本用于验证集,这1%的数据已经有足够多的样本来监督模型是否过拟合,最后使用1%的样本测试网络的泛化能力。所以,针对数据量的大小、网络参数的数量,数据的切分比例可以根据实际需要来确定。

3.正则化方法
正则化方法是解决模型过拟合问题的一种手段,其通常会在损失函数上添加对训练参数的范数惩罚,通过添加的范数惩罚对需要训练的参数进行约束,防止模型过拟合。常用的正则化参数有l,和1,范数,1,范数惩罚的目的是将参数的绝对值最小化,1,范数惩罚的目的是将参数的平方和最小化。使用正则化防止过拟合非常有效,在经典的线性回归模型中,使用1范数正则化的模型叫作LASSO回归,使用1,范数正则化的模型叫作Ridge回归,这两种方法会在后面的章节进行介绍。

3.实例分析

3.1鸢尾花数据集

在Sklearn机器学习包中,集成了各种各样的数据集。鸢尾花(Iris)数据集,它是很常用的一个数据集。鸢尾花有三个亚属,分别是山鸢尾(Iris-setosa)、变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica)。该数据集一共包含4个特征变量,1个类别变量。共有150个样本,iris是鸢尾植物,这里存储了其萼片和花瓣的长宽,共4个属性,鸢尾植物分三类。
在这里插入图片描述

3.2 对鸢尾花数据进行聚类

##输出高清图像
##图像显示中文的问题
import matplotlib
matplotlib.rcParams['axes.unicode_minus'] = False
import seaborn as sns ##设置绘图的主题
sns.set(font="Kaiti",style="ticks" , font_scale=1.4)

import pandas as pd #设置数据表每个单元显示内容的最大宽度
pd.set_option ("max_colwidth",100)
import numpy as np
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
from sklearn import metrics
from sklearn.model_selection import train_test_split,cross_val_score
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
from sklearn.model_selection import KFold,StratifiedKFold
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from mlxtend.plotting import plot_decision_regions
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import GridSearchCV
from sklearn.neighbors import KNeighborsClassifier

##数据准备,读取鸢尾花数据集
X,y=load_iris(return_X_y=True)
##为了方便数据的可视化分析,将数据降维到二维空间
pca=PCA(n_components=2,random_state=3)
X=pca.fit_transform(X)
#可视化数据降维后在空间中的分布情况
plt.figure(figsize=(4,3))
sns.scatterplot(x=X[:,0],y= X[:,1],style=y)
plt.title("Iris Dimension Reduction")
plt.legend(loc="lower right")
plt.grid()
plt.show()

##使用KFold对Iris数据集分类
kf=KFold(n_splits=6,random_state=1,shuffle=True)
datakf=kf.split(X,y)
##获取6折数据
##使用线性判别分类算法进行数据分类
LDA_clf=LinearDiscriminantAnalysis(n_components=2)
scores=[]
##用于保存每个测试集上的精度
plt.figure(figsize=(7,4))
for ii,(train_index,test_index) in enumerate (datakf):
    #使用每个部分的训练数据训练模型
    LDA_clf=LDA_clf.fit (X[train_index], y[train_index])#计算每次在测试数据上的预测精度
    prey=LDA_clf.predict (X[test_index])
    acc=metrics.accuracy_score(y[test_index] ,prey)##可视化每个模型在训练数据上的切分平面
    plt.subplot(2,3,ii+1)
    plot_decision_regions (X[train_index], y[train_index],LDA_clf)
    plt.title ("Test Acc:"+str(np.round (acc,4)))
    scores.append(acc)

plt.tight_layout()
plt.show()
#计算精度的平均值
print("平均Acc:" , np.mean (scores))

结果
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【内存对齐】一篇文章带你看懂内存对齐(万字详细介绍+代码样例)

目录 为什么需要内存对齐 性能 范围 原子性 结论 数据模型 C 的内存对齐 具名要求 平凡类 标准布局类 平凡类与标准布局类总结 标准布局类的内存对齐 普通的标准布局类 带有位域的标准布局类 手动指定对齐大小的标准布局类 非标准布局类的内存对齐 GLSLang 的…

分布式事务(3):AT模式实战-Seata

1 介绍 Seata(Simple Extensible Autonomous Transaction Architecture,简单可扩展自治事务框架)是 2019 年 1 月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案。Seata 开源半年左右,目前已经有接近一万 star,社…

信息系统项目管理师考试总结

1、结果展示 从结果上看,论文刚刚过,案例分析差两份,选择题差五分。 问题一:案例分析中,计算题可以拿到分,提高案例分析的通过率。计算题比较客观。可以在下一次考试中多准备准备。 问题二:客观…

QUIC的诞生

背景 自1999年HTTP/1.1被提出以来,它已经稳定地被使用超过了20个年头。不过经典并不意味着完美,HTTP/1.1中一个连接同一时刻只能处理一个HTTP请求,如果当前的请求没有结束之前,其他的请求只能处于阻塞状 态。这一“对头阻塞”问题…

权限管理的配置思路

1.在main.js中引入permission.js 2.permission.js中通过vuex中getters.access_token进行路由的重定向 直接import ‘.permission’

MSF基本使用和控制台命令

前言 ● Msfconsole使用接口 ○ 最流行的用户接口 ○ 几乎可以使用全部MSF功能 ○ 控制台命令支持TAB自动补全 ○ 支持外部命令的执行(系统命令等) ○ 点击鼠标启动 / msfconsole -h -q -r -v / exit ○ help / ? / help vulns 控制台命令 …

【Python】利用Python实现精准三点定位(经纬度坐标与平面坐标转换法求解)

【Python】利用Python实现精准三点定位(经纬度坐标与平面坐标转换法求解) 众所周知,如果已知三个点的坐标,到一个未知点的距离,则可以利用以距离为半径画圆的方式来求得未知点坐标。 如果只有两个已知点,则…

【Array数组】面试前基础知识点深度记忆总结

写本篇博客的原因是发现有人遇到了以下误区, 1、在我面试别人的过程中,我想让他说一下数组的一些内置方法和含义,然后他条例思路不太清晰,跳动着说,所以遗漏了很多,或许按照es5到es6是一个指导顺序&#xf…

51单片机——独立按键实验,小白讲解,相互学习

按键介绍: 按键是一种电子开关,使用时轻轻按开关按钮就可式开关接通,当松手时,开关断开。开发板上使用的按键及内部简易图如下图: 按键管脚两端距离长的表示默认是导通状态,距离短的默认是断开状态&#xf…

Pandas-根据数据表1中的字段a,筛选出数据表2中也包含字段a的数据

前言 本文是该专栏的第18篇,后面会持续分享python的数据分析知识,记得关注。 假设现在有个数据分析的需求,如下: 数据表1中有几十万条数据,数据表2中有几万条数据,两张数据表1和2有两个相同的字段phone,现在需要将数据表1和数据表2中,phone字段存在相同的行,保留下来…

redis集群操作

Redis集群1 集群2 集群架构图3 集群细节4 集群搭建4.1.创建集群4.2.查看集群状态4.3.添加主节点4.4.添加从节点4.5.删除副本节点4.6.集群在线分片1 集群 Redis在3.0后开始支持Cluster(模式)模式,目前redis的集群支持节点的自动发现,支持slave-master选举…

Nmap系统扫描实战

今天继续给大家介绍渗透测试相关知识,本文主要内容是Nmap系统扫描实战。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强调:严禁对未授权设备…

解决Win系统cad激活安装失败问题,AutoCad 2022 中文/英文正式详细安装教程

Autodesk AutoCAD 2022简称“cad 2022”是一款功能强大的CAD三维绘图辅助设计软件。autocad 2022适用于二维绘图、详细绘制、设计文档和基本三维设计,广泛应用于机械设计、工业制图、工程制图、土木建筑、装饰装潢、服装加工等多个行业领域。CAD2022新特征&#xff…

线径看板帮助电线电缆厂提高生产效率的工作原理

当今,市场上出现了越来越多的电线电缆品牌,电线电缆市场的竞争越来越激烈,电线厂家稍有不慎,出现了产品不规范、不合格的异常情况,就很可能会被市场淘汰,被消费者所抛弃。那么,要怎样才能够保障…

MVC(Model,View,Controller)

MVC是指Model(模型层,数据),View(视图层),Controller(控制层) 核心是DispathcherServlet(一个Servlet) (1) 客户端的请求提交给DispathcherServlet (2)DispathcherServl…

【动态规划篇】斐波那契数列拆分词句三角矩阵

🌠作者:阿亮joy. 🎆专栏:《数据结构与算法要啸着学》 🎇座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉…

基于Java(JSP+Servlet)+Mysql实现的(Web)简易的工资管理系统【100010062】

1.问题描述 一个公司下分为若干部门,每个部门有若干职员和经理,每个部门经销若干种商品。工资由基本工资、产品销售业绩奖、若干种保险的扣除等组成。其中的销售业绩奖按以下方式设计:职员按其完成额的 5% 提成,经理按其部门完成…

string.IsNullOrEmpty和string.IsNullOrWhiteSpace的区别

string.IsNullOrEmpty和string.IsNullOrWhiteSpace 本人一直使用的是string.IsNullOrEmpty方法来判断字符串是否为空. 在插件中发现另外一种写法: string s1 null; string s2 string.Empty; string s3 ""; strin…

精通MyBatis原理,看这两篇就够了!(二)

本文是关于MyBatis源码的第二篇,解读了MyBatis的核心执行SQL流程,对源码做了详细注释。内容较长,推荐电脑阅读。点击上方“后端开发技术”,选择“设为星标” ,优质资源及时送达执行阶段流程第一篇文章讲解了Mybatis启动…

【jdk11+jprofiler 11进行java程序性能调优案例之--内存溢出原因分析】

1.安装jprofiler jprofiler_windows-x64_11_0_2.exe 2.使用KeyGen.exe生成注册码然后输入 3.idea中安装jprofiler插件 File-->Setting-->Plugins 搜索jprofiler插件然后安装 4.以一个内存溢出的程序为例子进行分析(一直分配内存,List容器引用着Student导致…