人工智能西瓜书学习笔记(三)——线性模型

三、线性模型
1.基本形式
线性模型试图学的一个通过属性的线性组合来进行预测的函数,即f(x)=w1x1+w2x2+…+wdxd+b,一般向量形式为f(x)=wx+b,其中w=(w1,w2…wd)。在w和b学得之后,模型就得以确定。
个人理解:d的个数即训练集中特征的个数,然后每个特征可以提供一个wi,当所有的wi确定的时候,就可以得到一个完整的样本描述,这里学习器的形式就是一个线性组合,一个线性模型。但是肯定有很多是不能通过简单的线性组合达到的,而且线性组合不能预测出突变的情况和多可能情况。线性组合是确定的,一定的。
2.线性回归
(1)“线性回归”(linear regression)试图学得一个线性模型以尽可能准确地预测实值输出标记。假设只有一个属性的时候。线性回归试图学习得到:f(xi)=wxi+b,使得f(xi)≈yi。现在关键问题是——如何衡量f(x)和yf(x)和y之间的差别。之前提到过的均方误差是回归任务中最常用的性能指标,我们可以试图让均方误差最小。即让
人工智能西瓜书学习笔记(三)——线性模型
最小
(2)均方误差有非常好的几何意义,应用了欧氏距离(Euclidean distance)。基于均方误差最小的方法来模型求解的方法就是我们熟悉的“最小二乘法”(least square method)。最小二乘法的几何意义就是试图找到一条直线,让所有样本到直线的距离之和最小。
(3)求解w和b使得
人工智能西瓜书学习笔记(三)——线性模型
最小化的过程,称为线性回归模型的最小二乘“参数估计”,将E分别对w和b求导后可以得到w和b的最优解的闭式解:
人工智能西瓜书学习笔记(三)——线性模型
其中
人工智能西瓜书学习笔记(三)——线性模型
为x的均值
(4)当有多个属性的时候,我们试图学得f(xi)=wxi+b,使得f(xi)≈yi,此时的w和xi都是向量形式,类似的可以用最小二乘法来对w向量和b进行估计,可以把b放入到w向量中构成(w;b)的形式,相应的,把数据集D表示为一个m x (d+1)大小的矩阵,其中每行对应于一个示例,前d个元素对应于示例的d个属性值,最后一个元素恒置为1,再把标记也写成向量的形式,类似也可以得到相同的表示:
人工智能西瓜书学习笔记(三)——线性模型
*矩阵乘法
线性模型虽然简单,但是有很多的变化。假设我们认为示例所对应的输出标记是在指数尺度上变化,那就可将输出标记的对数作为线性模型逼近的目标,即:
人工智能西瓜书学习笔记(三)——线性模型
即对数线性回归,实际上是在试图让e的次方逼近y。在形式上认识线性回归,但实质上已经是在求取输出空间到输出空间的非线性函数映射。这里的对数函数起到了将线性回归模型的预测值与真实标记联系的作用。
更一般的,考虑单调可微函数g(·),令,得到的模型称为广义线性模型,其中g连续且充分光滑。

3.对数几率回归
(1)只需要找一个单调可微函数将分类任务的真实标记y与线性回归模型的预测值联系起来就可以进行分类任务。考虑二分类任务,其输出标记为{0,1},而线性回归模型产生的预测值是实数值,于是我们需要将是指转换为0/1值。
个人理解:这里有关于数值类型的知识:数值类型有实数值(一般来讲是线性回归方程直接计算得到的数值?)、序数值(比方说高中低被人为地转换为{1,0.5,0}来进行表示?)和枚举值(若有k个属性值,则转换为k维向量,比方说红黄蓝可以转换为{0,0,1}{0,1,0}{1,0,0})。
最理想的是“单位阶跃函数”,即若预测值大于0就判为正例,小于0则为反例,预测临界值则可以任意判别。但由于单位阶跃函数不连续,因此不能直接用作式中的单调可微函数,由此我们希望找到能在一定程度上近似单调阶跃函数的代替函数,并希望他单调可微,对数几率函数就是一个常用的替代函数:
个人理解:是不是说,我们通过线性方程让算法给我们一个实数值,然后通过回归方程,即这个单调可微函数来进行分类,由此进行标记?
人工智能西瓜书学习笔记(三)——线性模型
可以看出,对数几率函数是一种“sigmoid”函数,即形似S的函数,他将z值转换为一个接近0或1的y值,并且其输出值在z=0附近变化很陡,代入后可以得到:
人工智能西瓜书学习笔记(三)——线性模型
如果将y看做样本x作为正例的可能性吗,则1-y为反例可能性,两者的比值称作“几率”,反映了x作为正例的相对可能性。取对数就得到“对数几率”。因此为对数几率回归。
注意,虽然被称作回归,但实际上就是一种分类学习方法。
:这里后面还有一大堆的数学验算,但我没有看懂,大致意思是通过概率学方法计算出对数几率回归方程中的w和b的参数值

