逻辑回归和支持向量机的区别(支持向量机是回归算法吗)

http://www.itjxue.com  2023-01-25 05:12  来源:未知  点击次数: 

4. 为数据寻找合适的模型

Fundamental concepts: 基于数据寻找最佳的模型参数;选择数据挖掘的目标;目标函数(objective functions);损失函数(loss functions)。

Exemplary(典范的) techniques: 线性回归(linear regression);逻辑回归(logistics regression);支持向量机(support-vector machines)。

参数学习(parameter learning)or参数化建模(parametric modeling):通过调整参数,让模型能够最大程度地匹配数据的过程,叫做参数学习或参数化建模。

参考图4-1,创造同质性区域的目的是根据已知的数据来预测新数据会落在哪个区域当中,此时我们知道了他落在哪个区域后,我们便可根据区域和目标变量的关系来预测这条新数据的目标变量(target variable)是·还是+号。

通过以上方法我们可以预见到,可能会有更好的分割方法几乎完美地对不同目标变量的结果进行预测,而且这条线不一定要与坐标轴直接垂直,就想下图所示:

上图的方式叫做线性分类,他的本质是对已知的各变量进行加权后的求和,后续内容将对此做详细介绍。

通过一元二次函数来构造,可知上图4-3中的直线可表示为:

如果元素x是在线的上方,我们可以预测他是+号结果,如果在下方我们可以预测他是·结果。

等式4-1,分类函数:

这被称为线性辨别,并且这个函数是一个各个attributes的一个加权求和的结果。

在2元情况下,这个分割是一条线,在3元的情况下,这个分割就是通过一个分割面来实现的,在更高维度时,这个分割的形式就是一个超平面(hyperplane)。而我们所关注的,仅仅是目标变量如何能表示成各个变量的一个加权的求和结果。

由此可以看出,线性化模型是多变量监督学习分割的一个特殊形式,监督分割的目的依然是将样本集根据变量进行分割,而将数值化的变量引入的目的是创造一个他们之间关系的数学函数。

等式4-2,一般性线性模型:

而4-1中的公式可被表示为如下形式:

我们只需要检查 的正负性,就可以预测元素x的目标变量结果。

像上图所示,我们应该怎样选到最合适的那一条线来当做模型呢?

逻辑回归做的并不是回归的事情,逻辑回归实际上是用于给概率预测进行分类。

线性回归、逻辑回归、支持向量机都是在给数据建模时的相似工具,主要的区别是这三个技术方式每一个都使用一个不同的目标函数。

有些时候我们不满足于对样本进行分类定性,而是要得出这个样本与这个类别的匹配程度有多少。

接下来我们将使用? 逻辑回归? 的方法来对一个用户churn概率的问题进行分析。

考虑公式4-2( )的情形,当x处在决策线(x轴)上时 =0,当x靠近决策线时 的值会很小,当x在+方向上离决策线很远时 的值会很大,这样就通过 的值得出了一个每个样本属于分类的匹配度的排名。

简短来说,支持向量机就是线性判别;概括来说,SVMs是基于公式4-2( )中线性函数的各个特征来对样本进行分类的。

概念介绍:非线性支持向量机(nonlinear support vector machines),非线性支持向量机,将线性支持向量机的函数当做变量来使用,故可描述为:使用新变量(已有线性判别函数)组成的线性判别函数,对于最初的原始变量来说就是一个非线性判别函数,即非线性支持向量机。

支持向量机:相比于找到分割样本集的直线,支持向量机更偏好于找到能够满足分割样板的最宽的区间,如下图所示:

在SVM的观点中,margin越宽越好,一旦找到最宽的margin值,那么这个线性margin面积的中线就是最佳的线性判别函数,上图中两条虚线中间的距离叫做margin,SVM的目标就是最大化margin,即最大化平行边线间的距离。

对于SVM机制的解释为,鉴于得到的是有限数据,更多未知数据可能比学习集数据更靠近中线,落在margin内,甚至落在中线的另一侧,所以为了减小这种可能性,需要采取最大化margin的判断思路,来得到margin中线这样的一条分割判定函数线。

另一个对SVM的理解是,如何应对落在判定函数线反侧的特异数据点,图4-2中的数据点没办法通过一条线进行完美的分割,当然绝大多数情况下的数据集都是没办法一条线完美分割的,这些降落在margin内或中线对侧的错误的点,这里引出一个概念损失函数。

“损失”在整个数据科学中都被广泛运用当做错误惩罚。损失函数决定基于模型的预测值多少惩罚应该被分配到每个样本上,在此处上下文中,是基于点到分界中线的距离。

有些损失函数比较常用,如图4-9中所示:

图4-9中,横轴是到分割中线的距离,预测错误的点具有正值的距离数值,而预测正确的点具有负值的距离数值(图中的选择是任意的)。

hinge loss(铰链损失函数)

支持向量机经常使用铰链损失函数,名字的由来就是函数图形看起来像是铰链。铰链损失函数中,当一个元素不在margin的错误一侧时不产生损失,仅当某个元素在分割线的错误一侧并且超出了margin的范围时,才会产生正值的损失值。同时,损失值会随着这个元素离分割线的距离增加而线性增加,因此,惩罚点数越多、点的距离和分割线越远,损失值就越大。

zero-one loss(0-1损失函数)

和名字的意思一致,正确的决策分配一个为0的损失,错误的决策分配一个为1的损失。

squared error(平方误差)

考虑一个不一样的损失计算方法,平方误差将损失正比于惩罚点到分割线的距离的平方。平方误差常用于数字值预测(回归),而不是分类预测。平方误差对错误结果可以产生显著的预测惩罚值(损失值)。在分类预测中,平方误差法会给落在错误侧的元素很大的惩罚值(损失值)。不幸的是,在分类预测当中,平方误差法也会给落在正确一侧的原处点很大的惩罚值(不就是平方结果没有正负号么……)。对于大多数商业问题,在分类或类别可能性预测的场景下使用平方误差法,会违背商业目标的原则。

