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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值