首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

3000字详细总结机器学习中如何对模型进行选择、评估、优化

引入

作者:陈浩然,北大在读,个人博客:chrer.com

对于一个机器学习工程而言,我们可以选择的模型众多,就之前的章节,我们已经可以选择:

对于一个模型而言,我们也有很多模型参数需要人工选择,本章将对模型的评估选择和优化进行详细介绍。

1概念介绍

1.1 过拟合和欠拟合

在机器学习中,我们期望通过训练集来得到在新样本上表现的很好的学习器,找出潜在样本的普遍规律,在训练过程中,可能会出现两种情形:

欠拟合:指对训练样本的一般性质尚未学好 。

过拟合:学习器把训练样本学得“太好”了的时候,可能把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降。

可以通过下图来辅助理解:

过拟合与欠拟合

在机器学习中,我们尤其要预防过拟合的发生,但由于机器学习的问题常常是NP难甚至是NP完全的,而有效的算法必定是多项式时间内完成的,所以只要承认P=NP,就需要承认过拟合无法完全避免

当然,P=NP是目前尚未证明或证伪的结论,我倾向于认为P!=NP。

1.2 偏差和方差

对于测试样本x,其真实标记为y,数据集中的标记, 机器学习算法输出的标记为,算法输出的期望值,则有以下定义:

其中E()代表求期望,有数学推导可知:

总误差可以分解为方差、偏差与噪声之和

从直观理解的角度上看:

偏差刻画了学习算法本身的拟合能力

方差刻画了数据集的变动导致学习性能的变化,也就是学习算法的稳定性

噪声表明了数据集标记本身的误差

1.3 查准率和查全率

我们评估一个算法好坏的时候经常使用错误率,即算法输出与实际标记不一致的数据所占的比例

然而有时候,我们会关心更加细致的数据,例如进行疾病检查,我们更关心检查出病症的病人占总病人数目的多少,或者是检测出病症的病人有多少真的有疾病,于是引入查准率和查全率:

首先,根据算法输出和实际标记,可以将数据分为四类:

表格中T和F分别代表True和False(表示算法的预测结果是否正确),P和N分别代表Positive和negative(表示数据本身实际的分类意义)。

查准率P和查全率R定义如下:

查准率表示了被输出为正例的样本中真的是正例的比例

查全率表示了所有的正例中被算法识别出来的比例

2 模型选择

一般而言,参数有两种,一种是模型中的参数,由算法进行自动的优化;另一种是模型本身自带的参数,又称超参数

在机器学习中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。

例如,我们再进行线性回归时,可以选择很多种形式的函数,例如:

也就是说,我们要选定到底哪个形式的模型效果会比较好,为了得到最好的模型,我们将数据集分为三个部分。

训练集(60%)

测试集(20%)

交叉验证集(20%)

其中训练集用于算法的训练,由此,我们可以得到很多个不同的模型,再使用交叉验证集分别测试每个模型的泛化能力,选择其中最优的模型。

最后,使用测试集来测试最优模型的泛化能力,为什么不直接使用上一步的交叉验证集呢?因为, 这个交叉验证集误差是我们通过对比选择出来的, 它在这个数据集上肯定是最优的, 相当于我们已经看到了这些数据, 用它来代表对未知数据的泛化能力显然不行。

在划分数据集的过程中,要保证数据集的划分尽可能保持数据分布的一致性,即使得它们独立同分布,数据集划分的方法一般而言有以下几种:

留出法:最基本的抽样方法,最好使用分层抽样保证数据分布一致性,也可以做多次划分,最后返回在每次划分上测试结果的平均值,可以避免偏差

优点:划分简单

缺点:可能产生偏差,若采取多次取样,则训练成本过高

交叉验证法:将数据集划分为k个大小相似的数据集,注意使用分层抽样。每次使用一个小数据集做测试集,其他k-1个做训练集,轮流进行k次,最后返回的是测试结果的平均值。

自助法:假设有m个数据的数据集,每次有放回的从其中抽取一个样本,执行m次,最终大概有36.8%的数据未被抽取到,当做测试集,其余当做训练集。

优点:在数据集较小时用处较大,划分出的多个数据集有利于集成学习。

缺点:改变了原数据样本的分布,会引入偏差

3 模型评估

在前面,已经介绍过查准率和查全率,当想要评估一个模型的好坏时,便可以使用这两项指标。

实际上,除了一些很简单的任务外,查准率和查全率是无法两全的:

若要提高查准率,即提高判为正例的标准,那么必定会漏掉一些真的正例,降低查全率

若要提高查全率,即降低判为正例的标准,必定会混入假的正例,降低查准率。

对于一个算法而言,其查准率和查全率关系如图所示:

有了这两项指标,一般按照如下原则比较不同模型:

若A模型的P-R曲线完全包住B,则A模型优于B

根据P-R曲线包裹的面积,面积大的模型更优

根据模型的现实需要,选择P或R值更好的模型

根据值,值大的模型较为优秀

最好的方法是综合现实情形和值,引入,其中参数是对于查全率的重视程度。

上述叙述了当机器学习模型已经训练完成之后,我们该如何评估模型的好坏。

但是一般而言,机器学习模型的训练时间较长,在训练过程中,我们怎么样判断模型训练的状态和优劣呢?

之前说过,训练过程中的最容易出现的问题就是过拟合欠拟合,下面介绍判断拟合状态的方法。

之前介绍过方差、偏差的概念以及他们的意义,在训练过程中,我们会得到训练集测试集的总误差,通过这两个参数,我们可以判断出算法的拟合状态。

当出现欠拟合时,偏差高,方差低

当出现过拟合时,方差高,偏差低

3.1 拟合状态与样本规模

首先,无论是过拟合还是欠拟合,由于一个特定的函数对于更多的数据更难以拟合,但是对预测是有利的,所以训练集误差会增加,测试集误差会减少

若出现欠拟合情形,增大数据量,训练集和测试集误差会趋于平缓,并且两者很接近,但是喂更多的数据基本无效。

若出现过拟合情形,增大数据量,训练集误差会持续增加,测试集误差会持续减少,并且两者相差较大。

过拟合与欠拟合

3.2 拟合状态与正则化项

在线性回归、支持向量机等算法中,都会加入正则化项来防止过拟合,因为正则化项可以使得参数尽可能小。

例如该式中的即为正则化项的参数,其值越大,越可以避免过拟合,但是可能会陷入欠拟合泥淖之中。

随着的增大,训练集误差会持续升高(因为拟合程度逐渐减小),而测试集误差会先下降后上升,期间有最低点。

如图,较小时,会发生过拟合,所以测试集误差会很大,较大时,会发生欠拟合,所以测试集误差也会很大。

过拟合与欠拟合

3.3 拟合状态和模型复杂性

显然,选择的特性越多,模型越复杂。例如一个普通的线性回归,我们就可以选择:

模型越复杂,学习能力越强,故训练集误差越小。但是对于测试集误差,当它减少到一定程度时,模型可能因为过于复杂而出现过拟合现象,误差反而增大。

4 模型优化

如果我们已经发现当前算法效果并不好,会试图对算法进行一些优化,例如:加更多的特征,增加数据集,增大正则化项等,下表列举了常见的措施和应对情况。

Python与机器学习算法频道

欢迎点赞和转发

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180725G02L3I00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券