线性回归函数的函数式和线性判别函数的函数式一样,都是等式4-2,如下:

线性回归要做的内容就是,根据学习集数据,找到一个线性预测公式 ,使得学习集中的各元素到此线的距离之和最小。

如果预测值是10,实际值是12或8,那么错误值就是2,这个2被称为绝对误差(absolute error),然后我们就可以通过训练集的数据去最小化绝对误差的总和,或者绝对误差的平均值,这很有意义,但常规的线性回归并不是用这样的步骤来执行的。

标准的线性回归使用最小化误差平方结果的方式来执行,因此得名“最小平方”回归。使用最小平方和的方式主要是因为这个方法简单方便好算。

平方误差法有一个天然的缺陷,就是边远的数据点会对函数结果产生严重的扭转。使用绝对值误差法相比于平方误差法,受边缘点的影响会小很多。

逻辑回归就是用赔率来代替事情发生的概率来做预测,比如,一件事发生的概率是80%不发生的概率是20%那么赔率(odds)就是80:20或者4:1。但赔率的分布范围是零到正无穷,但根据点到分割线的距离来判断概率(离线越远概率越大)的话,距离值的分布范围是负无穷到正无穷,两者范围不符,故采用取对数的形式来进行变形,就是(log-odds),任何0到无穷的数的对数分布范围是负无穷到正无穷。

有以下几个要点需要记住:

1. 在概率预测中,逻辑回归和和线性分类、线性回归数值预测,使用了同样的线性模型;

2. 逻辑回归模型的输出可以理解成赔率的对数形式(log-odds);

3. 这些log-odds可以直接被转换成各类型的概率,因此逻辑回归经常被当做分类模型。你已经在不知不觉中使用了很多次逻辑回归模型它被广泛用于信用卡默认金额预测,offer的接受概率等领域。

逻辑回归是一个对分类进行预测的模型,而不是一个对数值进行预测单模型,不要认错呦。

公式4-3 log-odds 线性方程:

(这里log实际上是ln即e为底数 )

公式4-3表示被特征向量x表示的某个数据项,这个类别的log-odds值和线性方程 相等。

通常我们想要的是各类型的概率而不是log-odds,故解出公式4-3中的 可得公式4-4:

( e的负f(x)次方)

如果把 当做自变量,公式4-4的值当做因变量绘图,如下:

逻辑回归模型适配到数据的标准目标函数如下:

?如果x是+类型;

如果x是·类型

g函数给了得到x的特征后,对x的可能性评估的结果。现在考虑对所有元素的g函数值求和,并对不同的参数模型套用得出各自的 ,能够给出最大的sum的g值的模型,就是和学习集数据匹配最好的模型。最好的模型通常对正元素给出最高的概率,同时对负元素给出最低的概率。

虽然决策树和线性分类都会用到线性决策分割线,但有以下两个差异点:

1. 决策树的分割线都是垂直于坐标轴(样本空间坐标轴)的,如图4-1,而线性分类的分割线可以是朝向任何方向的(即斜率任意),换句话说,决策树每次选择一个特征变量,但线性分类使用一个多特征变量的加权组合一次性使用所有特征变量;

2. 决策树使用递归的方法来划分样本空间,也就是可以把样本空间分割出很小的小块;但线性分类仅使用一条分割线将样本空间平面分成两个区域,这个函数会涉及到所有的变量,并且可以适用于所有样本元素。

这里举了一个威斯康辛州乳腺癌数据的案例,分别通过线性回归分类和决策树分类进行了建模,发现线性回归分类准确度为98.9%,而决策树的准确率为99.1%,但这并不一定代表决策树模型更合适,后续章节会继续讨论模型评估。

最常用的适配复杂参数和非线性函数的方法为 非线性支持向量机 和 神经网络。

神经网络就是多层次的模型“stack”of models,通过原始数据的特征生成第一级分析结果,然后将第一层的结果当做新特征进行二次逻辑回归或其他模型分析,从而组成stack。

多层神经网络的低层级target variable的最佳结果如何选择,取决于最终高层的结果如何选择,也就是说,神经网络的最终学习结果是一个复杂函数,那么将复杂函数的各参数逐步分解,就可以得到底层各模型的target variable的最优化模型结果,也就是自上而下的择优归纳过程。

Note:神经网络对很多任务都有效用(没说啥新鲜玩意)

线性回归、逻辑回归、支持向量机,这几个概念的关键区别在于: 如何定义一个模型最好地适配了学习集数据 。

下一章节开始讲过拟合相关的问题。

支持向量机

支持向量机

1 简介

支持向量机基本上是最好的有监督学习算法了。最开始接触SVM是去年暑假的时候,老师要求交《统计学习理论》的报告,那时去网上下了一份入门教程,里面讲的很通俗,当时只是大致了解了一些相关概念。这次斯坦福提供的学习材料,让我重新学习了一些SVM知识。我看很多正统的讲法都是从VC 维理论和结构风险最小原理出发,然后引出SVM什么的,还有些资料上来就讲分类超平面什么的。这份材料从前几节讲的logistic回归出发,引出了SVM,既揭示了模型间的联系,也让人觉得过渡更自然。

2 重新审视logistic回归

Logistic回归目的是从特征学习出一个0/1分类模型,而这个模型是将特性的线性组合作为自变量,由于自变量的取值范围是负无穷到正无穷。因此,使用logistic函数(或称作sigmoid函数)将自变量映射到(0,1)上,映射后的值被认为是属于y=1的概率。

形式化表示就是

假设函数

其中x是n维特征向量,函数g就是logistic函数。

的图像是

可以看到,将无穷映射到了(0,1)。

而假设函数就是特征属于y=1的概率。

当我们要判别一个新来的特征属于哪个类时,只需求 ,若大于0.5就是y=1的类,反之属于y=0类。

