利用学习曲线诊断机器学习算法

2024-06-15 17:08

本文主要是介绍利用学习曲线诊断机器学习算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2019/04/21

引言

前几天的时候,在吴恩达的那本机器学习书上看到了这个内容,联想到最近在做的这个实验,的确是那种过拟合的趋势,所以就想着把这个部分来学习一下,然后找到解决方案来缓解我这边的这个症结。

初步的学习

(前端时间也说了,我记笔记一直是按照资源管理的方式来记录的,这样不好,应该记下来自己的见解 2019/04/21)
在以往教科书式的学习过程中,我们都被图1、图2这种形式被教导过拟合与欠拟合的概念。

图1 - 过拟合与欠拟合

 

图2 - 模型复杂度与分数

但是实际情况是,高维数据情况下看不到曲线穿过各个点的形式,很多算法的模型复杂度也并不能量化,最终导致你没办法看到上述的两个图。平时做的更多的是,根据某个参数的调整,来查看类似上述的图像,也不失为一种有效的办法,但在参数较多的时候,又陷入了高维数据无法可视化的困难。
但学习曲线可以帮助你完成这个类似的目标,通过将训练数据的个数作为横轴,将训练误差与测试误差随横轴变化的两条曲线分别画出来,就能很好的模拟出来这种曲线,如图3所示。

图3-学习曲线(代码就是sklearn中的示例源码)


图3是我在做实验的时候,生成的一个图。当时调整了一个类似惩罚因子的参数,本来过拟合的图就变成了这样。
对于过拟合与欠拟合的概念,还有什么bias vs variance什么的,这里就不在赘述了。我觉得,掌握这个内容,单单就是从书上那点内容,通过图1、图2来讲解这整个内容根本不够,最重要的还是找一个真实的数据集来展示出来这个过程。
文章[1]从最基础的内容开始,按照实验步骤,将过拟合与欠拟合、学习曲线、验证曲线的内容都给介绍了出来。
欠拟合:高bias,需要提高模型复杂度,学习曲线展现为,测试误差与训练误差逐渐重合,并且数值较大,如图4所示。

图4-欠拟合[1]


过拟合:高variance,需要降低模型复杂度,学习曲线展现为,训练误差很低,非常平稳,但测试误差要高的多,特别是随着数据集大小的提升,测试误差也趋于平稳,如图5所示

图5-过拟合

 

深入探讨

在吴恩达的那本机器学习书籍中,对于这部分内容进行了详细的探讨,包括哪些部分的误差是bias,哪些部分是variance,重点应该放在他提供的解决方案上,文章[3]算是一个简版的说明,在进行区分的时候,主要集中在两种情况:高bias,高variance。

学习资源

文章[1]的内容,作为比较基础的介绍,配有相应的代码,非常适合入门学习;文章[2]也是简单的介绍,他提出的一个见解是,利用学习曲线来诊断是否是具有代表性的数据集;文章[4]应该是他学了了吴恩达的课程,然后凝练出来的一些关键点。


2019/07/20 实际情况的解释
下面这几篇文章,我也多读了几篇,然后这次也一直在做相应的实践。然后就是发现这个东西涵盖的内容还是非常多的。单单从什么过拟合和欠拟合的角度来解决这个问题,貌似并不是非常奏效,可能有很大一部分原因,是因为那部分数据就是很尴尬,所以再也调整不上去了。文章[3]算是解释的比较清楚得了。

解决方案

文章[4]中上述这个图片,基本上算是把所有的就觉方案都给提出来了把。
然后就是一个比较关键的部分,你的数据有些部分的内容他就是容易分错,可能是因为特征不好,也可能是因为他属于小概率的类别,正如文献[4]中所说,他的预测概率一直在0.5之间。

参考文献

[1]week6-andrew-ng-machine-learning-with-python.html
[2]learning-curves-for-diagnosing-machine-learning-model-performance
[3]learning-curves-machine-learning/
[4]machine-learning-diagnostics

这篇关于利用学习曲线诊断机器学习算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1064056

相关文章

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.