机器学习笔记7——核

这篇博客详细介绍了机器学习中的核技巧,包括核的概念、Mercer定理和核函数的性质。通过核函数,可以将数据映射到高维空间,提高数据的可分性。此外,文章还探讨了支持向量机(SVM)中的正则化处理非线性可分数据和离群值问题,以及SMO(Sequential Minimal Optimization)算法,它是解决SVM对偶问题的有效方法。SMO算法的核心是通过更新两对变量来优化目标函数,同时满足约束条件。
摘要由CSDN通过智能技术生成
一、核

回到线性回归的话题(预测房屋价格),有输入变量 x 代表房屋的面积,我们需要考虑利用输入特征x x2 x3 组成的三次函数的表现效果。为了区分这两组变量,我们称原始输入变量为一个问题的输入属性(在这一问题中,输入属性就是输入变量 x ,房屋面积)。当问题的输入属性映射到一个新的数量集时(且这个数量集将要输入到学习算法中),那么这个新的数量集就被称为输入特征

我们会用ϕ代表特征映射——从输入属性映射到输入特征。举个例子,在我们的案例中有:


在支持向量机中我们不会使用原始的输入属性 x ,而是使用输入特征ϕ(x)进行算法学习。为了达到这一目的,我们只需要将先前的算法覆盖掉,然后用 ϕ(x) 替换掉 x

因为算法可以完全用内积<x,z>的形式书写,所以我们可以将所有的内积 <x,z> <script type="math/tex" id="MathJax-Element-7974"> </script>替换成 <ϕ(x),ϕ(z)> <script type="math/tex" id="MathJax-Element-7975"><\phi(x),\phi(z)></script>。

而且,给定一个特征映射 ϕ ,我们可以定义相应的


现在,给定 ϕ ,我们可以通过得到 ϕ(x) ϕ(z) 的内积结果来计算核 K(x,z) 。但是更常见的也是更有趣的情况是,即使 ϕ(x) 本身的计算成本可能会非常高(可能因为本身的高维度向量),核 K(x,z) 的计算成本可能会非常低。根据这一情况,通过在算法中应用更高效的核 K(x,z) 来进行计算,我们可以让支持向量机应用到高维度的特征空间。

举个例子,假设 x,zRn ,且有:


同样也可以写成如下形式:


因此可以得出 K(x,z)=ϕ(x)Tϕ(z) ,其中特征映射 ϕ 的值如下:


我们需要知道计算高维度的 ϕ(x) 的时间复杂度为 O(n2) ,而计算核 K(x,z) 的时间复杂度为 O(n) ——与输入属性的维度成线性关系。

对于,同时也有如下的形式:


上述等式中对应的特征映射的值(n = 3)如下:


参数 c 控制着xi xixj 两项之间的相对权重。

更广泛的说,核 K(x,z)=(xTz+c)d 对应的特征映射,映射到特征空间 n+dd ,对应的所有单项式的形式为 xi1xi2...xik 。然而,即使基于这 O(nd) 个维度空间,计算核 K(x,z) 的时间复杂度仍为 O(n) ,且因此我们不需要在这样高维度的特征空间中表示特征向量。

现在,我们来从另一个角度谈论核。直觉上,如果 ϕ(x) ϕ(z) 非常接近,那么最终核 K(x,z)=ϕ(x)Tϕ(z) 的值会很大。相反的,如果 ϕ(x) ϕ(z) 相距很远(近似互相垂直),那么核 K(x,z)=ϕ(x)Tϕ(z) 的值会很小。所以,我们可以认为核 K(x,z) 是测量 ϕ(x) ϕ(z) 的相似度的一种方式,或者可以说测量 x z的相似度。

鉴于这种直觉,我们可以利用核来测量 x z的相似度,举个例子,假设你选择:


这是一种合理的测量方式,如果 x z非常接近,那么核的结果近似于1,相反如果 x z距离很远,核的结果近似于0。那么我们是否可以利用这一 K 的定义作为支持向量机的核呢?在这一特殊案例中,答案是可以(这一核被称为高斯核,对应于一个无穷维度的特征映射ϕ)。

但更进一步说,给定一些 K ,我们如何可知这是一个合格的核呢?例如,我们能否说出是否存在一些特征映射ϕ,使得对于所有的 x,z 都有 K(x,z)=ϕ(x)Tϕ(z)

假设现在 K 是一个合格的核,对应一些特征映射ϕ。现在,考虑一些有限数据集,包含 m 个点{x(1),...x(m)}(没有必要是整个训练集),然后定义一个 mm 维的矩阵 K ,使得第(i,j)项等于 Kij=K(x(i),x(j)) 。这一矩阵被称作核矩阵(存在两个 K ,一个是核矩阵,一个是核函数K(x,z),两者之间存在明显的关系)。