再审视一下 ,发现 只和 有关, 0,那么 ,g(z)只不过是用来映射,真实的类别决定权还在 。还有当 时, =1,反之 =0。如果我们只从 出发,希望模型达到的目标无非就是让训练数据中y=1的特征 ,而是y=0的特征 。Logistic回归就是要学习得到 ,使得正例的特征远大于0,负例的特征远小于0,强调在全部训练实例上达到这个目标。

图形化表示如下:

中间那条线是 ,logistic回顾强调所有点尽可能地远离中间那条线。学习出的结果也就中间那条线。考虑上面3个点A、B和C。从图中我们可以确定A是×类别的,然而C我们是不太确定的,B还算能够确定。这样我们可以得出结论,我们更应该关心靠近中间分割线的点,让他们尽可能地远离中间线,而不是在所有点上达到最优。因为那样的话,要使得一部分点靠近中间线来换取另外一部分点更加远离中间线。我想这就是支持向量机的思路和logistic回归的不同点,一个考虑局部(不关心已经确定远离的点),一个考虑全局(已经远离的点可能通过调整中间线使其能够更加远离)。这是我的个人直观理解。

3 形式化表示

我们这次使用的结果标签是y=-1,y=1,替换在logistic回归中使用的y=0和y=1。同时将 替换成w和b。以前的 ,其中认为 。现在我们替换 为b,后面替换 为 (即 )。这样,我们让 ,进一步 。也就是说除了y由y=0变为y=-1,只是标记不同外,与logistic回归的形式化表示没区别。再明确下假设函数

上一节提到过我们只需考虑 的正负问题,而不用关心g(z),因此我们这里将g(z)做一个简化,将其简单映射到y=-1和y=1上。映射关系如下:

4 函数间隔(functional margin)和几何间隔(geometric margin)

给定一个训练样本 ,x是特征,y是结果标签。i表示第i个样本。我们定义函数间隔如下:

可想而知,当 时,在我们的g(z)定义中, , 的值实际上就是 。反之亦然。为了使函数间隔最大(更大的信心确定该例是正例还是反例),当 时, 应该是个大正数,反之是个大负数。因此函数间隔代表了我们认为特征是正例还是反例的确信度。

继续考虑w和b,如果同时加大w和b,比如在 前面乘个系数比如2,那么所有点的函数间隔都会增大二倍,这个对求解问题来说不应该有影响,因为我们要求解的是 ,同时扩大w和b对结果是无影响的。这样,我们为了限制w和b,可能需要加入归一化条件,毕竟求解的目标是确定唯一一个w和b,而不是多组线性相关的向量。这个归一化一会再考虑。

刚刚我们定义的函数间隔是针对某一个样本的,现在我们定义全局样本上的函数间隔

说白了就是在训练样本上分类正例和负例确信度最小那个函数间隔。

接下来定义几何间隔,先看图

假设我们有了B点所在的 分割面。任何其他一点,比如A到该面的距离以 表示,假设B就是A在分割面上的投影。我们知道向量BA的方向是 (分割面的梯度),单位向量是 。A点是 ,所以B点是x= (利用初中的几何知识),带入 得,

进一步得到

实际上就是点到平面距离。

再换种更加优雅的写法:

当 时,不就是函数间隔吗?是的,前面提到的函数间隔归一化结果就是几何间隔。他们为什么会一样呢?因为函数间隔是我们定义的,在定义的时候就有几何间隔的色彩。同样,同时扩大w和b,w扩大几倍, 就扩大几倍,结果无影响。同样定义全局的几何间隔

5 最优间隔分类器(optimal margin classifier)

回想前面我们提到我们的目标是寻找一个超平面,使得离超平面比较近的点能有更大的间距。也就是我们不考虑所有的点都必须远离超平面,我们关心求得的超平面能够让所有点中离它最近的点具有最大间距。形象的说,我们将上面的图看作是一张纸,我们要找一条折线,按照这条折线折叠后,离折线最近的点的间距比其他折线都要大。形式化表示为:

这里用 =1规约w,使得 是几何间隔。

到此,我们已经将模型定义出来了。如果求得了w和b,那么来一个特征x,我们就能够分类了,称为最优间隔分类器。接下的问题就是如何求解w和b的问题了。

由于 不是凸函数,我们想先处理转化一下,考虑几何间隔和函数间隔的关系, ,我们改写一下上面的式子:

这时候其实我们求的最大值仍然是几何间隔,只不过此时的w不受 的约束了。然而这个时候目标函数仍然不是凸函数,没法直接代入优化软件里计算。我们还要改写。前面说到同时扩大w和b对结果没有影响,但我们最后要求的仍然是w和b的确定值,不是他们的一组倍数值,因此,我们需要对 做一些限制,以保证我们解是唯一的。这里为了简便我们取 。这样的意义是将全局的函数间隔定义为1,也即是将离超平面最近的点的距离定义为 。由于求 的最大值相当于求 的最小值,因此改写后结果为:

这下好了,只有线性约束了,而且是个典型的二次规划问题(目标函数是自变量的二次函数)。代入优化软件可解。

到这里发现,这个讲义虽然没有像其他讲义一样先画好图,画好分类超平面,在图上标示出间隔那么直观,但每一步推导有理有据,依靠思路的流畅性来推导出目标函数和约束。

接下来介绍的是手工求解的方法了,一种更优的求解方法。

6 拉格朗日对偶(Lagrange duality)

先抛开上面的二次规划问题,先来看看存在等式约束的极值问题求法,比如下面的最优化问题:

目标函数是f(w),下面是等式约束。通常解法是引入拉格朗日算子,这里使用 来表示算子,得到拉格朗日公式为

L是等式约束的个数。

然后分别对w和 求偏导,使得偏导数等于0,然后解出w和 。至于为什么引入拉格朗日算子可以求出极值,原因是f(w)的dw变化方向受其他不等式的约束,dw的变化方向与f(w)的梯度垂直时才能获得极值,而且在极值处,f(w)的梯度与其他等式梯度的线性组合平行,因此他们之间存在线性关系。(参考《最优化与KKT条件》)

然后我们探讨有不等式约束的极值问题求法,问题如下:

我们定义一般化的拉格朗日公式

