机器学习笔记10 支持向量机 1.1 优化目标 Optimization objective 1.2 最大间隔的理解 Large Margin Intuition 1.3 大间距分类背后的数学 The mathematics behind large margin classification 1.4 核函数 Kernels 1.5 使用支持向量机 Using an SVM

1.1 优化目标 Optimization objective

与逻辑回归和神经网络相比,还有一种更加强大的算法是支持向量机(Support Vector Machine) ,它在学习复杂的非线性方程时提供了一种更为清晰,更加强大的方式并且广泛应用于工业界和学术界

我们通过回顾逻辑回归慢慢的引入支持向量机

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

对于代价函数中的一部分来说需要做一些修改,假设只有一个数据样本,把 hθ(x)=1/(1+e-θTx) 带入公式,把 θTx看成是z,用灰色曲线作出图像

If y = 1, we want hθ(x) ≈ 1, z>>0;
If y = 0, we want hθ(x) ≈ 0, z<<0;

现在我们用玫瑰色曲线函数来代替灰色曲线函数。左边的玫瑰色曲线函数称为cost1(z),右边的玫瑰色曲线函数称为 cost0(z)

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

回到逻辑回归的代价函数中,对其进行修改转变为支持向量机的代价函数,把cost1(z)cost0(z)替换掉原来的函数,同时对常数项也进行处理(处理常数项对求最优参数没有影响),先去掉 1 / m,再去掉 λ ,把代价函数整体看成 A + λB的形式,转变之后就变成 CA +B 的形式(其中 C = 1 / λ )

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

最后整理一下就可以得到支持向量机的代价函数,同时逻辑回归中假设的输出是一个概率值。 而 SVM 直接预测 y = 1,还是 y = 0

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

1.2 最大间隔的理解 Large Margin Intuition

如果C的数值比较大的话,想要最小化代价函数,那就需要最小化cost1(z)和cost0(z),从图像看出可以代价于当y=1时,z≥1,当y=0时,z≤-1

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

只有当C 特别大的时候, SVM 才是一个最大间隔分类器,那么当 C 特别大时,在优化过程中,第一项会接近于0,目标变为最小化第二项

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

支持向量机的最大间隔就是在两类之间有许多的决策边界,需要找到一条边界使得margin最大,如下图

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

对于有异常值的支持向量机来说,如果想将样本用最大间距分开,即将 C 设置的很大。那么仅因为一个异常点,决策边界会从黑线变成那条粉线,这实在是不明智的,如果 C 设置的小一点,最终得到这条黑线。它可以忽略一些异常点的影响,而且当数据线性不可分的时候,也可以将它们恰当分开,得到更好地决策边界

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

值得注意的是,因为 C = 1 / λ,因此C 较小时,相当于 λ 较大。可能会导致欠拟合,相当于高偏差 ,C 较大时,相当于 λ 较小。可能会导致过拟合,相当于高方差

1.3 大间距分类背后的数学 The mathematics behind large margin classification

1.3.1 向量内积

向量内积: 两个向量 u 和 v ,uTv 就叫做向量 u 和 v 之间的内积,∥u∥ 表示 u 的范数norm,也就是向量 u 的欧几里得长度( √(u12+u22) ),属于一个实数

在这里,内积可以用两种方式表示:

第一种是通过投影的方式计算,uTv = ||u|| · ||v|| · cosθ = ||u|| · p  (p也是属于一个实数,如果p是向量反向上的投影则p<0)

第二种是通过矩阵乘法的方式计算,uTv = u1 × v1 + u2 × v2  = vTu

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

1.3.2 SVM 代价函数的另一种理解方式

有了内积的知识,对支持向量机的代价函数我们就有了另一种理解方式,在之前说到的代价函数中如果将C设的很大,代价函数只剩下后面的那项,假设θ0=0,参数个数n=2,可以代价函数进行转变成J(θ) = 1/2 × ||θ||^2,θT和x(i)看成之前讲的向量uT和v, 这样就可以得到 θTx = p · ||θ||  (p 是 x 在 θ 上的投影)

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

1.3.3 选择更优的决策边界

如果我选择绿色直线作为决策边界,那么蓝色直线就是参数向量了(根据线性方程中法向量的知识),那么可以看每个数据在参数向量上的投影都非常的短

对于正样本 x(1) 而言,想要p(1) ⋅ ∥θ∥ >= 1,现在 p(1) 长度非常短,就意味着 ||θ|| 需要非常大

对于负样本 x(2) 而言,想要p(1) ⋅∥θ∥ <= −1,现在p(2) 长度非常短,就意味着 ||θ|| 需要非常大

但我们的目标函数是希望最小化参数 θ 的范数,因此我们希望: 投影长度 p(i) 尽可能大

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

如果我们换一个决策边界,那么就可以看到每一个数据在参数向量上的投影都非常的长,这正是我们在目标函数中希望最小化参数 θ 的范数

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

以上都是讨论在θ0 = 0的情况下,θ0 = 0的意思是我们让决策界通过原点。如果θ0 ≠ 0,决策边界不过原点 ,结论同样成立

1.4 核函数 Kernels

1.4.1 Kernels I

对于这种非线性分类问题,可以采用高级数的多项式模型来解决,在该模型中我们会把特征 x 用新特征 f 来替代,比如: f1 = x1 , f2 = x2 , f3 = x1 x2 , f4 = x12 ...

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