现在,如果 K 是一个合格的核函数,那么有Kij=K(x(i),x(j))=ϕ(x(i))Tϕ(x(j))=ϕ(x(j))Tϕ(x(i))=K(x(j),x(i))=Kji,因此 K 一定是对称的。更多的是,让ϕk(x)代表向量 ϕ(x) 的第k个坐标。我们发现对任意向量 z ,都有如下等式成立:


上述等式中倒数第二步利用了之前核函数的推导。因此z是随意值, K 是半正定矩阵(K0)。

因此,正如我们上述展示的那样,如果 K 是一个合格的核函数,那么对应的核矩阵KRmm 是对称的半正定矩阵。更一般化的说,这不仅是充分的也是必要的,前提条件是 K 是合格的核(也被称作Mercer核)。

定理(Mercer)

给定K:RnRnR K 是合理的(Mercer)核,充分必要条件是对任意{x(1),...x(m)},( m< ),对应的核矩阵是对称半正定的。

给定一个核函数 K ,除了找到对应的特征映射ϕ,这一定理给了另一种方式验证它是否是合理的核函数。

同样的,我们简单的讲述一些关于核函数的其他例子。举个例子,考虑数字识别问题。给定一个手写数字(0-9)的图片(16*16的像素),我们需要辨别出手写的数字是什么。通过使用多项式核 K(x,z)=(xTz)d 或高斯核,针对这一问题支持向量机会得到非常棒的效果。这着实令我们震惊,因为输入属性 x 只是一个256维的向量的图像像素灰度值,系统没有关于视觉的先验知识,或者甚至不知道哪两个像素点相邻。

另一个例子是,我们尝试分类的对象是字符串(输入属性x是一列氨基酸,串在一起构成蛋白质)。看上去很难构造一个合理的,小数据集特征的学习算法,尤其是不同的氨基酸有不同的长度。

然而,考虑让 ϕ(x) 成为一个计算每个长度为k的子字符串在 x 中出现的的次数,如果字符串有英文字母构成,那么一共有26k个同等长度的字符串。因此, ϕ(x) 是一个 26k 维度的向量;即使k的值大小适中,但这仍是一个工作量巨大的工作。然而,使用(动态规划)字符串匹配算法,高效计算 K(x,z)=ϕ(x)Tϕ(z) ,所以我们可以隐式的计算 26k 维度的特征空间,而不需要具体到特征空间内部去计算。

现在我们已经了解了核在支持向量机中的应用,所以不需要再多赘述。而且我们要知道核的应用比支持向量机要广泛的多。尤其是,如果你有任何学习算法可以用输入特征间的内积 x,z 表示,那么可以将内积用核 K(x,z) 代替,可以使你的算法在高维度特征空间中有良好的表现。

举个例子,可以将核应用到感知器算法中推导出核感知器算法。很多我们之后将要看到的算法都可以以这种方式在高维度特征空间中使用,被称作核方法

二、正则化与不可分离的情况

之前对支持向量机的推导中我们假设数据是线性可分的。然而通过 ϕ 将数据映射到高维度特征空间提高了数据可分性的可能,但我们也不能保证这种方法一直都是可分的。同时,在一些情况下很难找到一个分离超平面,因为存在离群异常值。


举个例子,左侧图片中有一个优化的间隔分类器,当存在一个离群异常值出现在左上方的区域时(如右图),这导致决策边界在剧烈摆动,而结果的分类器有更小的间隔。

为了让算法在非线性可分的数据集对离群值敏感度减小,我们再次更改优化问题的格式:


因此,允许训练样本的函数间隔小于1,而且如果训练样本的函数间隔为 1ξi ξ > 0),我们将添加惩罚函数项 Cξi ,参数 C 控制“使得||w||2最小”与“确保大多数的训练样本的函数边界至少为1”二者之间的相关权重。

与之前一样,我们可以对拉格朗日函数进行格式化:


上述等式中, αi ri 是拉格朗日算子(约束为 0 )。关于对偶问题的推导过程此处略过,但是与之前的一样,要分别对 w,b 求偏导并设为0,并将等式带回原来的等式中,然后简化,我们就得到了如下的对偶问题的等式:


同样,我们得到了用 α 表示的 w 等式(9),所以为了解决对偶问题我们可以继续使用等式(13)进行预测。令人惊讶的是,在添加l1正则化时,对偶问题唯一的变化就是:原始的约束 αi0 ,现在变成了 0αiC 。对 b 的计算也有些更改。

而且,KKT对偶互补条件变为(在对SMO算法测试时非常有用):


现在,剩下的就是给出一个实际解决对偶问题的算法,这一点我们将在下一节中讲。

三、SMO算法

因为John Platt(写出关于SMO算法的论文),SMO算法为解决对偶问题(从支持向量机的推导中得到的问题)提供了一个高效的方式。现在我们先岔开话题,先讲述一下坐标上升算法