这里的 和 都是拉格朗日算子。如果按这个公式求解,会出现问题,因为我们求解的是最小值,而这里的 已经不是0了,我们可以将 调整成很大的正值,来使最后的函数结果是负无穷。因此我们需要排除这种情况,我们定义下面的函数:

这里的P代表primal。假设 或者 ,那么我们总是可以调整 和 来使得 有最大值为正无穷。而只有g和h满足约束时, 为f(w)。这个函数的精妙之处在于 ,而且求极大值。

因此我们可以写作

这样我们原来要求的min f(w)可以转换成求 了。

我们使用 来表示 。如果直接求解,首先面对的是两个参数,而 也是不等式约束,然后再在w上求最小值。这个过程不容易做,那么怎么办呢?

我们先考虑另外一个问题

D的意思是对偶, 将问题转化为先求拉格朗日关于w的最小值,将 和 看作是固定值。之后在 求最大值的话:

这个问题是原问题的对偶问题,相对于原问题只是更换了min和max的顺序,而一般更换顺序的结果是Max Min(X) = MinMax(X)。然而在这里两者相等。用 来表示对偶问题如下:

下面解释在什么条件下两者会等价。假设f和g都是凸函数,h是仿射的(affine, )。并且存在w使得对于所有的i, 。在这种假设下,一定存在 使得 是原问题的解, 是对偶问题的解。还有 另外, 满足库恩-塔克条件(Karush-Kuhn-Tucker, KKT condition),该条件如下:

所以如果 满足了库恩-塔克条件,那么他们就是原问题和对偶问题的解。让我们再次审视公式(5),这个条件称作是KKT dual complementarity条件。这个条件隐含了如果 ,那么 。也就是说, 时,w处于可行域的边界上,这时才是起作用的约束。而其他位于可行域内部( 的)点都是不起作用的约束,其 。这个KKT双重补足条件会用来解释支持向量和SMO的收敛测试。

这部分内容思路比较凌乱,还需要先研究下《非线性规划》中的约束极值问题,再回头看看。KKT的总体思想是将极值会在可行域边界上取得,也就是不等式为0或等式约束里取得,而最优下降方向一般是这些等式的线性组合,其中每个元素要么是不等式为0的约束,要么是等式约束。对于在可行域边界内的点,对最优解不起作用,因此前面的系数为0。

7 最优间隔分类器(optimal margin classifier)

重新回到SVM的优化问题:

我们将约束条件改写为:

从KKT条件得知只有函数间隔是1(离超平面最近的点)的线性约束式前面的系数 ,也就是说这些约束式 ,对于其他的不在线上的点( ),极值不会在他们所在的范围内取得,因此前面的系数 .注意每一个约束式实际就是一个训练样本。

看下面的图:

实线是最大间隔超平面,假设×号的是正例,圆圈的是负例。在虚线上的点就是函数间隔是1的点,那么他们前面的系数 ,其他点都是 。这三个点称作支持向量。构造拉格朗日函数如下:

注意到这里只有 没有 是因为原问题中没有等式约束,只有不等式约束。

下面我们按照对偶问题的求解步骤来一步步进行,

首先求解 的最小值,对于固定的 , 的最小值只与w和b有关。对w和b分别求偏导数。

并得到

将上式带回到拉格朗日函数中得到,此时得到的是该函数的最小值(目标函数是凸函数)

代入后,化简过程如下:

最后得到

由于最后一项是0,因此简化为

这里我们将向量内积 表示为

此时的拉格朗日函数只包含了变量 。然而我们求出了 才能得到w和b。

接着是极大化的过程 ,

前面提到过对偶问题和原问题满足的几个条件,首先由于目标函数和线性约束都是凸函数,而且这里不存在等式约束h。存在w使得对于所有的i, 。因此,一定存在 使得 是原问题的解, 是对偶问题的解。在这里,求 就是求 了。

如果求出了 ,根据 即可求出w(也是 ,原问题的解)。然后

即可求出b。即离超平面最近的正的函数间隔要等于离超平面最近的负的函数间隔。

关于上面的对偶问题如何求解,将留给下一篇中的SMO算法来阐明。

这里考虑另外一个问题,由于前面求解中得到

我们通篇考虑问题的出发点是 ,根据求解得到的 ,我们代入前式得到

也就是说,以前新来的要分类的样本首先根据w和b做一次线性运算,然后看求的结果是大于0还是小于0,来判断正例还是负例。现在有了 ,我们不需要求出w,只需将新来的样本和训练数据中的所有样本做内积和即可。那有人会说,与前面所有的样本都做运算是不是太耗时了?其实不然,我们从KKT条件中得到,只有支持向量的 ,其他情况 。因此,我们只需求新来的样本和支持向量的内积,然后运算即可。这种写法为下面要提到的核函数(kernel)做了很好的铺垫。这是上篇,先写这么多了。

7 核函数(Kernels)

考虑我们最初在“线性回归”中提出的问题,特征是房子的面积x,这里的x是实数,结果y是房子的价格。假设我们从样本点的分布中看到x和y符合3次曲线,那么我们希望使用x的三次多项式来逼近这些样本点。那么首先需要将特征x扩展到三维 ,然后寻找特征和结果之间的模型。我们将这种特征变换称作特征映射(feature mapping)。映射函数称作 ,在这个例子中

我们希望将得到的特征映射后的特征应用于SVM分类,而不是最初的特征。这样,我们需要将前面 公式中的内积从 ,映射到 。

至于为什么需要映射后的特征而不是最初的特征来参与计算,上面提到的(为了更好地拟合)是其中一个原因,另外的一个重要原因是样例可能存在线性不可分的情况,而将特征映射到高维空间后,往往就可分了。(在《数据挖掘导论》Pang-Ning Tan等人著的《支持向量机》那一章有个很好的例子说明)

将核函数形式化定义,如果原始特征内积是 ,映射后为 ,那么定义核函数(Kernel)为

