逻辑回归的代价函数如下:
J(θ)=minθ1m[∑i=1my(i)(−log(hθ(x(i))))+(1−y(i))(−log(1−hθ(x(i))))]+λ2m∑j=1nθ2j
对于支持向量机来说:
将−log(hθ(x(i)))替换为cost1(θTx(i)),如下图:

将−log(1−hθ(x(i)))替换为cost0(θTx(i)),如下图:

去掉1m常量以及正则项的λ参数,转而在第一项前加上C系数,则得到支持向量机的代价函数:
J(θ)=minθC[∑i=1my(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+12∑j=1nθ2j
假设函数:
hθ(x)={1,0,if θTx⩾0otherwise
不同于逻辑回归输出概率,支持向量机的假设函数直接预测
y的取值。
根据cost1(θTx(i))及cost0(θTx(i))的坐标图,为了最小化支持向量机(SVM)的代价函数,需满足以下条件:
{if y=1,if y=0,then we want θTx⩾1then we want θTx⩽−1
支持向量机不仅正确地区分输入的正负样本,还加入了一个安全的间距因子,因此具有鲁棒性,也称其为大间距分类器。
在支持向量机的代价函数中:
-
C值如果设置很大,支持向量机易受到异常点的影响;
-
C值如果设置很小,支持向量机会忽略异常点的影响。
设存在两个二维向量:
u=[u1u2]v=[v1v2]
则向量的内积:u⋅v=uT∗v=p∗∥u∥=u1∗v1+u2∗v2
p是向量v投射到u上的长度,∥u∥是向量u的长度=u21+u22−−−−−−√
p是带符号的,若u与v在坐标系内的夹角为θ(0⩽θ⩽π),则u⋅v=∥u∥∗∥v∥∗cosθ
当支持向量机的代价函数中,C取值较大时,为了最小化代价函数,我们会找到令∑i=1my(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))为0的最优解,则目标函数变为
minθ12∑j=1nθ2j{θTx(i)⩾1θTx(i)⩽−1if y=1if y=0
进行如下简化:特征数n设为2,令θ0=0
目标函数可写作:12(θ21+θ22)=12(θ21+θ22−−−−−−√)2=12∥θ∥2
θTx(i)=p(i)⋅∥θ∥=θ1x(i)1+θ2x(i)2
则条件变为:
{p(i)⋅∥θ∥⩾1p(i)⋅∥θ∥⩽−1if y(i)=1if y(i)=0
p(i)为x(i)投射到θ的长度,θ向量与分界线垂直。
由于目标函数是令12∥θ∥2尽可能小,同时要满足条件
{p(i)⋅∥θ∥⩾1p(i)⋅∥θ∥⩽−1if y(i)=1if y(i)=0
所以p(i)应尽可能大。
这就是支持向量机(SVM)能有效产生大间距分类的原因。
Kernel(核函数):

如上图所述,如果想拟合一条非线性的判别边界来区分正负样本,有两种方法:
方法1:
构造多项式特征变量,如果θ0+θ1x1+θ2x2+θ3x1x2+θ4x21+θ5x22+⋯>0,则预测y=1。
方法2:
只定义三个特征变量x0,x1,x2,其中x0=1,可忽略,如下图所示,用x1,x2作为坐标轴,手动选取三个点作为l(1),l(2),l(3):

给出样本x,新的特征变量定义如下:
f1=similarity(x,l(1))=exp(−∥x−l(1)∥22σ2)f2=similarity(x,l(2))=exp(−∥x−l(2)∥22σ2)f3=similarity(x,l(3))=exp(−∥x−l(3)∥22σ2)
similarity函数即为Kernel函数,此处为高斯核函数,可用k(x,l(i))表示。
以f1为例:
f1=similarity(x,l(1))=exp(−∥x−l(1)∥22σ2)=exp(−∑j=1n(xj−l(1)j)22σ2),忽略x0
如果x≈l(1)(即x离l(1)很近):f1≈exp(−022σ2)≈1
如果x离l(1)很远:f1≈exp(−(large Number)22σ2)≈0
之前画的每一个点对应一个新的特征变量。
本例中,假设函数为:当θ0+θ1f1+θ2f2+θ3f3⩾0时,预测y=1
假设已得到θ0=−0.5,θ1=1,θ2=1,θ3=0,可以发现,样本离l(1)或l(2)很近时,即f1=0或f2=0时,y=1
如何选择l(1),l(2),l(3)⋯?
设给定m个训练样本(x(1),y(1)),(x(2),y(2)),⋯,(x(m),y(m))
选择l(1)=x(1),l(2)=x(2),⋯,l(m)=x(m)
f1=similarity(x,l(1))f2=similarity(x,l(2))⋯
则特征向量f=⎡⎣⎢⎢⎢f1f2⋯fm⎤⎦⎥⎥⎥,可添加f0=1
对于支持向量机:给定样本集x,计算特征向量f∈Rm+1
如果θTf⩾0,预测y=1
如何得到θ?
minθC[∑i=1my(i)cost1(θTf(i))+(1−y(i))cost0(θTf(i))]+12∑j=1nθ2j
此处n=m
∑j=1nθ2j也可写作θTθ(忽略θ0),为了提升计算效率,改写成θTmθ,m为样本数。
不建议自己写最小化代价函数的代码,应使用成熟软件包。
高斯核函数中σ参数的影响:
例:l(1)=[35],f1=exp(−∥x−l(1)∥22σ2)
当σ2=1时:

x=[35]时,为最高点f1=1,x取值离该点越远,f1越趋近于0。
当σ2=0.5时:

随着x取值远离l(1),f1取值的下降趋势加快。
当σ2=3时:

随着x取值远离l(1),f1取值的下降趋势减缓。
使用支持向量机时,参数C的影响:
-
C取值较大,低偏差,高方差。(对应λ取值小)
-
C取值较小,高偏差,低方差。(对应λ取值大)
使用支持向量机时,参数σ2的影响:
-
σ2取值较大,特征向量fi越平滑,高偏差,低方差
-
σ2取值较小,特征向量fi越陡峭,低偏差,高方差
使用SVM软件包求解参数θ(如:liblinear,libsvm):
步骤一:选择参数C
步骤二:选择核函数:
- 选择No kernel(也叫线性核函数)
如果θTx⩾0,预测y=1
当存在n个特征值,m个样本,n很大,m很小,此时,适合使用线性核函数。
- 高斯核函数,fi=exp(−∥x−l(i)∥22σ2),l(i)=x(i)
需选择参数σ2
当存在n个特征值,m个样本,n很小,m很大时,适合用高斯核函数。
如果选择高斯核函数,需要实现一个核函数:
functionf=kernel(x1,x2)
f=exp(−∥x1−x2∥22σ2)
return
其中,f代表f(i),x1代表x(i),x2代表l(j)=x(j)
在使用高斯函数前,需要做特征归一化,避免单一特征值对f的影响过大。
注意:不是所有的相似度函数similarity(x,l)都是有效的核函数,需要满足默塞尔定理,确保软件包可以使用大量优化方法并快速得到参数θ。
可能会遇到的其他核函数:
1)多项式核函数:k(x,l)=(xTl+constant)degree,当x,l都是严格非负数时使用;
2)字符串核函数:当输入为文本或其他类型字符串时使用;
3)卡方核函数;
4)直方图交叉核函数。
如果有k个类别的话,一般使用内置函数,否则,训练k个SVM,每个SVM将1类与其他类区分开。
逻辑回归与SVM对比:
n为特征值数量,m为训练样本数
- 如果相对于m,n很大(如n=10000,m=10∼1000)
使用逻辑回归,或SVM使用线性核函数;
- 如果n很小,m中等大小(如n=1∼1000,m=10∼10000)
选择SVM使用高斯核函数;
- 如果n很小,m很大(如n=1∼1000,m=50000+)
增加更多特征值,使用逻辑回归或SVM不带核函数。
对于所有情况,一个设计的很好的神经网络可能会非常有效,但训练起来很慢。
SVM优化函数是凸函数,总能找到全局最小值,或接近它的值。