1.坐标上升算法

思考去尝试解决一个没有约束的优化问题:


此处, W 只是以αi为参数的函数,现在忽略这一优化问题与支持向量机有任何的关系。我们已经知道两个优化算法了,梯度上升与牛顿方法。现在介绍另一个优化算法,被称作梯度上升算法


因此,在该算法的最内侧循环中,我们将所有参数固定除了 αi ,然后只根据参数 αi 重新优化 W 。在这一版本的方法中,内部循环优化的变量顺序为α1,α2,...αm,α1,α2,...(更复杂的版本可能会选取其他的排序;举个例子,我们可能会选择让 W(α) 增幅最大的变量作为下一更新变量)。

当函数 W 在内测循环中碰巧以“arg max”这样的形式有良好的表现效果,那么坐标上升算法可以算是表现非常好的算法了。这里的图片显示了坐标上升算法的每一步动作:


图中的弧线是我们想要优化的二次函数的轮廓。坐标上升在点(2,-2)处初始化,图中还绘制了到达全局最大值的路径。在每一步中,坐标上升算法都会取与坐标平行的路径,因为每次优化的过程中只有一个变量。

2.SMO算法

关于支持向量机算法的话题到此结束,下面我们将讨论SMO算法。一些细节问题会留在课后的作业。

这里有一个我们想要解决的对偶优化问题:


现在我们有一组αi满足约束(18-19)。假设我们想保持 α2,...αm 不变,在坐标上升算法的再次优化的过程只针对变量 α1 ,我们该如何实现呢?
答案是不可能,因为限制(19)保证如下等式成立:


或者,通过等式两端各自乘以 y(1) ,我们会得到如下等式:


(这一步利用了 y(1){1,1} ,因此 (y(1))2=1 )。因此, α1 是完全由其他 αi 决定的,如果我们保持 α2,...,αm 保持不变,那么我们无法在保持约束(19)的前提下对 α1 做任何改变。

因此,如果我们想针对 αi 进行更新,我们在满足约束的前提下必须至少同时更改两个变量。这一核心思想就是SMO算法,大致的步骤如下:

迭代循环直到收敛{

1.选择一对要更新的变量 αi αj (选择的这两个变量尽量让我们达到全局最优值)
2.针对 αi αj ,对 W(α) 进行再次优化,在此期间保持其他参数 αk(ki,j) 不变。

}

为了测试该算法的收敛性,我们可以检测在一些tol中是否满足KKT条件。tol在这里意味着convergence tolerance parameter(收敛容差参数),值设置在0.01到0.001之间。

SMO是一个高效率的函数的关键原因在于计算 αi,αj 的效率很高。现在我们简单的推导一下更新的核心思想。

我们现在有几组 αi 满足约束(18-19),假设我们决定保持 α3,...αm 不变,针对 α1,α2 W(α1,α2,...,αm) 进行再次更新,根据约束(19),必须满足如下等式:


因此等式右侧的变量是固定的,可以用约束 ξ 来表示:


因此,我们可以在图中显示在 α1,α2 上的约束:


从约束(18)中,我们了解到 α1,α2 必须在方形区域[0,C][0,C]内。同样图中显示直线 α1y(1)+α2y(2)=ξ ,我们知道 α1,α2 必须在直线上。从这些约束中,我们知道 Lα2H ;其他情况下, (α1,α2) 必须满足既在方形区域内又在直线上这两条约束。在这一例子中, L=0 。但是根据直线 α1y(1)+α2y(2)=ξ 的情况,这并不是总是如此;但是更一般的情况,针对 α2 会存在下限 L 和上限H使得 (α1,α2) 满足在方形区域[0,C][0,C]内的约束。

通过使用等式(20),我们也可以把 α1 写成 α2 的函数:


因此, W(α) 可以写成如下形式:


我们把 α3,...,αm 当作常量,可以看出这是关于 α2 的二次函数。举个例子,这里表示成 aα22+bα2+c ,其中a,b,c为适当的参数。如果我们忽视方形区域的约束(18),那么我们通过求其偏导并设为0,可以很容易的最大化这个二次函数。我们让 αnew,unclipped2 代表 α2 的结果。我们需要相信如果我们想针对参数 α2 最大化 W 但满足方形区域的约束,那么我们可以通过将αnew,unclipped2放到[L,H]区间找到优化后的结果。


最后,我们找到 αnew2 ,我们可以将等式(20)带回然后找到关于 αnew2 的最优值。

这期间有很多细节并没有介绍但是都很简单,这些问题都留给你在阅读Platt的论文:其中一篇是关于选择启发式算法来选择下一对需要更新的 αi,αj ;另一篇是关于在SMO算法执行过程中如何更新 b <script type="math/tex" id="MathJax-Element-8208">b</script>。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值