到这里,我们可以得出结论,如果要实现该节开头的效果,只需先计算 ,然后计算 即可,然而这种计算方式是非常低效的。比如最初的特征是n维的,我们将其映射到 维,然后再计算,这样需要 的时间。那么我们能不能想办法减少计算时间呢?

先看一个例子,假设x和z都是n维的,

展开后,得

这个时候发现我们可以只计算原始特征x和z内积的平方(时间复杂度是O(n)),就等价与计算映射后特征的内积。也就是说我们不需要花 时间了。

现在看一下映射函数(n=3时),根据上面的公式,得到

也就是说核函数 只能在选择这样的 作为映射函数时才能够等价于映射后特征的内积。

再看一个核函数

对应的映射函数(n=3时)是

更一般地,核函数 对应的映射后特征维度为 。(这个我一直没有理解)。

由于计算的是内积,我们可以想到IR中的余弦相似度,如果x和z向量夹角越小,那么核函数值越大,反之,越小。因此,核函数值是 和 的相似度。

再看另外一个核函数

这时,如果x和z很相近( ),那么核函数值为1,如果x和z相差很大( ),那么核函数值约等于0。由于这个函数类似于高斯分布,因此称为高斯核函数,也叫做径向基函数(Radial Basis Function 简称RBF)。它能够把原始特征映射到无穷维。

既然高斯核函数能够比较x和z的相似度,并映射到0到1,回想logistic回归,sigmoid函数可以,因此还有sigmoid核函数等等。

下面有张图说明在低维线性不可分时,映射到高维后就可分了,使用高斯核函数。

来自Eric Xing的slides

注意,使用核函数后,怎么分类新来的样本呢?线性的时候我们使用SVM学习出w和b,新来样本x的话,我们使用 来判断,如果值大于等于1,那么是正类,小于等于是负类。在两者之间,认为无法确定。如果使用了核函数后, 就变成了 ,是否先要找到 ,然后再预测?答案肯定不是了,找 很麻烦,回想我们之前说过的

只需将 替换成 ,然后值的判断同上。

以上回答你满意么?

支持向量机(SVM)

参考Jerrylead 和 july-支持向量机通俗导论

再回忆一下逻辑回归:Logistic回归目的是从特征学习出一个0/1分类模型,而 这个模型是将特征的线性组合作为自变量 ,由于自变量的取值范围是负无穷到正无穷。因此,使用logistic函数(或称作sigmoid函数) 将自变量映射到(0,1)上,映射后的值被认为是属于y=1的概率 。

中间那条线是θ T x=0,logistic回归强调 所有点 尽可能地远离中间那条线。学习出的结果也就中间那条线。

但是:

考虑上面3个点A、B和C。从图中我们可以确定A是×类别的, 然而C我们是不太确定的 ,B还算能够确定。这样我们可以得出结论, 我们更应该关心靠近中间分割线的点,让他们尽可能地远离中间线,而不是在所有点上达到最优(引出了下面的函数间隔与几何间隔) 。

我想这就是支持向量机的思路和logistic回归的不同点:

支持向量机考虑局部(不关心已经确定远离的点),

逻辑回归一个考虑全局(已经远离的点可能通过调整中间线使其能够更加远离,但是也可能使一部分点靠近中间线来换取另外一部分点更加远离中间线。)

上面已经知道,θ T x=0是分类的线,在svm中,只考虑局部,只考虑θ T x的正负问题,而不用关心g(z)。因此,在这里,用w T x+b代替θ T x,并 对g(z)做一个简化 ,将其简单映射到类别标签y=1和y=-1上。

这里的y取值为1和-1(在svm中,只考虑局部,只考虑θ T x的正负问题),是为了方便定义:在分类正确的情况下,函数间隔(确信度 )的大小

比如,在分类正确的情况下,y等于1,wx+b应该为正数越大,则情况越好,是正例的确定度就越大。就如上图的A点。y等于-1,wx+b应该为负数越大,则情况越好是负例的确信度就越大。

所以, 函数间隔越大,说明分类正确的置信度越大。函数间隔越小 ,比如上图c点,说明越不能确定c点属于哪一类。

可以为 别的值,只是为了方便。这一点在参考的第二个博客上也已经说明了。

由上面解释,已知可以用y(wT x + b) 的正负性来判定(或表示)分类的正确性。

定义函数间隔如下:

也就是,这个样本点x与超平面之间的间隔(但是现在有些不准确,所以有下面的几何间隔)。

此时,若根据SVM的思想,最大化这个间隔,就能提高分类正确的确信度了吗?

答案是否定的,因为,如果成比例的改变w 和b(如将它们改成2w 和2b),则函数间隔的值f(x) 却变成了原来的2 倍( 虽然函数值增大了,达到了目标,但是此时超平面没有改变 ),所以只有函数间隔还远远不够。

我们真正关心的,其实是“几何上”的点到平面的距离,于是可以用几何知识推理出来的几何间隔。 而不是一开始人们想当然定义的函数间隔。

事实上,我们可以对法向量w 加些约束条件( 这就是调优问题的思考了 ),从而引出真正定义点到超平面的距离——几何间隔(geometrical margin)的概念。

又因为x 0 是超平面w T x + b=0上的点,利用向量之间的运算

再令上式乘上对应的类别y,即可得出几何间隔

从上述函数间隔和几何间隔的定义可以看出:几何间隔就是函数间隔除以∥w∥,而 函数间隔实际上就是,只是人为定义的一个间隔度量,而几何间隔才是直观上的点到超平面的距离。

接下来就是我们的目标:寻找一个超平面, 使得离超平面比较近的点能有更大的间距。 也就是我们不考虑所有的点都必须远离超平面,我们关心求得的超平面能够让所有点中离它最近的点具有最大间距。也就是找到最大的几何间隔。

由上一小节可以知道,我们这里要找的最大间隔分类超平面中的“间隔”指的是几何间隔。

上面两个式子的意思是( 注意,函数间距上面是折线,几何间距上面是波浪线 ):

最大化几何间隔

