学习曲线、机器学习系统的设计
关键词
学习曲线、偏差方差诊断法、误差分析、机器学习系统的数值评估、大数据原理
概要
本周内容分为两讲:
第一讲.Advice for applying machine learning,主要内容是关于偏差、方差以及学习曲线为代表的诊断法,为改善机器学习算法的决策提供依据;
第二讲.Machine learning system design,主要内容是机器学习算法的数值评估标准:准确率(交叉验证集误差)、查准率precision、召回率recall以及F值,给出了机器学习系统的设计流程.
==============================第一讲==============================
========= 关于偏差、方差以及学习曲线为代表的诊断法 ==========
(一)模型选择Model selection
在评估假设函数时,我们习惯将整个样本按照6:2:2的比例分割:60%训练集training set、20%交叉验证集cross validation set、20%测试集test set,分别用于拟合假设函数、模型选择和预测。
三个集合对应的误差如下图所示(注意没有不使用正则化项):
基于以上划分,我们有模型选择的三个步骤:
step1.用测试集training set对多个模型(比如直线、二次曲线、三次曲线)进行训练;
step2.用交叉验证集cross validation set验证step1得到的多个假设函数,选择交叉验证集误差最小的模型;
step3.用测试集test set对step2选择的最优模型进行预测;
以线性回归为例,假设你利用线性回归模型最小化代价函数J(θ)求解得到一个假设函数h(x),如何判断假设函数对样本的拟合结果是好是坏,是不是说所有点都经过(代价函数J最小)一定是最理想的?
或者这样说,给你下图的样本点,你是选择直线、二次曲线、还是三次曲线......作为假设函数去拟合呢?
以下图为例,你的模型选取其实直接关系到最终的拟合结果:
=======================================
欠拟合Underfit || 高偏差High bias
正常拟合Just right || 偏差和方差均较小
过拟合Overfit || 高方差High variance
=======================================
★★★以上问题只是模型选择过程中需要考虑的一点------多项式次数d,实际上,我们还会去考虑这样两个参数:正则化参数λ、样本量m.
下面我将从多项式次数d、正则化参数λ、样本量m这三个量与拟合结果之间的关系做一个简单的概括.
(二)偏差、方差、学习曲线Bias、Variance、Learning curve
1.特征量的度d
还是之前的例子,用二次曲线拟合,训练集和交叉验证集的误差可能都很小;但是你用一条直线去拟合,不管使用多高级的算法去减小代价函数,偏差仍然是很大的,这时候我们就说:多项式次数d过小,导致高偏差、欠拟合;类似的当用10次曲线去拟合,样本点都能经过,对应的代价函数(误差)为0,但是带入交叉验证集你会发现拟合很差,这时候我们说:多项式次数d过大,导致高方差、过拟合。
所以,多项式次数d与训练集、交叉验证集误差的关系如下图:
2.正则化参数λ
正则化参数我们在第三周有介绍到,正则化参数λ越大,对θ惩罚的越厉害,θ->0,假设函数是一条水平线,欠拟合、高偏差;正则化参数越小,相当于正则化的作用越弱,过拟合、高方差。关系如下图所示:
3.样本量m与学习曲线Learning curve
学习曲线是样本量与训练集、交叉验证集误差之间的关系,分为高偏差和高方差两种情况(欠拟合和过拟合)。
①高偏差(欠拟合):
根据下图右部分分析有,通过增加样本量两者误差都很大,即m的增加对于算法的改进无益。
②高方差(过拟合):
根据下图右部分分析有,通过增加样本量训练集样本拟合程度很好(过拟合),训练集误差很小,即m的增加对于算法的改进有一些帮助。
★★★(三)如何决策
综上所述,你会发现有这样的一个结论,就是:
◆训练集误差大、交叉验证集误差也大:欠拟合、高偏差、多项式次数d太小、λ太大;
◆训练集误差小、交叉验证集误差却很大:过拟合、高方差、多项式次数d太大、λ太下、样本量太少。
这就为我们改善机器学习算法提供了依据。
==============================第二讲==============================
======= 机器学习系统的设计 ======
(一)机器学习系统的设计流程
Step1.使用快速但不完美的算法实现;
Step2.画出学习曲线,分析偏差、方差,判断是否需要更多的数据、增加特征量....;
Step3.误差分析:人工检测错误、发现系统短处,来增加特征量以改进系统。
以垃圾邮件的分类为例:起初你可能找不到太多特征量,除了$、buy、discount等关键词,这时候你应该先快速实现它,然后用交叉验证集去检验,人工去检查出错的邮件的共同特征(比如你发现http超链接比较多等一开始你没想到的特征量);最后你就可以把这些特征量加进你的模型中去重新实验去优化。
(二)数值评估机器学习算法的标准
1.交叉验证集误差(accuracy)
这个很好想到,设计的拟合函数如果用交叉验证集检验误差很大,那么肯定不是一个很好的学习算法;
但,是不是说误差很低就一定是好的学习算法呢?举个例子,这个例子也叫斜偏类:
某种癌症的患病率是0.50%,你设计的一个学习算法(综合考虑各种特征量最小化代价函数)得到交叉验证集准确率99.0%,但实际上有这样的一种预测---直接认为样本不发病(不管样本有怎样的特征量),它的交叉验证集准确率却有99.5%,这种预测是不是好的?显然并不是我们的目的。
所以评估学习算法优劣还有下面一个标准:尽可能高的查准率和召回率。
2.查准率、召回率与F值precision、recall、F score
查准率:你预测样本发病样本最后真发病的概率;
召回率:一个最终患病的样本,你之前也预测他患病的概率;
高的查准率意味着,我们在极为确定样本患病的情况下才告诉他患病(或者理解为不轻易预测他患病);
高的召回率意味着,样本有可能患病我们就告诉他(或者理解为普世关怀);
表达式如下图所示:
还是拿之前癌症的例子,你始终预测不患病y=0,召回率就为0,我们希望得到的学习算法是不仅有高的预测准确率,还要有尽可能高的查准率和召回率,所以这种简单的预测y=0的方法并不好。
查准率和召回率有时候不可兼得,所以需要权衡二者,基于二者的判断标准---F值。
F值给出了一个很好判断查准率和召回率的数值计算标准(评估度量值),计算公式见下图:
(三)大数据原理Large data rationale
大量数据往往能大幅度提高学习算法的最终性能,而不在于你是否使用更高级的求解算法等,所以有这样的一句话:
"It's not who has the best algorithm that wins.It's who has the most data."
当然要基于两点前提假设:
1.假设样本的特征能够提供充足的信息进行预测;
你不可能指望只知道房子的面积来预测房价,不管你是不是房地产方面的专家;
2.假设样本能提供尽可能多的特征量;
特征量越多,越不容易出现欠拟合、高偏差的问题;
所以也有这样的结论成立:
1.数据量越大,高方差、过拟合问题越不可能发生;
2.特征量越多,高偏差、欠拟合问题越不可能发生;