机器学习-周志华(1-2章)
第一章 绪论
机器学习: 致力于研究如何通过计算的手段,利用经验来改善系统自身的性能。在计算机系统中,“经验”通常以“数据“形式存在,因此,机器学习所研究的主要内容,是关于在计算机上从数据中产生”模型“的算法,即”学习算法“。有了学习算法,我们把经验数据提供给它,他就能基于这些数据产生模型;在面对新的情况时,模型会给我们提供相应的判断。可以说机器学习时研究关于”学习算法“的学问。
1.1 基本术语:
数据集(data set):记录的集合。其中每条记录是关于一个事件或对象的描述,称为“示例”,“样本”
eg.总共100个西瓜
属性\特征(attribute\feature):反映事件或对象在某方面的表现或性质的事项。
eg.西瓜的特征:色泽、根蒂、敲声等
属性值(attribute value):属性上的取值。其张成的空间称为“属性空间(attribute space)”\“样本空间(sample space)”\“输入空间(sample space)”。
eg.西瓜的色泽有青绿、乌黑等。
eg.属性空间是属性值的全体集合,比如西瓜的三个属性(色泽、根蒂、敲声),张成3维空间,每个西瓜都在该空间中找到自己的坐标,每个点也对应一个"坐标向量",也称"特征向量"
数学表述
学习\训练(learning\training):从数据中学得模型的过程。是假设不断逼近真实的过程。
训练数据(training data):训练过程所使用的数据。
训练样本(training sample):训练所使用的样本。
训练集(training set):训练样本的集合。
假设(hypothesis):学得模型对应了关于数据的某种潜在规律。
真相\真实(ground truth):潜在规律自身。
标记(label):训练样本的“结果”信息,是判断,预测。
样例(example):带有标记的样本。
分类(classification):预测的是离散值的学习任务。
二分类(binary classification):只涉及两个类别。
多分类(multi-class classification):涉及多个类别。
回归(regression):预测的是连续值的学习任务
聚类(clustering):将训练集中的样本分为若干组,机器自己分组。每个组称为一个"簇"。
监督学习(supervised learning):知道样本的结果。
比如:分类+回归
无监督学习(unsupervised learning):不知道样本的结果。
比如:聚类
测试(testing):对学得模型,对其进行预测的过程。
泛化能力:学得模型适用在新样本上的能力。
1.2 假设空间
归纳:从特殊到一般的“泛化”过程,从具体的事实归结出一般性规律。
狭义:从训练数据中得到概念
广义:从样本中学习
演绎:从一般到特殊的"特化"过程,从基础原理推演出具体状况。
机器学习,是从样例中学习的过程。是归纳的过程。
机器学习过程看作一个在所有假设组成的空间中进行搜索的过程,搜索目标是找到与训练集“匹配”的假设,
版本空间:存在与训练集一致的假设集合。
1.3 归纳偏好
同一个数据集训练出了不同的模型,如何选择模型?
归纳偏好:机器学习算法在学习过程中对某种类型假设的偏好。
引导算法确立偏好的一般性原则:
奥卡姆剃刀(Occam's razor):若有多个假设与观察一致,则选最简单的那个
学习算法的期望性能相同:
没有免费的午餐定理(NFL:No free Lunch Theorem):脱离具体问题,空谈哪个算法更好,无意义
第二章 模型评估与选择
2.1 经验误差与过拟合
错误率:分类错误的样本数占样本总数的比例。
如果在m个样本中有a个样本分类错误,则错误率\(E=a/m\)
精度(accuarcy):精度=1-错误率
\(1-a/m\)
误差(error)\训练误差\经验误差:学习器的实际预测输出与样本的真实输出之间的差异。
泛化误差:在新样本上的误差。
过拟合(overfitting):把训练样本学得太好了,可能把训练样本自身的一些特点当做了所有潜在样本都会具有的一般性质,导致泛华性能下降。
造成因素:1、学习能力过于强大,将训练样本的自身特性学到。
解决:无法避免,只能减小
欠拟合(underfittinig):对训练样本的一般性质尚未学好。
造成因素:1、学习能力低下,没有学习到训练样本的一般特征。
解决:1、决策树中扩展分支;2、增加该训练轮数;
模型选择问题:算法、参数都会产生不同的模型,如何选模型?
理想方案:对模型的泛化误差进行评估,然后选择泛化误差最小的模型;但泛化误差没法直接获得,而训练误差又有过拟合现象;
利用测试集来测试学习群对新样本的判别能力,然后以测试集上的"测试误差"作为泛化误差的近似。
2.2 评估方法
测试集:测试学习器对新样本的判别能力。
测试集的选择
1.留出法(hold-out)
"留出法"直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T. \(D=S∪T,S∩T=∅\).在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计.
分层采样:保留类别比例的采样方式。
该方法需要多次重复试验,取平均值
2.交叉验证法(cross validation)/k折交叉验证(k-fold cross validation)
"交叉验证法" (cross alidation) 将数据D分为k个大小相似的互斥子集,\(D= D1∪D2∪...Dk, Di∩Dj = ø(i≠j)\),每个子集Di尽可能保持数据分布的一致性,即从D通过分层采样得到。然后,每次用k-1 子集的并集作为训练集,余下的那个子集作测试集;这样就可获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是k个测试结果的均值。
注意:将数据集D划分为k个子集同样存在多种划分方式.为减小因样本划分不同而引入的差别,k折交叉验证通常要随机使用不同的划分重复p次,最终的评估结果是这p次k折交叉验证结果的均值。
特别地:
假定数据集D中包含 m样本,令 k=m 则得到了交叉验证法的一个特例:留一法(Leave-One-Out,简称LOO).显然,留一法不受随机样本划分方式的影响,因为m个样本只有唯一的方式划分为m个子集一一每个子集包含一个样本;留一法使用的训练集与初始数据集相比只少了一个样本,这就使得在绝大多数情况下,留一法中被实际评估的模型与期望评估的用D训练出的模型很相似.因此,留一法的评估结果往往被认为比较准确.
3.自助法(bootstrapping)
留出法和交叉验证法,使用评估模型的训练集比D小,必然会引入一些因样本规模不同而导致的估计偏差。
留一法手训练样本规模的影响比较小,但计算复杂度太高
“自助法”以自助采样法(bootstrap sampling)为基础.给定包含m个样本的数据集D,我们对它进行采样产生数据集D': 每次随机从D中挑选一个样本,将其拷贝放入D',然后再将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行m次后,我们就得到了包含m个样本的数据集D',这就是自助采样的结果。
可见,D中有一部分样本会在 D'中多次出现,而另一部分样本不出现.
注意
自助法在数据集较小、难以有效划分训练/测试集时很有用;此外,自助法能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处.然而,自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差.因此,在初始数据量足够时,留出法和交叉验证法更常用一些.
4.调参与最终模型
什么是调参(parameter tuning)?
学习算法都有参数的设定,参数不同,学得模型的性能有着显著差别。因此,在模型评估与选择时,除了要选择合适的学习算法,还要对算法参数进行设定,即"参数调节"、"调参".
调参和算法选择的区别?如果采用性能最好的模型的参数作为结果不就行了。这样的考虑基本正确。
最终模型:在模型评估和选择过程中,预留了一部分数据作评估测试。在模型选择完成后,学习算法和参数配置已选定,此时应该用数据集D重新训练模型。这个模型在训练过程中使用了所有样本,这才是我们提交给用户的模型。
验证集(validation set):在模型评估与选择中,用于评估测试的数据集称为验证集.
测试集上的判别效果来估计模型在实际使用时的泛化能力,而把训练数据划分训练集和验证集,基于验证集上额性能来进行模型选择和调参
训练集相当于上课学知识
验证集相当于课后的的练习题,用来纠正和强化学到的知识
测试集相当于期末考试,用来最终评估学习效果
2.3 性能度量
性能度量(performance management):模型泛化能力的评价标准
描述:在预测任务中,给定样例集\(D=\{(x_{1},y_{1}),...,(x_{m},y_{m})\}\)其中\(y_{i}\)是示例\(x_{i}\)的真实标记。要评估学习器\(f\)的性能,就预测学习器预测结果\(f(x)\)与真实标记\(y\)进行比较。
补充:
1、回归任务最常用的性能度量是“均方误差”(mean squared error)
1.错误率与精度
分类任务中最常用的两种性能度量:错误率+精度
对样例集\(D=\{(x_{1},y_{1}),...,(x_{m},y_{m})\}\)来说,
错误率:
\(\mathbb{I}\)(.)是指示函数,若·为真则取值1,否则取值0.
精度:
注意:精度不一定是准确的,受样本数据分布的影响。
2.查准率、查全率和F1
混淆矩阵(confusion matrix):预测结果和真实值之间的对比。
TP:真正例;FP:假正例;TN:真反例;FN:假反例
右边P\N代表预测值,左边T\F是对预测值的判断;比如TN 预测反例,真实反例
查准率Percision
查全率Recall
举个形象的例子:
查准率:预测到的结果中有多少是匹配的;
查全率:匹配的结果中有多少是预测到的;
P-R曲线
案例:手写数字识别,分类器,二分类:是5 vs 不是5
1、混淆矩阵:
2、P-R反向变动关系原理
单独阈值下,查准、查全率分析
3、阈值-PR图像
各种阈值情况下,查准、查全率曲线
4、P-R图像
5、最优阈值的确定
- 方法一:使用平衡点Break-Even Point(BEP):P=R时,P与R的值
- 方法二:F1度量
- 方法三:\(F_{β}\)度量
- 注意部分
方法一:BEP(平衡点)
阈值-PR图像中,P线与R线相交的点
PR图像中,P=R直线与曲线相交点
方法二:F1度量-调和平均
想要P和R的比例更合理
视P,R如下:
\(P=\frac{1}{1+3}\),\(R=\frac{1}{1+2}\)
方法三:\(F_{β}\)度量-加权调和平均
其中\(β>0\)度量了查全率对查准率的相对重要性.
\(β=1\)时退化为标准的\(F_{1}\);
\(β>1\)时查全率有更大的影响;
\(β<1\)时查准率有更大的影响。
注意部分
\(F_{1}\)是基于查准率与查全率的调和平均(harmonic mean)定义的:
\(F_{β}\)则是加权调和平均:
与算数平均\(\frac{P+R}{2}\)和几何平均\(\sqrt{P×R}\)相比,调和平均更重视较小值
n个二分类实现的多分类问题
- 先分别计算,再求平均值
- 先平均在计算
1、先分别计算,再求平均值
\((P_{1},R_{1}),(P_{2},R_{2}),(P_{3},R_{3})...,(P_{n},R_{n})\)
2、先求平均值再计算
\(\overline{TP},\overline{FP},\overline{TN},\overline{FN}\)
3.ROC与AUC
1、ROC(Receiver Operation Characteristic):全称“受试者工作特征”曲线。根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以它们为横、纵坐标作图,就得到了ROC曲线。
ROC曲线的纵轴是真正率(TPR),横轴是假正率(FPR)
还是得用到混淆矩阵,给出理解
混淆矩阵 | P | N |
---|---|---|
T | TP(真正例) ① | FN(假反例) ② |
F | FP(假正例) ③ | TN(真反例) ④ |
注:①②③④,是相应的指代,在公式中方便理解。 |
ROC曲线下分析
ROC示意图:
2、AUC(Area under ROC Curve):ROC曲线下的面积
形式化看,AUC考虑的是样本预测的排序质量,因此它与排序误差有紧密连续,给定\(m^{+}\)个正例和\(m^{-}\)个反例,令\(D^{+}\)和\(D^{-}\)分别表示正、反例集合,则排序“损失”(loss)定义为:
\(l_{rank}计算\)举例分析:
D(正反例集合) | m(正例、反例) | P | N | |
---|---|---|---|---|
+ | D+(正例集合)[5,5,5,5,5,5] | m+(6个) | ① | ② |
- | D-(反例例集合)[8,7,3,9,2,6] | m-(6个) | ③ | ④ |
\(l_{rank}\)计算过程:
考虑每一对正反例,若正例的预测值小于反例,则记一个“罚分”,若相等,则记0.5个“罚分”。容易看出,\(l_{rank}\)对应的是ROC曲线上的面积:一个正例在ROC曲线上对应标记点的坐标是(x,y)则x恰是排序在其之前的反例所占的比例,即假正例率.因此有:
AUC公式分析:
ROC\阈值点 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
TPR | 0/6 | 1/6 | 2/6 | 3/6 | 3/6 | 4/6 | 5/6 | 5/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 |
FPR | 0/6 | 0/6 | 0/6 | 0/6 | 1/6 | 1/6 | 1/6 | 2/6 | 2/6 | 3/6 | 4/6 | 5/6 | 6/6 |
将表格中的数值,绘制成ROC曲线:
4.代价敏感错误率与代价曲线
1、为权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”(unequal cost)
2、在非均等代价下,我们所希望的不再是简单地最小化错误次数,而是希望最小化“总体代价”(total cost)
二分类代价矩阵:
“代价敏感”错误率(Error)为
相当于:
代价曲线:
在非均等代价下,ROC曲线不能直接反映出学习器的期望总体代价,但代价曲线可达该目的。
解释:
1、明确参数:\(p=\frac{m_{+}}{m}\)(正例占比)
2、代价曲线基本思路:
目的:对于一个模型,根据p不同,找到使得代价总期望最小的模型的阈值。
模型算法固定,阈值不固定,找到阈值从而使得模型固定下来,即固定模型的代价总期望,从而对比不同模型。
横轴:归一化的正概率代价期望
纵轴:归一化的总代价期望
过程:
给定p,给定模型
根据归一化代价期望的最小值,确定圈1圈2圈3圈4的比例
之前我们通过例子看出,阈值决定了这个比例
反过来说,这个比例确定了,阈值也就确定了
所以这时模型的阈值也对应确定下来了
代价曲线:
代码实践
https://github.com/Gievance/Python-MachineLearning/blob/master/Machine Learning note/代价曲线.ipynb
2.4比较检验
1、二项检验
有了评估方法和性能度量,可以对学习器的性能进行比较了吗?
不能,理由如下:
1、测试集上的性能与真正的泛化性能未必相同
2、测试集上的性能和测试集本身有很大关系,即使使用相同测试集,测试的结果也会有不同。
3、很多机器学习算法本身具有一定的随机性,即便用相同的参数设置在同一测试集上,其结果也会不同。
适当的方法对学习器的性能进行比较:统计假设检验(hypothesis test)
本节默认以错误率为性能度量,用\(\epsilon\)表示
\(即:P(\hat{\epsilon};\epsilon)=(\begin{matrix}m\\\hat{\epsilon×m}\end{matrix})\epsilon^{\hat{\epsilon}×m}(1-\epsilon)^{m-\hat{\epsilon}×m}\)
实践代码:https://github.com/Gievance/Python-MachineLearning/blob/master/Machine Learning note/假设检验-二项检验.ipynb
\(\alpha\):不可置信度
所以:
使用“二项检验(binomial test)”对"\(\epsilon \leq 0.3\)"(即泛化是否不大于0.3)这样的假设进行检验。
更一般的,考虑假设"\(\epsilon \leq \epsilon_{0}\)",则在\(1-\alpha\)的概率内所能观测到的最大错误率如下计算。这里的\(1-\alpha\)反映了结论的"置信度"(confidence),直观地来看,相应与二项分布示意图非阴影区域
若测试错误率\(\hat{\epsilon}\)小于临界值\(\overline{\epsilon}\),则在\(1-\alpha\)置信度下,认为\(\epsilon \leq \epsilon_{0}\)
小结:
假设泛化错误率为\(\epsilon \leq \epsilon_{0}\),在测试集样本中,以泛化错误率为测试集错误率,对测试集不同错误数的情况检验其概率,得到二项分布图,当真实测试集的错误样本数在\(1-\alpha\)区域内,则称有\(1-\alpha\)的置信度说,泛化错误率小于\(\epsilon_{0}\)
2、t检验
很多时候并非进行一次测试,而是通过多次重复留出法或是交叉验证法等进行多次测试,得到多个测试错误率,此时使用"t-检验".
假定我们得到k个测试错误率,\(\hat{\epsilon}_{1},\hat{\epsilon}_{2},...,\hat{\epsilon}_{k}\)
则平均测试错误率和方差为:
平均测试错误率\(\mu\):
方差\(\sigma^{2}\):
考虑k个测试错误率可看作泛化错误率\(\epsilon_{0}\)的独立采样,则变量:$ \tau_{t}=\frac{\sqrt{k}(\mu-\epsilon_{0})}{\sigma}$服从自由度为k-1的t分布:
对于假设"\(\mu=\epsilon_{0}\)"和显著度\(\alpha\),当测试错误率为\(\epsilon_{0}\)时,\(|\mu-\epsilon_{0}|\)位于置信区间(\(1-\alpha\))内,则假设成立,即可认为泛化错误率为\(\epsilon_{0}\).否则,假设不成立。
3、交叉验证t检验
4、McNemar检验
5、Friedman检验和Nemenyi检验
2.5偏差和方差
偏差:偏差指的是由模型训练得到的结果与真实值之间的差。
解释:偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力。如果偏差太大,我们就要缩小它,也就是缩小与真实值之间的差异,这样训练的效果会更好。
方差:方差指的是由不同训练集得到的结果之间的差异。期望预测是对不同训练集下的同一样本(测试集)的预测值取均值,而不是对一次训练的所有样本的预测值取均值。
解释:方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。
- 期望泛化误差=方差+偏差
- 偏差刻画学习器的拟合能力
- 方差体现学习器的稳定性
易知:方差和偏差具有矛盾性,这就是常说的偏差-方差窘境(bias-variance dilamma),随着训练程度的提升,期望预测值与真实值之间的差异越来越小,即偏差越来越小,但是另一方面,随着训练程度加大,学习算法对数据集的波动越来越敏感,方差值越来越大。换句话说:在欠拟合时,偏差主导泛化误差,而训练到一定程度后,偏差越来越小,方差主导了泛化误差。因此训练也不要贪杯,适度辄止。
小结:假设检验
2.6 比较检验
在比较学习器泛化性能的过程中,统计假设检验(hypothesis test)为学习器性能比较提供了重要依据,即若A在某测试集上的性能优于B,那A学习器比B好的把握有多大。 为方便论述,本篇中都是以“错误率”作为性能度量的标准。
2.6.1 假设检验
“假设”指的是对样本总体的分布或已知分布中某个参数值的一种猜想,例如:假设总体服从泊松分布,或假设正态总体的期望u=u0。回到本篇中,我们可以通过测试获得测试错误率,但直观上测试错误率和泛化错误率相差不会太远,因此可以通过测试错误率来推测泛化错误率的分布,这就是一种假设检验。
2.6.2 交叉验证t检验
2.6.3 McNemar检验
MaNemar主要用于二分类问题,与成对t检验一样也是用于比较两个学习器的性能大小。主要思想是:若两学习器的性能相同,则A预测正确B预测错误数应等于B预测错误A预测正确数,即e01=e10,且|e01-e10|服从N(1,e01+e10)分布。
因此,如下所示的变量服从自由度为1的卡方分布,即服从标准正态分布N(0,1)的随机变量的平方和,下式只有一个变量,故自由度为1,检验的方法同上:做出假设-->求出满足显著度的临界点-->给出拒绝域-->验证假设。
2.6.4 Friedman检验与Nemenyi后续检验
上述的三种检验都只能在一组数据集上,F检验则可以在多组数据集进行多个学习器性能的比较,基本思想是在同一组数据集上,根据测试结果(例:测试错误率)对学习器的性能进行排序,赋予序值1,2,3...,相同则平分序值,如下图所示:
若学习器的性能相同,则它们的平均序值应该相同,且第i个算法的平均序值ri服从正态分布N((k+1)/2,(k+1)(k-1)/12),则有:
服从自由度为k-1和(k-1)(N-1)的F分布。下面是F检验常用的临界值:
若“H0:所有算法的性能相同”这个假设被拒绝,则需要进行后续检验,来得到具体的算法之间的差异。常用的就是Nemenyi后续检验。Nemenyi检验计算出平均序值差别的临界值域,下表是常用的qa值,若两个算法的平均序值差超出了临界值域CD,则相应的置信度1-α拒绝“两个算法性能相同”的假设。
下一章:
3-4