约束条件是,每个样例的函数间隔都要大于全局的那一个函数间隔(也就是所有训练集里的最小的那个)

用函数间隔表示几何间隔

于是得到了这个式子:

然而这个时候目标函数不是凸函数,约束条件也不是线性的,没法直接代入优化软件里计算。我们还要改写。前面说到 同时扩大w和b对结果没有影响 ,因此,我们将全局的函数间隔值定义为1。于是,上述的函数转变成了

由于求1/||w||的最大值,相当于求||w||2的最小值,因此结果为:

因为现在的 目标函数是二次的,约束条件是线性的,所以它是一个凸二次规划问题 。这个问题可以用现成的QP (Quadratic Programming) 5优化包进行求解。一言以蔽之:在一定的约束条件下,目标最优,损失最小。

根据前面几个文章的话,SVM作为判别模型,它的的模型,就是 w T x i + b 。参数就是w和b。学习完参数以后,新来的样例作为x i ,得到结果大于1,说明在超平面上面,所以是正例。反之亦然。

根据SVM的思想,SVM的初步目标函数,就是所有样例的几何间隔尽可能的大

至此,得到了SVM的目标函数,算是初步解决了SVM的这个问题,用优化包求解得到wb,即可得到具有最大几何间距的超平面,提高分类每个点的确信度,分类目标完成。

接下来介绍的是手工求解w和b的方法了,一种更优的求解方法。

从上可以看出 ,就同时扩大w和b就相当于等式两边同时除以函数间隔 γ,而新的w和b仍然是旧的wb的函数,所以最大化仍然可以进行。

效果等价于,令函数间隔γ=1,综上所述,零γ=1是合理的,而且也方便了原优化问题的计算 。

由拉格朗日对偶(线性可分条件下SVM的对偶算法)引入核函数(非线性可分条件下SVM的算法)

上一篇说到,得到了 如下的线性可分的SVM的目标函数 ,可以利用优化包进行求解。

此外,由于这个问题的特殊结构,还可以通过拉格朗日对偶性(Lagrange Duality)变换到对偶变量(dual variable) 的优化问题,即通过求解与原问题等价的对偶问题(dual problem)得到原始问题的最优解,这就是线性可分条件下支持向量机的对偶算法。

引入对偶的优点:

因为 引入拉格朗日算子可以求出极值。 (参考最优化方法的解释)

这种极值问题怎么求

首先,同样定义拉格朗日公式,希望可以利用拉格朗日算子法求得最优解,得到:

但是,出现问题了,此时加入的约束条件g已经不再等于0了,所以,此时可以调整算子alpha变成很大很大的 值,使结果负无穷, 这显然是不合理的。

所以,我们需要 排除在满足条件下,也会无解的情况。

因此,我们定义下面的函数

要看这个函数有什么优点,就要看看这个函数相比于L(ω,α,b)有什么变化: 加了max,加了α I 大于等于零。

所以,当g和h不满足约束时,总可以调整α i 和β i 来使thetap具最大值为正无穷。

只有当g和h满足约束时,此时g0,我们可以调整α i 和β i (使α i 等于0,β i 任意),得到最大值,即θ p =f(w)。

于是函数等价于这样

于是原来的极值问题min f(w) 就等价于求min θ p 了,

即:

也就是说,最小化 θ p ,就是为了得到最小的 f(w),而能有f(w)就说明了满足约束条件。所以这个等价于原来的极值问题。

至此, 相比于拉格朗日公式L(ω,α,b),现在即加入了拉格朗日算子,又排除了纯粹的拉格朗日公式中出现无穷的情况。

但是,又出现了新的问题,也就是,如果直接求解,首先面对的就是两个参数(最里面的是max,这个max问题有两个参数),而且alpha也是不等式约束,再在w上求最小值,这个过程并不容易做。那么应该怎么办呢?

在最优化课程里,当遇到不好解的优化问题时,可以转化为原问题的对偶问题试试。

此处,d代表对偶。D--dual

我们定义函数

θ D 将问题转化为先求L(ω,α,b)关于 ω 的最小值(此时α和β是固定值),之后再求θ D 的最大值。 上来面对的是一个参数,相对简单些。

相对于原问题,更换了min和max的顺序,得到了它的对偶问题。

--------------------------------------------------------------------------------------------------------------

一般的更换顺序的结果是MaxMin(X) = MinMax(X)。也就是,此时有

对偶问题已经表示出来了,这个对偶问题也相对原问题好求,那么,这两个问题等价吗?或者说,对偶问题的解是不是原问题的解呢?

需要用KKT条件来判断了。

对于拉格朗日算子的深入理解可以看看《最优化方法》,讲义的最后一页。

含有不等式约束的问题,常常 用KKT条件求得候选最优解

对于一般化的拉格朗日公式:

最优值 w 必须满足以下三个条件:

----------1、L对 w 求导为零

----------2、h(w)=0

----------3、α i g i =0 ,i = 1,...,k

注意此时

第三个条件表明了KKT的思想:极值会在可行域边界取得。 ----解释:

-----对于一个特定的自变量w1,当自变量w1在 第 i 个 可行域边界(g i (w1)=0)时,说明此时这个约束是起到了作用的。 这个约束是w1被g i 约束了。此时只能到g i 的平面上(即边界),再多就出界了。。。 而对于最优解来说,就是f(w)达到最优,所以L中,除了f(w)部分,其余应该都等于0,所以此时α0(或许等于零也可以?疑问)

----而此时,w1在其他的约束条件g 非i 下,有g 非i (w1)0),说明W1可以随意些,说明此时这个约束并没有起到作用,但是作为最优解,为了 除了f(w)部分,其余应该都等于0 ,所以其系数α应该等于零。

----------------------------------------------------------------------------------------

注意:这个是传统最优化问题的一般式,这个问题有k个不等式约束方程,所有的点都要满足这k个不等式约束。 。假设有一百个样本点,只有有三个极值N1,N2,N3,那么说明其余97个点带入这k个方程中去都会小于零。 另外对于这三个极值点,可能会有g i (N1) = 0,除了第i个g以外,g(N1)都小于0 。然后对于极值N2,g j (N2)=0,除了第j个约束以外,其余的g(N2)都小于0。

