西瓜书第一章学习笔记

一、绪论

1.1 机器学习的定义

正如我们根据过去的经验来判断明天的天气,吃货们希望从购买经验中挑选一个好瓜,那能不能让计算机帮助人类来实现这个呢?机器学习正是这样的一门学科,人的“经验”对应计算机中的“数据”,让计算机来学习这些经验数据,生成一个算法模型,在面对新的情况中,计算机便能作出有效的判断,这便是机器学习。

另一本教材的作者Mitchell给出了一个形式化的定义,假设:

·      P算机程序在某任务类T上的性能。

·      T算机程序希望实现的任务类

·      E:表示经验,即史的数据集。

若该计算机程序通过利用经验E在任务T上获得了性能P的改善,则称该程序对E进行了学习。

1.2 机器学习的一些基本术语

假设我们收集了一批西瓜的数据,例如:(色泽=青绿;根蒂=蜷缩;敲声=浊响), (色泽=乌黑;根蒂=稍蜷;敲声=沉闷), (色泽=浅自;根蒂=硬挺;敲声=清脆)……每对括号内是一个西瓜的记录,定义:

·      所有记录的集合:数据集。

·      每一条记录为:一个例(instance)或本(sample)。

·      例如:色或敲声,个的特点特征(feature)或属性(attribute)。

·      对于一条记录,如果在坐标轴上表示,每个西瓜都可以用坐标轴中的一个点表示,一个点也是一个向量,例如(青绿,蜷缩,浊响),即每个西瓜为:一个特征向量(feature vector)。

·      一个本的特征数数(dimensionality),西瓜的例子3,当数非常大,也就是维数灾难

  在计算机程序学习经验数据生成算法模型的过程中,每一条记录称为一个“训练样本”,同时在训练好模型后,我们希望使用新的样本来测试模型的效果,则每一个新的样本称为一个“测试样本”。定义:

·      所有训练样本的集合训练集(trainning set),[特殊]

·      所有测试样本的集合测试集(test set),[一般]

 

在西瓜的例子中,我们是想计算机通过学习西瓜的特征数据,训练出一个决策模型,来判断一个新的西瓜是否是好瓜。可以得知我们预测的是:西瓜是好是坏,即好瓜与差瓜两种,是离散值。同样地,也有通过历年的人口数据,来预测未来的人口数量,人口数量则是连续值。定义:

·      预测值为离散值的问题为:分类(classification)。

·      预测值为连续值的问题为:回归(regression)。

 

在我们预测西瓜是否是好瓜的过程中,很明显对于训练集中的西瓜,我们事先已经知道了该瓜是否是好瓜,学习器通过学习这些好瓜或差瓜的特征,从而总结出规律,即训练集中的西瓜我们都做了标记,称为标记信息。但也有没有标记信息的情形,例如:我们想将一堆西瓜根据特征分成两个小堆,使得某一堆的西瓜尽可能相似,即都是好瓜或差瓜,对于这种问题,我们事先并不知道西瓜的好坏,样本没有标记信息。定义:

·      训练数据有标记信息的学习任务为:监督学习(supervised learning),容易知道上面所描述的分和回都是督学的范畴。

·      训练数据没有标记信息的学习任务为:无监督学习(unsupervised learning),常的有聚和关联规则

 

在判断是好瓜还是坏瓜的时候,可以看作一个在所在假设组成的空间中进行搜索的过程,搜索目标是找到与训练集“匹配”(fit)的假设,即可以将训练集中的样本判断正确的结果。学习过程基于有限样本集时,所得到的与训练集一致的“假设空间”,其中的策略有很多,比如自上而下,从一般到特殊,或者从下而上等等

·      科学推理的两大手段:归纳(induction)和演绎(deduction)

·      归纳(induction):泛化过程,从具体的事实归结出一般性规律

·      演绎(deduction):特化过程,从基础原理推演出具体状况

归纳偏好可看做学习算法自身在一个庞大的假设空间中对假设进行选择的启发式或“价值观”,对应了学习算法本身所做出的关于“什么样的模型更好”的假设,即算法的归纳偏好是否与问题本身匹配。

·      如果不针对特定的问题的话,任何算法从无穷种可能来说,好的和坏的最终的期望值是相同的,即最后的结果没有差别---天下没有免费的午餐定理(No Freedom Lunch Theorem 简称NFL)

·      同时,算法需要偏好,否则所有的假设将会被等效,无法产生确定的学习结果,因此算法需要针对有特定的问题并且有自身的偏好(这一点在回归学习的曲线当中会更加明显)

·      奥卡姆剃刀准则(Occam’s razor),即选出最简单的一个。但是这个如何确定最简单则需要进一步讨论

 

2 模型的评估与选择

2.1 误差与过拟合

我们将学习器对样本的实际预测结果与样本的真实值之间的差异成为:误差(error)。定义:

·      训练集上的差称为训练误差(training error)或经验误差(empirical error)。

·      测试集上的差称为测试误差(test error)。

