周志华老师亲讲-西瓜书全网最详尽讲解-1080p高清原版《机器学习初步》
周志华机器学习(西瓜书)学习笔记(持续更新)
周志华《Machine Learning》学习笔记
分类和回归属于典型的监督学习问题,聚类属于无监督学习问题。
- 分类:训练数据已经有人为标记信息,计算机通过学习这些训练数据,把未出现在训练样本中的陌生的数据 分到已有的类别中的过程
- 聚类:训练数据中没有任何标记信息,计算机需要自行寻找特征,将这些数据分为几个簇,然后把陌生的数据分到计算机自己划分的几个簇中的过程
机器学习的目的:使学得的模型可以更好地适用于未知样本。
我们常说泛化性能优劣,即模型对于陌生数据的适用性的好坏。
一般我们假设全体数据在样本空间上满足一个未知的分布,那么学习的目的就可以认为寻找最契合这个分布的一个函数来把训练样本完美的分到各自的类中。一般情况下,训练样本越多,我们得到的关于该分布的信息就越多,这样就越有可能找到这个函数,也就越有可能通过学习活得具有强泛化能力的模型。
归纳和演绎是科学推理的两大基本手段,前者是从特殊到一般的“泛化”过程,即从具体的事实归结出一般性规律;后者则是从一般到特殊的“特化”,即从基础原理推导出具体状况。
学习过程可以看作是一个在所有假设组成的空间中进行搜索的过程,目的是找到与训练集匹配的假设。而现实中,可能会有多个假设和训练集一致,即存在一个与训练集一致的“假设集合”,称之为“版本空间”
机器学习算法在学习过程中对某种假设类型的偏好,称为归纳偏好
需要注意,任何一个机器学习算法都有其归纳偏好,否则将无法产生确定的学习结果
A、从数据中学得模型的过程称为“学习”或“训练”
B、训练过程中使用的数据称为“训练数据”,每一个样本称为一个“训练样本”,训练样本组成的集合称为“训练集”
C、学得模型对应了关于数据的某种潜在的规律,称为“假设”
D、学习过程就是为了找出数据的某种潜在规律,这个规律自身,一般称为“数据特征”
解析:学习过程是为了找出数据的某种潜在规律,这种规律自身一般称为假设;从数据中学得模型的过程称为学习,也可以称为训练;训练过程使用的数据称为训练数据,其中的样本称为训练样本。
A、一般地,预测任务是希望通过对训练集进行学习,建立一个从输入空间 x xx 到输出空间 y yy 的映射
B、对于二分类任务,一般令 y = { − 1 , + 1 } y={-1,+1}y={−1,+1}或 { 0 , 1 } {0,1}{0,1}
C、对于回归问题,一般 y = R y=Ry=R
D、预测任务不需要训练样本的的标记信息
解析:监督学习需要训练样本的标记信息
A、模型是通过学习算法得到的
B、机器学习通常解决高度不确定性和复杂性的问题
C、分类和回归是监督学习的代表
D、机器学习一定需要类别标记
解析:D 聚类等任务不需要类别标记
A、学得模型适用于新样本的能力称为“泛化”能力
B、机器学习一般有“独立同分布”假设
C、机器学习在只要见过的数据上做好就行了,未见过样本上的性能不重要
D、一般假设拿到的所有数据都来自一个潜在的分布
解析:C机器学习主要用于处理未来的新数据
何为一个好的模型,错误率低、精确度高、召回率高等指标都可以,但视具体任务和使用者需求而异。在评价模型性能时,我们更希望它泛化能力强。
实际希望的,是在新样本上能表现得很好的学习器。但可能出现的问题是:
测试集应该与训练集互斥,即测试样本尽量不在训练集中出现、未在训练过程中使用过。
通常,我们会得到一个含m个样例的数据集,如何通过适当处理,划分为训练集S和测试集T,有以下三种常见做法:
留出法即直接将数据集D划分为两个互斥的集合,其中一个作为训练集S,另一个作为测试集T,保证S∩T=∅且S∪T=D。
在划分训练集和测试集之后,根据在测试集上不同算法的表现选择最优的算法,然后再用该算法去在全部的数据M上训练的模型给用户。
交叉验证法即将数据集D划分为k个大小相似的互斥子集,即D=D1∪D2∪…∪Dk,Di∩Dj=∅(i≠j)。每个子集Di都尽可能保持数据分布的一致性,即从D中分层采样得到。然后每次用k-1个子集的并集作为训练集,剩下的那个子集作为测试集,这样就可以得到k组训练/测试集,从而进行k次训练和测试,最终返回这k次测试的均值。
留一法(Leave-One-Out,简称LOO):假定数据集D中有m个样本,令k=m,则会发现,m个样本只有唯一的划分方法来划分为m个子集——每个子集一个样本,所以留一法的训练集与数据集D相比只差一个样本,故留一法中被实际评测的模型与期望评估的用D训练出的模型很相似,因此,留一法的评估结果往往被认为较准确。
但是未必永远适用,记住NFL“没有免费的午餐”定理在机器学习各个环节都是适用的。
在留出法和交叉验证法中,由于保留了一部分样本作为测试,所以实际评估的模型中所使用的训练集比D小,而我们希望评估的是D训练出的模型,所以这必然会引入一些因训练样本规模不同而导致的估计偏差。留一法受训练样本规模变化的影响较小,但计算复杂度又太高了。
自助法是种较好的解决方案。自助法以自助采样(bootstrap sampling)为基础(自助采样也叫“可重复采样”与“有放回采样”):
给定包含m个样本的数据集D,我们对它进行采样产生数据集D’:每次从D中随机选一个样本,将其拷贝如D’中,再将其放回D中,重复m次,那么就可以得到包含m个样本的数据集D’。显然D中一部分样本会在D’中多次出现,而另一部分不出现,由一个简单的估计可以得到样本在m次采样中不被采到的概率约为
把D’当做训练集,D-D’作为测试集,则实际评估模型与期望评估模型都有m个训练样本,而我们仍然有数据总量1/3的样本用于测试,这样的测试结果,称为“包外估计”。
我们通常把学得模型在实际使用中遇到的数据称为测试数据,为了加以区分,
对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,即性能度量。性能度量反映了任务需求。
要评估学习器f的性能,就要把学习器预测结果f(x)和真实标记y进行比较。
本文已提到过的错误率和精度,是分类任务种最常用的两种性能度量,既适用于二分类任务,也适用于多分类任务
但是我们通常会有更复杂的需求,引入查准率和查全率与F1.
对于二分类任务,可将样例根据其真实类别与学习器预测类别的组合划分为真正例(true positive)、假正例(false positive)、真反例(true negative)与假反例(false negative)四种情形。分别对应为TP、FP、TN、FN。
TP:被模型预测为正类的正样本(实际为正,预测也为正)。
TN:被模型预测为负类的负样本(实际为负,预测也为负)。
FP:被模型预测为正类的负样本(实际为负,预测为正)。
FN:被模型预测为负类的正样本(实际为正,预测为负)。
查准率和查全率是一对矛盾的度量。一般,查准率高时,查全率往往偏低;而查全率高时,查准率偏低。考虑如何均衡两者,一种办法是F1度量
给定由d个属性描述的示例x=(x1; x2; ……;xd),其中xi是x在第i个属性上的取值,线性模型(linear model)试图学得一个通过属性的的线性组合来进行预测的函数,即
一般用向量形式写为
其中
线性模型形式简单、易于建模、有很好的可解释性。
给定数据集D = {(x1,y1),(x2,y2),…,(xm,ym)},其中xi = (xi1;xi1;…;xid),yi ∈R。线性回归(linear regression)试图学得一个线性模型以尽可能准确地预测实值输出标记。线性回归试图学得:
确定w和b 关键在于如何衡量f(x)和y之间的差别。均方误差是回归任务中最常用的性能度量,则可试图把均分误差最小化,即
均方误差具有很好的几何意义,它对应了常用的欧几里得距离或简称“欧氏距离”(Euclidean distance)。基于均方误差最小化来进行模型求解的方法称为最小二乘法(least square method)。在线性回归中,最小二乘法就是试图找到一条直线,使所有样本到直线上的欧氏距离之和最小。
求解w和b使均方误差最小化的过程,称为线性回归模型的最小二乘“参数估计”(parameter estimation)。可对E(w,b)分别对w和b求导,并令导数为0解得闭式(closed-form)解。
更一般的情形是如同先前提到的数据集D,样本由d个属性描述。此时我们试图学得:
称为“多元线性回归”(multivariate linear regression)。
类似的,可利用最小二乘法对w和b进行估计。为便于讨论,我们把w和b吸收入向量形式 w ^ \widehat{w} w = (w;b),相应的,把数据集D表示为m*(d+1)大小的矩阵X,其中每行对应于一个示例,该行前d个元素对应于示例的d个属性值,最后一个元素恒置为1,即
再把标记也写为向量形式,则有
对 w ^ \widehat{w} w 求导,并令其为0得 w ^ \widehat{w} w 最优解的闭式解。
如果XTX为满秩矩阵或者正定矩阵,那么令上式为零有
现实中XTX往往不是满秩矩阵,许多任务中会遇到变量的数目超过样例数的情况,导致X的列数多于行数,显然不满秩,此时会解出多个**w^**满足均方误差最小的条件,选择哪一个作为输出就是问题,常见的做法是引入正则化(regularization)项。
考虑能否让模型预测值逼近y的衍生物?例如,假设我们认为示例所对应的输出标记是在指数尺度上变化,则可将输出标记的对数作为线性模型逼近的目标,即lny=wTx+b。这就是对数线性回归(log-linear regression)。实质上是在求取 输入空间到输出空间的非线性函数映射。如上图所示,对数函数起到了将线性回归模型的预测值和真实标记联系起来的作用。
更一般地,考虑单调可微函数g(),这样得到的模型称为“广义线性模型”(generalized linear model)。显然,对数线性回归是广义线性模型在g()=ln()时的特例。
上一节讨论了如何使用线性模型进行回归学习,当要做的是分类任务是:只需找一个单调可微函数把分类任务的真实标记y和线性回归模型的预测值联系起来。
考虑二分类任务,其输出标记y∈{0,1},而线性回归模型产生的预测值z=wTx+b是实值,需要把实值z转换为0/1值。最理想的是“单位阶跃函数”(unit-step function)
即若预测值z大于零就判为正例,小于零则判为反例,预测值为临界值零则可任意判别。
但是从上图可知,单位阶跃函数不连续,则不能直接作为广义线性模型,我们希望能找到在一定程度上近似单位阶跃函数的“替代函数”(surrogate function),且能单调可微。
而对数几率函数(logistic function)正是这样一个常用的替代函数。
若将y视为样本x作为正例的可能性,则1-y是其反例可能性,两者的比值
y 1 − y \frac{y}{1-y} 1−yy称为“几率”(odds),反映了x作为正例的相对可能性。对几率取对数则得到“对数几率”(log odds,也称logit)
l n y 1 − y ln\frac{y}{1-y} ln1−yy
由此看出,实际上是在用线性回归模型的预测结果去逼近真实标记的对数几率,则其对应的模型称为“对数几率回归”(logistic regression,也称logit regression)。注意,虽然名字是“回归”,但实际是一种分类学习方法。
先验概率(prior probability):指根据以往经验和分析。在实验或采样前就可以得到的概率。
后验概率(posterior probability):指某件事已经发生,想要计算这件事发生的原因是由某个因素引起的概率。
下面来确定式中的w和b。把式中的y视为类后验概率估计p(y=1|x),则
可重写为:
显然有:
于是,可通过“极大似然法”(maximum likelihood method)来估计w和b。
对率回归模型最大化“对数似然”(log-likelihood)
即令每个样本属于其真实标记的概率越大越好。
线性判别分析(Linear Discriminant Analysis,简称LDA)是一种经典的线性学习方法。在二分类问题上因为最早由Fisher提出,也称“Fisher判别分析”。
LDA的思想非常朴素:给定训练样例集,设法把样例投影到一条直线上,使得同类样例的投影点尽可能接近、异类样例的投影点尽可能远离;在对新样本进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定新样本的类别。
若将数据投影到直线w上,则两类样本的中心在直线上的投影分别为wTμ0和wTμ1;若将所有样本点都投影到直线上,则两类样本的协方差分别为wT∑0w和wT∑1w。
要让同类样例投影点尽可能接近,可以让同类样例投影点的协方差尽可能小;而欲使异类样例的投影点尽可能远离,可以让类中心之间的距离尽可能大。同时考虑这两个因素,则可得到欲最大化的目标
定义“类内散度矩阵”(within-class scatter matrix)和“类间散度矩阵”(between-class scatter matrix),则上式J可重写为下图所示,即LDA欲最大化的目标
W的闭式解其实是N-1个最大广义特征值所对应的特征向量组成的矩阵。
若将W视为一个投影矩阵,则LDA将样本投影到了N-1维空间上,N-1往往远小于数据原有的属性数 ,于是,LDA也常被视为一种经典的监督降维技术。
【学长小课堂】什么是奇异值分解SVD(视频版20min)
奇异值分解(SVD)(文字版)
- 拉格朗日乘子法:即拉格朗日乘数法,其主要思想是引入一个新的参数 λ (即拉格朗日乘子),将约束条件函数与原函数联系到一起,使能配成与变量数量相等的等式方程,从而求出得到原函数极值的各个变量的解。
前面介绍的分类学习方法都有一个共同的基本假设,即不同类别的训练样例数目相当。
类别不平衡(class-imbalance)指分类任务中不同类别的训练样例数目差别很大的情况,类别不平衡需要处理的情况:小类比大类更重要。
本节以反例样例较多为例展开。类别不平衡学习的一个基本策略:再缩放(rescaling)现有技术主要有三类:
决策树也称判定树,根据上下文,有时指学习方法,有时指学得的树。
一般的,一颗决策树包含一个根节点,若干个内部节点和若干个叶节点。叶节点对应于决策结果,其他每个节点则对应于一个属性测试;
每个节点包含的样本集合根据属性测试的结果被划分到子节点中;
根节点包含样本全集。
从根节点到每个叶结点的路径对应了一个判定测试序列。决策树学习的目的是为了产生一颗泛化能力强,即处理未见示例能力强的决策树,其基本流程遵循简单且直观的“分而治之”策略。
一般而言,随着划分过程不断进行,我们希望决策树的分支节点所包含的样本尽可能属于同一类别,即节点的“纯度”越来越高。
假定当前样本集合D中第k类样本所占的比例为pk(k=1,2……,|y|),则D的信息熵定义如下:
假定离散属性a有V个可能的取值{a1,a2, …,aV},若使用a来对样本集D进行划分,则会产生V个分支节点,其中第v个分支结点包含了D中所有在属性a上取值为aV的样本,记为Dv。我们可根据上式计算出Dv的信息熵,再考虑到不同的分支结点所包含的样本数不同,给分支结点赋予权重|Dv|/|D|,即样本数越多的分支节点,其影响越大。
计算出用属性a对样本集D进行划分所获得的“信息增益”(information gain)。
一般而言,信息增益越大,则意味着使用属性a来进行划分所获得的“纯度提升”越大。从而我们可以用信息增益来进行决策树的划分属性选择。著名的ID3决策树学习算法就是以信息增益为准则来选择划分属性。
上述的信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好可能带来的不利影响,C4.5决策树算法不直接使用信息增益,而是使用“增益率”(gain ratio)来选择最优化分属性。
增益率准则对可取值数目较少的属性有所偏好,则C4.5并非直接选择增益率最大的候选划分属性,而是使用一个启发式(因为关键在于如何界定何为纯净):先从候选划分属性中找出信息增益高于平均水平的属性(抵消偏向于分支数多的情况),再从中选择增益率最高的。
CART决策树使用“基尼指数”(Gini index)来选择划分属性。数据集D的纯度可用基尼值来度量:
剪枝(pruning)是决策树学习算法对付过拟合的主要手段。在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多,就有可能因训练样本学得“太好”,以致于把训练集自身的一些特点作为所有数据都具有的一般性质而导致过拟合。因而,可通过主动去掉一些分支降低过拟合的风险。
预剪枝使得决策树的很多分支都没有“展开”
该情况中验证集精度虽无提高,但根据奥卡姆剃刀原则,剪枝后的模型更好。因此,实际的决策树算法在这种情况下通常要剪枝,本教程为绘图的方便,采取了不剪枝的保守策略。
一般情况下,后剪枝决策树的欠拟合风险很小,泛化性能往往会优于预剪枝决策树;
但后剪枝过程是在生成决策树之后进行的,并且要自底向上地对树中的所有非叶节点进行逐一考察,则其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多
由于训练集的局限性或噪声的因素,训练集外的样本可能比上图中的训练样本更接近两个类的分割界,使得很多划分超平面出现错误,而正中间受影响最小。换言之,这个划分超平面是最鲁棒的,对未见示例的泛化能力最强。
鲁棒性:即健壮性,指应对异常情况的处理能力。换言之,指一个系统或组织抵御或克服不利条件的能力
其中w=(w1;w2;……wd)为法向量,决定了超平面的方向;
b为位移项,决定了超平面和原点之间的距离。
显然,划分超平面可以被法向量w和位移b确定,下面将其记为(w,b)。样本空间中任意点x到超平面(w,b)的距离可写为上式r。
假设超平面(w,b)能把训练样本正确分类,即对于(xi,yi)∈D,
若yi=1,则有wT+b>0;若yi=-1,则有wT+b<0,令
如上个课件图所示,距离超平面最近的这几个训练样本点使上式的等号成立,将其称为“支持向量”(support vector),两个异类支持向量到超平面的距离之和为 γ = 2 ∣ ∣ w ∣ ∣ γ=\frac{2}{||w||} γ=∣∣w∣∣2将之称为“间隔”(margin)
欲找到具有“最大间隔”(maximum margin)的划分超平面,即找到能满足上上图中式子约束的参数w和b,使得γ最大。
为了最大化间隔,等价于最大化||w||-1,又等价于最小化||w||2。于是,可重写为上图式子,即支持向量机(Support Vector Machine,简称SVM)的基本型。
对上式使用拉格朗日乘子法可得到其“对偶问题”(dual problem)。具体而言,对上式的每条约束添加拉格朗日乘子αi≥0;则该问题的拉格朗日函数可写为下图所示。
解出α后,求出w和b即可得到模型。从对偶问题中解出的αi是式中的拉格朗日乘子,它恰好对应着训练样本(xi,yi).且有不等式约束,则上述过程需满足KKT(Karush-Kuhn-Tucker)条件。
对任意训练样本(xi,yi),总有αi=0或yif(xi)=1.当αi=0,则该样本将不会在式中的求和出现,也就不会对f(x)有任何影响;若αi>0,则必有yif(xi)=1,所对应的样本点位于最大间隔边界上,是一个支持向量。这表明支持向量机的一个重要性质:训练完成后,大部分的训练样本都无需保留,最终模型只和支持向量有关。(解的稀疏性)
如何求解该问题呢?
这是一个二次规划问题,可使用通用的二次规划算法来求解。但是,该问题的规模正比于训练样本数,会在实际任务中造成很大的开销。为了避免开销大的问题,大牛们通过利用问题本身的特性提出了很多高效算法,SMO(Sequential Minimal Optimization序列最小优化算法)是其中一个代表。
SMO的基本思路是先固定αi之外的所有参数,再求αi上的极值。由于存在约束
当固定αi之外的其他变量,则αi可由其他变量导出。故SMO每次选择两个变量αi和αj,并固定其他参数。因此,在参数初始化后,SMO不断执行如下两个步骤直至收敛:
在之前的讨论中,我们假设训练样本是线性可分的,即存在一个划分超平面能将训练样本正确分类。但在现实任务中,原始样本空间内也许并不存在一个能拿个正确划分两类样本的超平面,看例如下图的“异或”问题。
对这类的问题,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。例如下图中把原始的二维空间映射到一个合适的三维空间,就能找到一个合适的划分超平面。
且当原始空间是有限维,即属性数优先,则一定存在一个高维特征空间使样本可分。
求解上式涉及计算φ(xi)Tφ(xj),这是样本xi和xj映射到特征空间之后的内积。由于特征空间维数可能很高,甚至可能是无穷维,因此直接计算φ(xi)Tφ(xj)通常是困难的。为了避开这个问题,可设想这样的一个函数
即xi和xj在特征空间的内积就等于它们在原始样本空间中通过函数k(,)计算的结果。有了这样的函数,就不必直接去计算高维甚至无穷维 特征空间中的内积。则可重写为:
求解后可得
这里的函数k(,)就是“核函数”(kernel function)。上式表明模型最优解可通过训练样本的核函数展开,这一展式也称“支持向量展式”(support vector expansion)
上述定理表明,只要一个对称函数所对应的核矩阵半正定(恰满足距离矩阵的含义),它就能作为核函数使用。
事实上,对于一个半正定核矩阵,总能找到一个与之对应的映射φ。换言之,任何一个核函数都隐式地定义了一个称为“再生核希尔伯特空间”(Reproducing Kernel Hilbert Space,简称RKHS)的特征空间。
通过前面的讨论可知,我们希望样本在特征空间内线性可分,则特征空间的好坏对支持向量机的性能至关重要。需要注意的是,在不知道特征映射的形式时,我们并不知道什么样的核函数是合适的,而核函数也只是隐式地定义了这个特征空间。故“核函数选择”成为支持向量机的最大变数。若核函数选择不合适,则意味着把样本映射到了一个不合适的特征空间,很可能导致性能不好。(这方面有一些基本的经验,例如对文本数据通常采用线性核,情况不明时可先尝试高斯核)
常用的核函数如下:
还可以通过函数组合得到,例如:
前面的讨论中,我们一直假定训练样本在样本空间或特征空间中是线性可分的,即存在一个超平面能将不同类的样本完全划分开。但在现实任务中往往很难确定合适的核函数使得训练样本在特征空间中线性可分;退一步说,即便找到了某个核函数使训练集在特征空间中线性可分,也很难判定这个看似线性可分的结果不是由过拟合造成的。
缓解该问题的一个方法是允许支持向量机在一些样本上出错。故引入“软间隔”(soft margin)的概念。
具体而言,前面介绍的支持向量机形式是要求所有样本均满足约束,即所有样本都必须划分正确,这称为“硬间隔”(hard margin),而软间隔则是允许某些样本不满足约束
在最大化间隔的同时,不满足约束的样本应尽可能少(允许有一些不满足约束,但不能都不满足)。因而,优化目标可写为:
其中C>0(C越小,容忍度越大)是一个常数,l0/1是“0/1损失函数”
当C为无穷大时,使所有样本均满足约束;当C取有限值时,允许有一些样本不满足约束。
l0/1非凸、非连续,数学性质不太好,使得优化目标不易直接求解。因此人们通常用其他一些函数来代替l0/1,称为“替代损失”(surrogate loss)。替代损失函数一般具有较好的数学性质,例如通常是凸的连续函数且是l0/1的上街。常用的替代损失函数有:
引入松弛变量,可重写为下式。这就是常用的“软间隔支持向量机”
显然,下式中每个样本都有一个对应的松弛变量,用以表征该样本不满足约束的程度。但是这仍是一个二次规划问题。因此,可通过拉格朗日乘子法得到拉格朗日函数
αi,μi是拉格朗日乘子。
求偏导并变换可得对偶问题
与硬间隔的对偶问题的唯一差别:对偶变量αi的约束不同。
软间隔的KKT条件为
我们还可以把上式中的0/1损失函数换为别的替代损失函数来得到其他学习模型,这些模型的性质和所用的替代函数直接相关,但它们具有一个共性:优化目标中的第一项用来描述划分超平面的“间隔”大小,另一项用来表述训练集上的误差,可写为更一般的形式如下式。
C用于对二者进行折中。从经验风险最小化的角度来看,Ω(f)表述了我们希望获得具有何种性质的模型(例如希望获得复杂度较小的模型),这为引入领域知识和用户意图提供了途径;另一方面,该信息有助于消减假设空间,从而降低了最小化训练误差的过拟合风险。从该角度而言,上式称为“正则化”(regularization)问题,Ω(f)称为正则化项,C称为正则化常数。Lp范数(norm)是常用的正则化项。
考虑回归问题。给定训练样本D,希望学得一个回归模型,使得f(x)和y尽可能接近,w和b是待确定的模型参数。
对于样本(x,y),传统回归模型通常直接基于模型输出f(x)和真实输出y之间的差别来计算损失,当且仅当f(x)和y完全相同时,损失才为0;
支持向量回归(Support Vector Regression,简称SVR)假设我们能容忍f(x)和y之间最多有ε的偏差,即仅当f(x)和y之间的差别绝对值大于ε时才计算损失。这相当于以f(x)为中心,构建了一个宽度为2ε的尖阁待,若驯良样本落入此间隔带,则认为是被预测正确的
则SVR问题(支持向量回归)可形式化为
其中C为正则化常数,lc是图中的ε-不敏感损失(ε-insensitive loss)函数
引入松弛变量ξi和ξ^i重写为
神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。当我们在机器学习中谈论神经网络时指的是“神经网络学习”,或者说,是机器学习和神经网络这两个学科领域的交叉部分。
神经网络中最基本的成分是神经元(neuron)模型,即上述定义中的“简单单元”。在生物神经网络中,每个神经元和其他神经元相连,当它“兴奋” 时,就会向相连的神经元发送化学物质,从而改变这些神经元内的电位;若某神经元的电位超过了一个“阈值”(threshold),那么它就会被激活,即“兴奋”起来,向其他神经元发送化学物质。
将上述情形抽象出的简单模型,就是一直沿用至今的“M-P神经元模型”。在这个模型中,神经元接收到来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接(connection)进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过“激活函数”(activation function)处理以产生神经元的输出。(激活函数也称响应函数)
理想的激活函数是阶跃函数,它把输入值映射为输出值“0”或“1”,其中“0”对应于神经元抑制,“1”对应于神经元兴奋。但是阶跃函数具有不连续、不光滑等不太好的性质,因此实际常用Sigmoid函数作为激活函数。典型的Sigmoid函数如下图所示,它把可能在较大范围内变化的输入值挤压到(0,1)输出值范围内,因此有时也称为“挤压函数”(squashing function)
把多个这样的神经元按一定的层次结构连接起来,就得到了神经网络。只需将一个神经网络视为包含了许多参数的数学模型,这个模型是若干个相互(嵌套)代入而得。
感知机(Perceptron)由两层神经元组成,如下图
输入层接收外界输入信号后传递给输出层,输出层是M-P神经元,也称“阈值逻辑单元”(threshold logic unit)。
更一般地,给定训练数据集,权重wi(i=1,2,…,n)以及阈值θ可通过学习得到。阈值θ可视为一个固定输入为-1.0的“哑结点”(dummy node)所对应的连接权重wn+1,这样权重和阈值的学习可统一为权重的学习。感知机的学习规则非常简单,对训练样例(x,y),若当前感知机的输出为 y ^ \widehat{y} y ,则感知机权重将这样调整:
其中η∈(0,1)称为学习率(learning rate)。从上式可看出,若感知机对训练样例(x,y)预测正确,即 y ^ \widehat{y} y =y,则感知机不发生变化,否则将根据错误的程度进行权重调整。
需要注意的是,感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元(functional neuron),其学习能力非常有限。
若两类模式是线性可分的,即存在一个线性超平面能够将它们分开。
“非线性可分”意味着用线性超平面无法划分。
要解决非线性可分问题,需考虑使用多层功能神经元。例如下图中这个简单的两层感知机就能解决异或问题(与、或、非问题是线性可分的;异或问题是非线性可分的)。输出层和输入层之间的一层神经元,被称为隐层或隐含层(hidden layer),隐含层和输出层神经元都是拥有激活函数的功能神经元。
更一般地,常见的神经网络是形如下图的层级结构,每层神经元和下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接。这样的神经网络结构通常称为“多层前馈神经网络”(multi-layer feedforward neural networks)(“前馈”并不意味着信号不能向后传,而是指网络拓扑结构上不存在环或回路),其中输入层神经元接受外界输入,隐层和输出层神经元对信号进行加工,最终结果由输出层神经元输出;换言之,输入层神经元仅是接受输入,不进行函数处理,隐层和输出层包含功能神经元。则下图a通常称为“两层网络”,为避免歧义,本书称其为“单隐层网络”。只需包含隐层,即可称为多层网络。神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”(connection weight)以及每个功能神经元之间的阈值;换言之,神经网络“学”到的东西,蕴含在连接权和阈值中。
万有逼近性并非神经网络独有,例如傅里叶变换,泰勒展示等也具有。
强调神经网络具有万有逼近性是为了说明解是可以找到的,我们要做的是去逼近。
误差逆传播(error BackPropagation,简称BP)算法是迄今最成功的神经网络学习算法。现实任务中使用神经网络时,大多在使用BP算法进行训练。BP算法不仅可用于多层前馈神经网络,还可用于其他类型的神经网络,例如训练递归神经网络。但通常说“BP网络”时,一般是指用BP算法训练的多层前馈神经网络。
贝叶斯决策论(Bayesian decision theory)是概率框架下实施决策的基本方法,对分类任务来说,在所有相关概率都已知的理想情况下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记。下面以多分类任务来解释其基本原理。
假设有N种可能的类别标记,即y={c1,c2,……,cn},λij是把一个标记为cj的样本误分类为ci所产生的损失。基于后验概率P(ci|x)可获得将样本x分类为ci所产生的期望损失(expected loss),即在样本x上的“条件风险”(conditional risk)
先验概率(prior probability):指根据以往经验和分析。在实验或采样前就可以得到的概率。
后验概率(posterior probability):指某件事已经发生,想要计算这件事发生的原因是由某个因素引起的概率。
我们的任务是寻找一个判定准则h以最小化总体风险。显然,对每个样本x,若h能最小化条件风险,则总体风险也将被最小化,这就产生了贝叶斯判定准则(Bayes decision rule):为最小化总体风险,只需在每个样本上选择那个能使条件风险最小的类别标记,即
称h*为贝叶斯最优分类器(Bayes optimal classifier),与之对应的总体风险R(h*)称为贝叶斯风险(Bayes risk)。1 - R( h*)反映了分类器所能达到的最好性能,即通过机器学习所能产生的模型精度的理论上限。
想要使用贝叶斯判定准则来最小化决策风险,首先要获得后验概率P(c|x),但是在现实任务种这通常难以直接获得。从该角度来看, 机器学习要实现的是基于有限的训练样本集尽可能准确地估计出后验概率P(c|x)。主要有两种策略:
贝叶斯分类器 != 贝叶斯学习
极大似然估计(Maximum Likelihood Estimation,简称MLE),是一种根据数据采样来估计概率分布的经典方法。常用的策略是先假定总体具有某种确定的概率分布,再基于训练样本对概率分布的参数进行估计。运用到类条件概率p(x | c )中,假设p(x | c )服从一个参数为θ的分布,问题就变为根据已知的训练样本来估计θ。极大似然法的核心思想就是:估计出的参数使得已知样本出现的概率最大,即使得训练数据的似然最大。
基于贝叶斯公式来估计后验概率P(c|x)的主要困难在于:类条件概率P(c|x)是所有属性上的联合概率,难以从有限的训练样本直接估计而得。为了避免这个问题,朴素贝叶斯分类器(naive Bayes classifier)采用了“属性条件独立性假设”(attribute conditional independence assumption):对已知类别,假设所有属性相互独立。换言之,假设每个属性独立地对分类结果发生影响。则类条件概率P(c|x)可改写为:
相比原始贝叶斯分类器,朴素贝叶斯分类器基于单个的属性计算类条件概率更加容易操作,需要注意的是:若某个属性值在训练集中和某个类别没有一起出现过,这样会抹掉其它的属性信息,因为该样本的类条件概率被计算为0。因此在估计概率值时,常常用进行平滑(smoothing)处理,拉普拉斯修正(Laplacian correction)就是其中的一种经典方法,具体计算方法如下:
当训练集越大时,拉普拉斯修正引入的影响越来越小。对于贝叶斯分类器,模型的训练就是参数估计,因此可以事先将所有的概率储存好,当有新样本需要判定时,直接查表计算即可。
集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-classifier system)、基于委员会的学习(committee-based learning)等。
集成学习的一般结构为:先产生一组“个体学习器”(individual learner),再用某种策略将它们结合起来。个体学习器通常由一个现有的学习算法从训练数据产生,例如C4.5决策树算法、BP神经网络算法等,此时集成中只包含同种类型的个体学习器,例如“决策树集成”中全是决策树,“神经网络集成”中全是神经网络,这样的集成是“同质”的(homogeneous)。同质集成中的个体学习器也称为“基学习器”(base learner),相应的学习算法称为“基学习算法”(base learning algorithm)。集成也可包含不同类型的个体学习器,例如同时包含决策树和神经网络,这样的集成是“异质”的(heterogenous)。异质集成的个体学习器由不同的学习算法生成,就不再有基学习算法;相应的,个体学习器一般不称为基学习器,而称为“组件学习器”(component learner)或直接称为个体学习器。
集成学习通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能。这对“弱学习器”(weak learner)尤为明显,则集成学习的很多理论研究都是针对弱学习器(弱学习器指泛化性能稍微优于随即猜测的学习器。例如在二分类问题上精度略高于50%的分类器)进行的,而基学习器有时也直接称为弱学习器,但需注意的是,虽然从理论上来说使用弱学习器集成足以获得很好的性能,但在实践中出于种种考虑,例如希望使用较少的个体学习器,或是重用关于常见学习器的一些经验等,人们往往会使用比较强的学习器。
集成学习把多个学习器结合起来,如何能获得比最好的单一学习器更好的性能呢?考虑一个简单的例子:在二分类任务中,假定三个分类器在三个测试样本上的表现如下图所示,其中对号表示分类正确,❌表示分类错误,集成学习的结果通过投票法(voting)产生,即“少数服从多数”。这个例子体现出:要获得好的集成,个体学习器应“好而不同”,即个体学习器要有一定的“准确性”,即学习器不能太坏,且要有“多样性”(diversity),即学习器间要有差异。
考虑二分类的简单情形,假设基分类器之间相互独立(能提供较高的差异度),且错误率相等为 ε,则可以将集成器的预测看做一个伯努利实验,易知当所有基分类器中不足一半预测正确的情况下,集成器预测错误,所以集成器的错误率可以计算为:
此时,集成器错误率随着基分类器的个数的增加呈指数下降,但前提是基分类器之间相互独立,在实际情形中显然是不可能的,假设训练有A和B两个分类器,对于某个测试样本,显然满足:P(A=1 | B=1)> P(A=1),因为A和B为了解决相同的问题而训练,因此在预测新样本时存在着很大的联系。因此,个体学习器的“准确性”和“差异性”本身就是一对矛盾的变量,准确性高意味着牺牲多样性,所以产生“好而不同”的个体学习器正是集成学习研究的核心。现阶段有三种主流的集成学习方法:Boosting、Bagging以及随机森林(Random Forest),接下来将进行逐一介绍。
Boosting是一族可将弱学习器提升为强学习器的算法。这族算法的工作机制类似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直到基学习器数目达到事先指定的值T,最终把这个T个基学习器进行加权结合。
换言之,Boosting是一种串行的工作机制,即个体学习器的训练存在依赖关系,必须一步一步序列化进行。其基本思想是:增加前一个基学习器在训练训练过程中预测错误样本的权重,使得后续基学习器更加关注这些打标错误的训练样本,尽可能纠正这些错误,一直向下串行直至产生需要的T个基学习器,Boosting最终对这T个学习器进行加权结合,产生学习器委员会。
Boosting族算法最著名的代表是AdaBoost,因此下面主要是对AdaBoost算法进行介绍。AdaBoost使用的是指数损失函数,因此AdaBoost的权值与样本分布的更新都是围绕着最小化指数损失函数进行的。看到这里回想一下之前的机器学习算法,不难发现机器学习的大部分带参模型只是改变了最优化目标中的损失函数:如果是Square loss,那就是最小二乘了;如果是Hinge Loss,那就是著名的SVM了;如果是log-Loss,那就是Logistic Regression了。
AdaBoost算法的指数损失函数定义为:
可以看出:AdaBoost的核心步骤就是计算基学习器权重和样本权重分布,那为何是上述的计算公式呢?这就涉及到了我们之前为什么说大部分带参机器学习算法只是改变了损失函数,就是因为大部分模型的参数都是通过最优化损失函数(可能还加个规则项)而计算(梯度下降,坐标下降等)得到,这里正是通过最优化指数损失函数从而得到这两个参数的计算公式,具体的推导过程此处不进行展开。
Boosting算法要求基学习器能对特定分布的数据进行学习,即每次都更新样本分布权重,这里书上提到了两种方法:“重赋权法”(re-weighting)和“重采样法”(re-sampling)
重赋权法 : 对每个样本附加一个权重,这时涉及到样本属性与标签的计算,都需要乘上一个权值。
重采样法 : 对于一些无法接受带权样本的及学习算法,适合用“重采样法”进行处理。方法大致过程是,根据各个样本的权重,对训练数据进行重采样,初始时样本权重一样,每个样本被采样到的概率一致,每次从N个原始的训练样本中按照权重有放回采样N个样本作为训练集,然后计算训练集错误率,然后调整权重,重复采样,集成多个基学习器。
从偏差-方差分解来看:Boosting算法主要关注于降低偏差,每轮的迭代都关注于训练过程中预测错误的样本,将弱学习提升为强学习器。从AdaBoost的算法流程来看,标准的AdaBoost只适用于二分类问题。
Bagging是并行式集成学习方法,基于自助采样法(bootsrtap sampling)。所谓“并行”即基学习器的训练之间没有前后顺序可以同时进行,Bagging使用“有放回”采样的方式选取训练集,对于包含m个样本的训练集,进行m次有放回的随机采样操作,从而得到m个样本的采样集,这样训练集中有接近36.8%的样本没有被采到。按照相同的方式重复进行,我们就可以采集到T个包含m个样本的数据集,从而训练出T个基学习器,最终对这T个基学习器的输出进行结合。
算法流程:
可以看出Bagging主要通过样本的扰动来增加基学习器之间的多样性,因此Bagging的基学习器应为那些对训练集十分敏感的不稳定学习算法,例如:神经网络与决策树等。从偏差-方差分解来看,Bagging算法主要关注于降低方差,即通过多次重复训练提高稳定性。不同于AdaBoost的是,Bagging可以十分简单地移植到多分类、回归等问题。总的说起来则是:AdaBoost关注于降低偏差,而Bagging关注于降低方差。
随机森林(Random Forest 简称RF)是Bagging的一个扩展变体。RF在已决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。具体而言,传统决策树在选择划分属性时是在当前节点的属性集合(假设有d个属性)中选择一个最有属性;而在RF中 ,对基决策树的每个结点,先从该节点的属性集合中随机选择一个包含k个属性的子集,再从这个子集中选择一个最优属性用于划分。此处的参数k控制了随机性的引入程度,一般,推荐值k=log2d。
换言之,它的基学习器固定为决策树,多棵树也就组成了森林,而“随机”则在于选择划分属性的随机,随机森林在训练基学习器时,也采用有放回采样的方式添加样本扰动,同时它还引入了一种属性扰动,即在基决策树的训练过程中,在选择划分属性时,RF先从候选属性集中随机挑选出一个包含K个属性的子集,再从这个子集中选择最优划分属性。
这样随机森林中基学习器的多样性不仅来自样本扰动,还来自属性扰动,从而进一步提升了基学习器之间的差异度。相比决策树的Bagging集成,随机森林的起始性能较差(由于属性扰动,基决策树的准确度有所下降),但随着基学习器数目的增多,随机森林往往会收敛到更低的泛化误差。同时不同于Bagging中决策树从所有属性集中选择最优划分属性,随机森林只在属性集的一个子集中选择划分属性,因此训练效率更高。
在集成学习中,基学习器之间的多样性是影响集成器泛化性能的重要因素。因此增加多样性对于集成学习研究十分重要,一般的思路是在学习过程中引入随机性,常见的做法主要是对数据样本、输入属性、输出表示、算法参数进行扰动。
在“无监督学习”(unsupervised learning)中,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质和规律,为进一步的数据分析提供基础。
监督 | 无监督 |
---|---|
分类 | 聚类 |
回归 | 密度估计 |
无监督学习任务中,研究最多、应用最广的的“聚类”(clustering).聚类则是试图将数据集的样本划分为若干个互不相交的类簇,从而每个簇对应一个潜在的类别。
聚类直观上来说是将相似的样本聚在一起,从而形成一个类簇(cluster)。那首先的问题是如何来度量相似性(similarity measure)呢?这便是距离度量,在生活中我们说差别小则相似,对应到多维样本,每个样本可以对应于高维空间中的一个数据点,若它们的距离相近,我们便可以称它们相似。那接着如何来评价聚类结果的好坏呢?这便是性能度量,性能度量为评价聚类结果的好坏提供了一系列有效性指标。
我们知道属性分为两种:连续属性和离散属性(有限个取值)。对于连续值的属性,一般都可以被学习器所用,有时会根据具体的情形作相应的预处理,例如:归一化等;而对于离散值的属性,需要作下面进一步的处理:若属性值之间存在序关系,则可以将其转化为连续值,例如:身高属性“高”“中等”“矮”,可转化为{1, 0.5, 0}。 若属性值之间不存在序关系,则通常将其转化为向量的形式,例如:性别属性“男”“女”,可转化为{(1,0),(0,1)}。
在进行距离度量时,易知连续属性和存在序关系的离散属性都可以直接参与计算,因为它们都可以反映一种程度,我们称其为“有序属性”;而对于不存在序关系的离散属性,我们称其为:“无序属性”,显然无序属性再使用闵可夫斯基距离就行不通了。
对于无序属性,我们一般采用VDM进行距离的计算,例如:对于离散属性的两个取值a和b,定义:
于是,在计算两个样本之间的距离时,我们可以将闵可夫斯基距离和VDM混合在一起进行计算:
若我们定义的距离计算方法是用来度量相似性,例如下面将要讨论的聚类问题,即距离越小,相似性越大,反之距离越大,相似性越小。这时距离的度量方法并不一定需要满足前面所说的四个基本性质,这样的方法称为:非度量距离(non-metric distance)。