而本节一开始讨论的问题,只有一个约束方程(因为参数只有w和b)即:y(w T x+b)=1,所有的点(一共m个)都要满足这个约束方程。 而关于为什么非支持向量的系数alpha会等于零呢?也就是相当于前面的,k=1(有k个约束条件)的情况下,m个样本点中,非支持向量的约束g0,为了最优解,除了f(w)应该都等于零,所以alpha应该等于零。

另外可以参考这段话:

即,若d* = p* == x * 满足KKT条件

由上面那句话可以知道,

折腾这么长时间,也就是为了说明,已经知道原问题

是凸优化问题,所以,只要对偶问题的自变量w满足了KKT条件,那么它就是对偶问题的最优解w * ,同时也是原问题的最优解了。

所以,由上可知,只要解出了2.1.3中的问题的参数w和b,也就是原问题的解了。

重新回到SVM的优化问题(其中每个约束式实际就是一个训练样本):

我们将约束条件改写为拉格朗日的形式:

由KKT条件可知,只有当函数间隔是1(g=0)的时候,α i 0。此时,这个样例 w i 在约束平面上受到约束 。对于其它的不在线上的样例点(g0),极值不会在其范围内去的,所以这些样例点前面的系数α i =0.

实线是最大间隔超平面,假设×号的是正例,圆圈的是负例。在虚线上的点就是函数间隔是1的点,他们前面的系数α i 0, 这三个点被称作 支持向量。

由上面问题,构造拉格朗日函数如下(没有等式约束,所以没有β):

————————————————————————————————

下面我们按照对偶问题的求解步骤来一步步进行,由2.1.3可知,对偶问题的形式为:

首先求解L的最小值(最里面的先求),此时αi是固定的,L的最小值只与w和b有关。对w和b分别求偏导数。

得到

将上式带回到拉格朗日函数中得到,此时得到的是该函数的最小值(目标函数是凸函数), 即里面的min L已经求出,接下来就是求max了

代入后,化简过程如下:

最后得到

由于最后一项是0,因此简化为

这里,上式中左右边的向量内积,用方括号表示。

到这一步,拉格朗日函数只包含了一个变量α i 。接着进行下一步 ,最大化的过程,求得α i 。

假设求得了α i 就能根据求导得到的结果

求得w,然后就能得到b。

b 就是 距离超平面最近的正的函数间隔要等于离超平面最近的负的函数间隔。 (其实,由前面的那个x和圈的图,可以认为b就是截距,这个截距b等于上下两条虚线的截距的平均值。)

注意,这里的w,b,alpha都是 向量,都是m维的向量

至于这里的α怎么求得,即上面的最大化问题怎么求解,将留给下一篇中的SMO算法来阐明。

也就是说,手动解的话,还是需要利用SMO算法,求得α才行。

————————————————————————————————

这里考虑另外一个问题,由于前面求解中得到

用α i 代替w带入判别模型w T x+b,得到:

也就是说, 利用判别模型对新来样本进行判别时 ,以前新来的要分类的样本首先根据w和b做一次线性运算,然后看求的结果是大于1还是小于1来判断正例还是负例。大于1,说明在超平面的上面,说明是正例。同理,小于1说明在超平面的下面,说明是负例。

约束条件是wx+b-1小于等于零,所以判断就是wx+b与1进行大小比较

现在有了alpha,不需要求出w (那b呢,b怎么求呢,前面已经解释,b是由离超平面最近的间隔和负的函数间隔相等。。。得到的。所以,将新来的样本与训练数据中 支持向量 做内积以后,再确定最大的正数函数间隔以及最小的负数函数间隔,即可。)

就冲上面这段话,支持向量的系数alpha,也不能等于0。

另外,那有人会说,与前面所有的样本都做运算是不是太耗时了?其实不然,我们从KKT条件中得到,只有支持向量的α i 0 (不等于零)其他情况α i 是等于零的。 比如,像前面那个x和圈的图,新来的样本只需要和三个支持向量做运算即可 。

由此可以看到,求出α i 以后,只需要利用支持向量,就可以来判断新来的样例是正例还是负例了。也许这也是是为什么叫支持向量机吧。

上面这个公式,为下面要提到的核函数(kernel)做了很好的铺垫。

下面,先把没求得的alpha放一放,趁着刚刚得到的这个公式的热乎劲,再去看看核函数。

线性模型-分类模型

线性模型也可用于分类问题。我们首先来看二分类。我们可以利用下面的公式预测:

y^=w[0]x[0]+w[1]x[1]+...+w[p]*x[p]+b0

这个公式与线性回归的公式非常相似,但我们没有返回特征的加权求和,而是为预测设置了阈值(0)。如果函数值小于0,我们就预测类别-1,如果函数值大于0,我们就预测类别+1。对于所有用于分类的线性模型,这个预测规则都是通用的。同样,有很多不同的方法来找出系数(w)和截距(b)。

对于用于回归的线性模型,输出y^是特征的线性函数,是直线、平面或超平面(对于更高维的数据集)。对于用于分类的线性模型, 决策边界 是输入的线性函数。换句话说,(二元)线性分类器是利用直线、平面或超平面来分开两个类别的分类器。

学习线性模型有很多种算法。这些算法的区别在于以下两点:

1.系数和截距的特定组合对训练数据拟合好坏的度量方法;

2.是否使用正则化,以及使用哪种正则化方法。

不同的算法使用不同的方法来度量“对训练集拟合好坏”。由于数学上的技术原因,不可能调节w和b使得算法产生的误分类数量最少。对于我们的目的,以及对于许多有用而言,上面第一点(称为 损失函数 )的选择并不重要。

最常见的两种线性分类算法是 Logistic回归(logistic regression) 和 线性支持向量机(linear support vector machine,线性SVM) 。

Python version:3.7.1 (default, Dec 10 2018, 22:54:23) [MSC v.1915 64 bit (AMD64)]