·      器在所有新本上的差称泛化差(generalizationerror)。

显然,我们希望得到的是在新样本上表现得很好的学习器,即泛化误差小的学习器。因此,我们应该让学习器尽可能地从训练集中学出普适性的“一般特征”,这样在遇到新样本时才能做出正确的判别。然而,当学习器把训练集学得“太好”的时候,即把一些训练样本的自身特点当做了普遍特征;同时也有学习能力不足的情况,即训练集的基本特征都没有学习出来。我们定义:

·      能力过强,以至于把训练样本所包含的不太一般的特性都学到了,称过拟合(overfitting)。

·      能太差,训练样本的一般性尚未学好,称:欠合(underfitting)。

可以得知:在过拟合问题中,训练误差十分小,但测试误差教大;在欠拟合问题中,训练误差和测试误差都比较大。目前,欠拟合问题比较容易克服,例如增加迭代次数等,但过拟合问题还没有十分好的解决方案,过拟合是机器学习面临的关键障碍。

2.2 评估方法

在现实任务中,我们往往有多种算法可供选择,那么我们应该选择哪一个算法才是最适合的呢?如上所述,我们希望得到的是泛化误差小的学习器,理想的解决方案是对模型的泛化误差进行评估,然后选择泛化误差最小的那个学习器。但是,泛化误差指的是模型在所有新样本上的适用能力,我们无法直接获得泛化误差。

因此,通常我们采用一个“测试集”来测试学习器对新样本的判别能力,然后以“测试集”上的“测试误差”作为“泛化误差”的近似。显然:我们选取的测试集应尽可能与训练集互斥,下面用一个小故事来解释why:

假设老师出了10 道习题供同学们练习,考试时老师又用同样的这10道题作为试题,可能有的童鞋只会做这10 道题却能得高分,很明显:这个考试成绩并不能有效地反映出真实水平。回到我们的问题上来,我们希望得到泛化性能好的模型,好比希望同学们课程学得好并获得了对所学知识”举一反三”的能力;训练样本相当于给同学们练习的习题,测试过程则相当于考试。显然,若测试样本被用作训练了,则得到的将是过于”乐观”的估计结果。

2.3 训练集与测试集的划分方法

如上所述:我们希望用一个“测试集”的“测试误差”来作为“泛化误差”的近似,因此我们需要对初始数据集进行有效划分,划分出互斥的“训练集”和“测试集”。下面介绍几种常用的划分方法:

2.3.1 留出法

将数据集D划分为两个互斥的集合,一个作为训练集S,一个作为测试集T,满足D=S∪T且S∩T=∅,常见的划分为:大约2/3-4/5的样本用作训练,剩下的用作测试。需要注意的是:训练/测试集的划分要尽可能保持数据分布的一致性,以避免由于分布的差异引入额外的偏差,常见的做法是采取分层抽样。同时,由于划分的随机性,单次的留出法结果往往不够稳定,一般要采用若干次随机划分,重复实验取平均值的做法。

2.3.2 交叉验证法

将数据集D划分为k个大小相同的互斥子集,满足D=D1∪D2∪…∪Dk,Di∩Dj=∅(i≠j),同样地尽可能保持数据分布的一致性,即采用分层抽样的方法获得这些子集。交叉验证法的思想是:每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集,这样就有K种训练集/测试集划分的情况,从而可进行k次训练和测试,最终返回k次测试结果的均值。交叉验证法也称“k折交叉验证”,k最常用的取值是10。

与留出法类似,将数据集D划分为K个子集的过程具有随机性,因此K折交叉验证通常也要重复p次,称为p次k折交叉验证,常见的是10次10折交叉验证,即进行了100次训练/测试。特殊地当划分的k个子集的每个子集中只有一个样本时,称为“留一法”,显然,留一法的评估结果比较准确,但对计算机的消耗也是巨大的。

2.3.3 自助法

我们希望评估的是用整个D训练出的模型。但在留出法和交叉验证法中,由于保留了一部分样本用于测试,因此实际评估的模型所使用的训练集比D小,这必然会引入一些因训练样本规模不同而导致的估计偏差。留一法受训练样本规模变化的影响较小,但计算复杂度又太高了。“自助法”正是解决了这样的问题。

自助法的基本思想是:给定包含m个样本的数据集D,每次随机从D 中挑选一个样本,将其拷贝放入D’,然后再将该样本放回初始数据集D 中,使得该样本在下次采样时仍有可能被采到。重复执行m 次,就可以得到了包含m个样本的数据集D’。

这样,通过自助采样,初始样本集D中大约有36.8%的样本没有出现在D’中,于是可以将D’作为训练集,D-D’作为测试集。自助法在数据集较小,难以有效划分训练集/测试集时很有用,但由于自助法产生的数据集(随机抽样)改变了初始数据集的分布,因此引入了估计偏差。在初始数据集足够时,留出法和交叉验证法更加常用。

你可能感兴趣的:(西瓜书,机器学习)