4.线性判别分析LDA
(1)是一种经典的线性学习方法,在二分类问题上最早由Fisher提出,亦称“Fisher判别分析”。具体思想是给定训练样例集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近、异类样例的投影点尽可能远离,再对新样本进行分类时,将其投影到同样的直线上,再根据投影点的位置类确定新样本的类别。
个人理解:上面的线性回归方程是f(x)函数,而这个线性判别分析就是隐函数g(y)函数,用来判别正例反例。
那么,当给定数据集D={(xi,yi)},yi∈{0,1},令Xi、μi、Σi分别表示第i类示例的集合、均值向量、协方差矩阵,那么正例反例两类样本的中心在直线上投影分别为人工智能西瓜书学习笔记(三)——线性模型人工智能西瓜书学习笔记(三)——线性模型;若将所有样本点都投影到直线上,则两类样本的协方差分别为
欲使同类样例的投影点尽可能接近,可以让同类样例投影点的协方差尽可能小,是异类样例的投影点尽可能远离,可以让类中心之间的距离尽可能大。同时考虑两者,则可得到欲最大化的目标如下:
人工智能西瓜书学习笔记(三)——线性模型
定义“类内散度矩阵”
人工智能西瓜书学习笔记(三)——线性模型
以及“类间散度矩阵”
人工智能西瓜书学习笔记(三)——线性模型
则原始J可写为:
人工智能西瓜书学习笔记(三)——线性模型
这就是线性判别分析LDA欲最大化的目标,即人工智能西瓜书学习笔记(三)——线性模型人工智能西瓜书学习笔记(三)——线性模型的“广义瑞利商”
(2)值得一提的是,LDA可从贝叶斯决策理论的角度来诠释,并可以证明,当两类数据同先验、满足高斯分布且协方差相等时,LDA可达到最优分类,这里有一个“全局散度矩阵”其中μ是所有示例的均值向量
人工智能西瓜书学习笔记(三)——线性模型

5.多分类学习
(1)有些二分类学习方法可直接推广到多分类问题,但更多情形下,我们是基于一些基本策略,利用二分类学习器来解决多分类问题。多分类学习的基本思路是“拆解”,即将多分类任务拆分为若干个二分类任务求解。先对问题进行拆分,然后为拆出的每个二分类任务训练一个分类器,在测试时对这些分类器的预测结果进行集成以获得最终的多分类结果。
最经典的拆分策略有三种:“一对一(OvO)”、“一对其余(OvR)”和“多对多(MvM)”。
在给定数据集D={(x1,y1)…(xm,ym)},yi∈{C1,…,CN}。
OvO会将这N个类别两两配对,从而产生N(N-1)/2个二分类任务,如为区分类别Ci和Cj训练一个分类器,把D中的Ci作为正例,将Cj作为反例,在测试阶段,新样本将会同时给所有分类器,于是我们将得到N(N-1)/2个结果,最终结果通过投票产生,即把预测的最多的结果作为分类的最终结果。
OvR则是每次将一个类的样例作为正例、所有其他类的样例作为反例来训练N个分类器,在测试的时候若仅有一个分类器预测为正类,则对应的类别标记作为最终分类结果,若有多个则考虑各自分类器的预测置信度,选择置信度最大的类别作为分类结果。
人工智能西瓜书学习笔记(三)——线性模型
MvM是将若干各类作为正类,若干个其他类作为反类,其正类和反类的构造必须有特殊的设计,不能随意选取,例如“纠错输出码”:
ECOC(Error Correcting Output Codes,纠错输出码)作为输出表示,用于多分类学习任务。主要思想是,通过事先分别为kk类类别定义一串编码序列(code word)。在分类的时候,只需比较待分类样本与各串编码的差异程度(distance measure)。
主要工作有两步:
编码:对N个类别做M次划分,每次划分将一部分类别划为正类,一部分作为反类,从而形成一个二分类训练集,总共产生M个二分类训练集
阶码:M个分类器分别对测试样本进行预测,组成一个编码,将这个预测编码与每个类别各自的编码进行比较,返回其中距离最小的类别作为最终的预测结果。
类别划分通过“编码矩阵”指定,编码矩阵有多种形式,常见的主要有二元码和三元码。前者将每个类别分别指定为正类和反类,后者在正类反类之外还可以指定“停用类”。在解码阶段,各分类器的预测结果联合起来形成了测试样例的编码,该编码与各类对应的编码进行比较,将距离最小的编码作为预测结果,距离有“海明距离”和“欧氏距离”
人工智能西瓜书学习笔记(三)——线性模型
个人理解:如图所示,这里每一行代表一个类的编码,每一列代表一种学习器,这个图就是一个典型的四类别二元ECOC码,C1类的编码为+1-1-1-1而C2类的编码为-1+1-1-1,依次类推。学习器1(第一列)就是仅将第一类当做正类,其余二三四类当做负类训练出来的。在进行预测的时候,通过使用L(列数)个分类器,可以得到L个二分类结果,这些结果穿起来得到了测试样例的ECOC码,将这个码和每个类别在表格中的码进行比较,距离最小的类别将最为最终分类类别。
“海明距离”就是数出两个码不相同的位数,如“+1-1-1-1”和“-1+1-1-1”就是2
“欧式距离”就是
人工智能西瓜书学习笔记(三)——线性模型
如“+1-1-1-1”和“-1+1-1-1”就是
人工智能西瓜书学习笔记(三)——线性模型
那么,ECOC 为什么称为“纠错输出码”?从上面这个这个最简单的 One-vs-Rest 的 codebook 上看不出这样的好处,不过下面让我们再把 code length 增大一点,看如下的 codebook :
人工智能西瓜书学习笔记(三)——线性模型
可以看到,我们在原来的基础上增加了三个二分类器。这样一来,不同类别所对应的code之间的海明距离也增大了,比如,第一类和第二类之间的海明距离现在变成了4,于是这个codebook也就具有了一定的错误修正的能力。比如说,属于第三类的一个数据点 x ,理想情况下,所有的二分类器都预测正确,将会得到code -1-1+1-1-1+1+1,但是如果中途发生了错误,例如,第三个分类器预测错误,得到了结果-1,那么code变成-1-1-1-1-1+1+1,不过,计算该code和四个类别的code的海明距离会得到3、3、1、3,选择距离最小的类别仍得到第三类。所以,ECOC当编码距离足够长时,能够容忍其中小部分发生错误而不影响最终结果
原理为:若不同类别的编码之间的距离很大,那么某个类别对应的正确编码即使在一些位上发生错误,从距离上来看仍最接近原来的编码(发生错误的位数小于类别间相互距离的一半),就能够分类正确。于是设计原则为:尽量使得任意两个类别的编码之间的距离的最小值达到最大。理论上讲任意两个类别之间的编码距离越远,纠错能力越强。
当然,对于三元ECOC码表实际上就类似于ECOC版本的OvO,如图:
人工智能西瓜书学习笔记(三)——线性模型
个人理解:在+1-1之外,加入了0,和之前一样,每一列对应一个二分类器,+1对应正类,-1对应负类,0表示在这里忽略该类,例如第一列就表示训练一个用于区分第一类和第二类的二分类器,而忽略第三类和第四类,以此类推。其余的和二元码表一样。