pandas version:0.23.4

matplotlib version:3.0.2

Numpy version:1.15.4

Scipy version:1.1.0

IPython version:7.2.0

scikit-learn version:0.20.1

对于LogisticRegression和LinearSVC,决定正则化强度的权衡参数叫作C。C值越大,对应的正则化越弱。换句话说,如果参数C值较大,那么LogisticRegression和LinearSVC将尽可能将训练集拟合到最好,而如果C值较小,那么模型更强调使系数向量(w)接近于0。

参数C的作用还有另一个有趣之处。较小的C值可以让算法尽量适应“大多数”数据点,而较大的C值强调每个数据点都分类正确的重要性。

mglearn.plots.plot_linear_svc_regularization()

Training set score:0.953

Test set score:0.958

C=1的默认值给出了相当好的性能,在训练集和测试集上都达到95%的精度。但由于训练集和测试集的性能非常接近,所以模型很可能是欠拟合的。我们尝试增大C来拟合一个更灵活的模型:

Training set score:0.972

Test set score:0.965

使用C=100可以得到更高的训练集精度,也得到了稍高的测试集精度,这也证实了我们的直觉,即更复杂的模型应该性能更好。

Training set score:0.934

Test set score:0.930

最后,看一下正则化参数C取三个不同的值模型学到的系数:

LogisticRegression模型默认应用L2正则化。更强的正则化使的系数更趋向于0,但系数永远不会正好等于0。进一步观察图像,还可以第3个系数那里发现有趣之处,这个系数是“平均周长”(mean perimeter)。C=100和C=1时这个系数为正,其绝对值比C=1时还要大。在解释这样的模型时,系数可以告诉我们某个特征与哪个类别有关。例如,人们可能会认为高“纹理错误”(texture error)特征与“恶性”样本有关。但“平均周长”系数的正负号发生变化,说明较大的“平均周长”可以被当作“良性”的指标或“恶性”的指标,具体取决于我们考虑的是哪个模型。这也说明,对线性模型系数的解释应该始终持保留态度。

如果想要一个可解释性更强的模型,使用L1正则化可能更好,因为它约束模型只使用少数几个特征:

Training accuracy of l1 logreg with C=0.001:0.91

Test accuracy of l1 logreg with C=0.001:0.92

Training accuracy of l1 logreg with C=1.000:0.96

Test accuracy of l1 logreg with C=1.000:0.96

Training accuracy of l1 logreg with C=100.000:0.99

Test accuracy of l1 logreg with C=100.000:0.98

将二分类算法推广到多分类算法的一种常见方法是“一对多余”(one-vs.-rest)方法。在“一对多余”方法中,对每个类别都学习一个二分类模型,将这个类别与所有其他类别尽量分开,这样就生成了与类别格式一样多的二分类偶像。在测试点上运行所有二分类器来进行预测。在对应类别上分数最高的分类器“胜出”,将这个类别标签返回作为预测结果。

每个类别都对应一个二类分类器,这样每个类别都有一个系数(w)向量与一个截距(b)。

我们将“一对多余”方法应用在一个简单的三分类数据集上。我们用到了一个二维数据集,每个类别的数据都是从一个高斯分布中采样得出的:

在上面的数据集上训练一个LinearSVC分类器:

Coefficient shape: (3, 2)

Intercept shape: (3,)

我们看到,coef_的形状是(3,2),说明coef_每行包含三个类别之一的系数向量,每列包含某个特征(这个数据集有2个特征)对应的系数值。现在intercetp_是一维数组,保存每个类别的截距,我们将这3个二分类器给出的直线可视化:

你可以看到,训练集中所有属于类别0的点都在类别0对应的直线上方,这说明它们位于这个二分类器属于“类别0”的那一侧。属于类别0的点位于与类别2对应的直线上方,这说明它们被类别2的二分类器划为“其余”。属于类别0的点位于与类别1对应的直线左侧,这说明类别1的二元分类器将它们划为“其余”。因此,这一区域的所有点都会被最终分类器划为类别0(类别0的分类器的分类置信方程的结果大于0,其他两个类别对应的结果小于0)。

但图像中间的三角形区域属于哪一个类别呢,3个分类器都将这一区域内的点划为“其余”。这里的点应该应该划归到哪一个类别呢?答案是分类方程结果最大的那个类别,即最接近的那条线对应的类别。

线性模型的主要参数是正则化参数,在回归模型中叫作alpha,在LinearSVC和LogisticRegression中叫作C。alpha值较大或C值较小,说明模型比较简单。特别是对于回归模型而言,调节这些参数非常重要。通常在对数尺度上对C和alpha进行搜索。你还需要确定的是用L1正则化还是L2正则化。如果你假定只有几个特征是真正重要的,那么你应该用的是L1正则化,否则默认使用L2正则化。如果模型的可解释性很重要的话,使用L1也会有帮助。由于L1只用到几个特征,所以更容易解释哪些特征对模型时重要的,以及这些特征的作用。

线性模型的训练速度非常快,预测速度也很快。这种模型可以推广到非常大的数据集,对稀疏数据也很有效。如果你的数据包含数十万甚至上百万个样本,你可能需要研究使用LogisticRegression和Ridge模型的solver='sag'选项,在处理大型数据时,这一选项比默认值要更快。其他选项还有SGDClassifier类和SGDRegressor类,它们对线性模型实现了可扩展性更强的版本。

线性模型的另一个优点在于,利用我们之前见过的用于回归和分类的公式,理解如何进行预测是相对比较容易的。不幸的是,往往并不完全清楚系数为什么是这样的。如果你的数据集中包含高度相关的特征,这一问题尤为突出。在这种情况下,可能很难对系数做出解释。

如果特征数量大于样本数量,线性模型的表现通常都很好。它也常用于非常大的数据集,只是尤为训练其他模型并不可行。但在更低维的空间中,其他模型的泛化性能可能更好。

(责任编辑:IT教学网)

更多

推荐照片处理文章