在构建新特征 f1 , f2 , f3 的时候还有没有更好的方法呢?其实是有的,我们可以通过核函数来构建新特征

来看一下下图中的例子,假设给定一个训练实例 x ,我们通过 x 与预先选定的 landmarks l(1) , l(2) , l(3) 的近似程度来计算新的特征

计算方式:fi = similarity(x, l (i) ) = exp( -( ||x − l (i) || )2 / 2σ2 ),这其实就是用了高斯函数,其中i为landmarks 的索引,||x − l (i) || 为实例 x 中所有特征与 landmark  l(i) 距离的和,与之前说的|| w ||相似

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

如果一个训练实例 x 与 l 很近,则 f  e−0 ≈ 1;与 l 很远,则 f  e−( 较大的数 ) 0。 具体的计算如下:

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

通过一个例子,以水平面的坐标为 x1, x 2 ,垂直坐标轴为 f 构建3D图像和等高线图来观察一下对于不同的 σ 对 f 的影响

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

假设θ0 = -0.5,θ1 = 1θ2 = 1,θ3 = 0,那粉色点离 l (1) 更近,所以 f1 接近 1,而 f2 ,f3 接近 0。因此h θ(x) ≥ 0,因此预测y = 1;同理,绿色点离 l(2) 较近的,也预测y = 1;但蓝绿色点离三个 landmark 都较远,预测y = 0

那图中红色封闭曲线就可以组成决策边界了,在整个预测过程中,我们采用的特征不是训练实例本身的特征,而是通过核函数计算出的新特征f1 , f2 , f3

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

1.4.1 Kernels II

之前在选择landmark的时候我们是随便选择三个点的,那在实际应用中我们是如何获得landmark的呢?

我们是把训练集中的数据点直接作为landmark,这样 l(i) 就会对应训练集中 x(i),相当于把 l(i) 初始化为 x(i)

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

对于将 l(i) 初始化为 x(i) ,这么做的好处是得到的新特征是建立在 原有特征 与 训练集中其他原有特征之间距离 的基础之上的

新特征 f 向量与原特征向量的形式保持一致,在初始化时,添加 f0 = 1

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

将核函数引入支持向量机的代价函数中,用新特征 f 替换掉原特征 x,预测一个实例 x 对应结果的方法是:给定x,计算新特征 f,当 θTf >= 0 时预测 y = 1; 否则反之

同时在计算上,为了简化计算, 在计算正则项 θTθ 时,用 θTMθ 代替 θTθ ,其中 M 是一个矩阵,核函数不同则M不同

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

整理一下在使用核函数的支持向量机时遇到的两个参数(C和σ)对新特征 f 的影响:

当 C 较大,相当于 λ 小,可能会导致过拟合,高方差
当 C 较小,相当于 λ 大,可能会导致欠拟合,高偏差


当 σ 较大时,图像缓和,可能会导致低方差,高偏差
当 σ 较小时,图像陡峭,可能会导致低偏差,高方差

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

1.5 使用支持向量机 Using an SVM

在使用支持向量机来求解参数θ的时候,我们通常会通过调包的方式去完成,除此之外,我们还需要选择一个合适的参数C和是否选择使用核函数,如果选择使用核函数,那就还需要注意一点别的东西(比如使用高斯函数作为核函数的时候,我们就需要选择一个合适的参数σ)

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

如果是使用高斯函数,那么还需要注意的是特征的放缩,就比如在房屋价格预测的例子中,房屋尺寸大小和房屋数量显然就不是一个数量级的,如果不进行特征放缩的话,那房屋数量这个特征的影响力可能就很小了

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

当然除了高斯函数以外也有别的函数,比如多项式核函数(Polynomial Kernel), 字符串核函数(String kernel), 卡方核函数( chi-square kernel) ,直方图交集核函数(histogram intersection kernel) 等。它们的目标也都是根据训练集和地标之间的距离来构建新特征,只是高斯函数是属于比较常用的函数

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

在多分类问题上,可以训练K个支持向量机来解决问题,不过大多数的支持向量机包已经构建好了多分类功能了

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

对于模型的选择上还需要根据实际的情况来选择,假设有n个特征,m个训练样本

如果 n » m,即训练集数据量不够支持我们训练一个复杂的非线性模型,选用逻辑回归模型或者不带核函数的 SVM。
如果 n较小,m中等,例如n在 1-1000 之间,而m在 10-10000 之间,使用高斯核函数的 SVM。(如果训练集非常大,高斯核函数的SVM 会非常慢)
如果 n较小,m较大,例如n在 1-1000 之间,而m大于 50000,则使用 SVM 会非常慢。解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的 SVM

其实逻辑回归和不带核函数的SVM 非常相似,不过具体还得根据实际情况来选择

机器学习笔记10
支持向量机
1.1 优化目标 Optimization objective
1.2 最大间隔的理解 Large Margin Intuition
1.3 大间距分类背后的数学 The mathematics behind large margin classification
1.4 核函数 Kernels
1.5 使用支持向量机 Using an SVM

如果是使用神经网络的话,神经网络的效果可能会比支持向量机更好,但是神经网络的缺点就是训练太慢了