6.类别不平衡问题
(1)之前的学习方法有一个共同的基本假设,即不同类别的训练样本数目相当。如果不同类别的训练样例数目有差别,则对学习过程影响很大,如有99个反例而只有1个正例,那么学习方法只需返回一个永远将新样本预测为反例的学习器。类别不平衡就是指分类任务中不同类别的训练样例数目差别很大的情况。个人理解,这里不是针对我们的g函数进行的修改,而是直接对样本进行修改,从根本上进行调整。
(2)在我们使用
人工智能西瓜书学习笔记(三)——线性模型
对新样本x进行分类时,事实上是在用预测出的y值与一个阈值进行比较,例如通常在y>0.5的时候判别为正例,否则为反例。y实际上表达了正例的可能性,几率
人工智能西瓜书学习笔记(三)——线性模型
反映了正例可能性和反例可能性比值,阈值设置为0.5反映了分类器认为真实正反例可能性相同,即分类器决策规则为:

人工智能西瓜书学习笔记(三)——线性模型
则判别为正例。
当训练集中正例和反例的数目不同时,令m表示正例数目,n表示反例数目,则观测几率是
人工智能西瓜书学习笔记(三)——线性模型
,由于我们通常假设训练集是真实样本总体的无偏采样,因此观测几率就代表了真实几率,因此只要分类器的预测几率高于观测几率就应该判定为正例,即:

人工智能西瓜书学习笔记(三)——线性模型
则判别为正例
但由于我们的分类器是基于1为判别的,所以需要对其预测值进行调整,使其在基于1的时候实际上是在执行2式,只需令:
人工智能西瓜书学习笔记(三)——线性模型
,即“再缩放”
由于“训练集是真实样本总体的无偏采样”这个假设很难成立,由此再缩放实际上很难实现。即我们未必能有效地基于训练集观测几率来推断出真实几率。现一般通过三种方法来进行再缩放:一种是直接对训练集中的反类样例进行“欠采样”,即去除一些反例使得正例反例数目接近,然后进行学习;二种是对训练集中的正例进行“过采样”,即增加一些正例使得正例反例数目接近,然后进行学习;三种是直接基于原始训练集进行学习,但在使用训练好的分类器进行预测时,将上式嵌入到决策过程中,称为“阈值移动”。
个人理解:阈值移动是对g函数进行修改。而欠采样和过采样是针对样本进行修改。个人理解这里对样本的修改不会修改每个样本的属性值,所以对于学习器来说,仅仅是学习样本的数目进行了增加,而没有对样本的属性进行改变,所以不会影响到学习器的参数变换。