对于监督学习分类算法,我们还有一个区别于逻辑回归的方法,即支持向量机SVM。
SVM与逻辑回归的本质区别就是损失函数的区别。
支持向量机SVM
支持向量机(support vector machines,SVM)是一种二分类模型,基本模型是定义在特征空间上的间隔最大的线性分类器。
简单来说,就是用来做分类用的,类比一下之前提到过的逻辑回归。
它相较于之前的逻辑回归,使用了向量表示法,效果我们下面分析。
逻辑回归
回到之前我们的逻辑回归分类,我们将逻辑回归问题,转化为了概率问题,并且计算得出对应的概率函数hθ(x)。
我们要做的就是让这个拟合函数hθ(x)尽可能精确,趋近于我们的训练集。
对
于
我
们
一
开
始
的
拟
合
函
数
h
θ
(
x
)
=
1
1
+
e
−
θ
T
x
我
们
设
z
=
θ
T
x
既
有
h
θ
(
x
)
=
1
1
+
e
−
z
,
将
该
函
数
做
出
关
于
z
的
图
像
\begin{aligned} & 对于我们一开始的拟合函数 h_\theta(x)=\frac{1}{1+e^{-\theta^Tx}}\\ & 我们设 z=\theta^Tx\\ & 既有 h_\theta(x)=\frac{1}{1+e^{-z}},将该函数做出关于z的图像\\ \end{aligned}
对于我们一开始的拟合函数hθ(x)=1+e−θTx1我们设z=θTx既有hθ(x)=1+e−z1,将该函数做出关于z的图像
这是一个[0,1]之间的单调曲线。可以看出:
- 当 z>>0时,h(z)≈1
- 当 z<<0时,h(z)≈0
对于这样一个函数,我们如何拟合?回归我们的代价函数:
C
o
s
t
=
−
(
y
log
h
θ
(
x
)
+
(
1
−
y
)
log
(
1
−
h
θ
(
x
)
)
)
=
−
y
log
1
1
+
e
−
θ
T
x
−
(
1
−
y
)
log
(
1
−
1
1
+
e
θ
T
x
)
Cost=-(y\log h_\theta(x)+(1-y)\log(1-h_\theta(x)))\\ =-y\log\frac{1}{1+e^{-\theta^Tx}}-(1-y)\log(1-\frac{1}{1+e^{\theta^Tx}})\\
Cost=−(yloghθ(x)+(1−y)log(1−hθ(x)))=−ylog1+e−θTx1−(1−y)log(1−1+eθTx1)
分别讨论y=0时和y=1时的情况。
- 当y=1的时候,代价函数如下图所示
我们要最小化代价函数,对于每一个训练集中的(x,y=1)的样本。期望是代价为0,即Cost=0。
即调整θ,期望θx >> 0.
为了简化运算:该函数在z << 0时,趋向于一次函数,z >> 0时,趋向于0.因此我们可以用一个折线(CAB)来近似,方便计算。
至于为何能够用直线来近似,这个简单的处理一下代价函数就可以看出来。log和e^z相抵消,剩下一个z。
这里的折线代价函数,我们使用Cost1()表示,表示y=1时的近似代价函数。
同理
- 当y=0的时候,代价函数如下图所示
我们要最小化代价函数,对于每一个训练集中的(x,y=0)的样本。期望是代价为0,即Cost=0。
即调整θ,期望θx << 0.
为了简化运算:该函数在z >> 0时,趋向于一次函数,z >> 0时,趋向于0.因此我们可以用一个折线(BAC)来近似,方便计算。
这里的折线代价函数,我们使用Cost0()表示,表示y=0时的近似代价函数。
线性SVM
在之前逻辑回归的基础上,提出了支持向量机。
比较逻辑回归的代价函数和支持向量机的代价函数
逻辑回归:
min
θ
1
m
[
∑
i
−
1
m
y
(
i
)
(
−
log
h
θ
(
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
(
−
log
(
1
−
h
θ
(
x
(
i
)
)
)
)
]
+
λ
2
m
∑
j
=
1
n
θ
j
2
\min_\theta\frac{1}{m}[\sum_{i-1}^m y^{(i)}(-\log h_\theta(x^{(i)}))+(1-y^{(i)})(-\log(1-h_\theta(x^{(i)})))]+\frac{\lambda}{2m}\sum_{j=1}^n\theta_j^2
θminm1[i−1∑my(i)(−loghθ(x(i)))+(1−y(i))(−log(1−hθ(x(i))))]+2mλj=1∑nθj2
支持向量机(将向量点积作为自变量):
min
θ
C
∑
i
−
1
m
[
y
(
i
)
c
o
s
t
1
(
θ
T
x
(
i
)
)
+
(
1
−
y
(
i
)
)
c
o
s
t
0
(
θ
T
x
(
i
)
)
]
+
λ
2
∑
j
=
1
n
θ
j
2
\min_\theta C\sum_{i-1}^m [y^{(i)}cost_1(\theta^Tx^{(i)})+(1-y^{(i)})cost_0(\theta^Tx^{(i)})]+\frac{\lambda}{2}\sum_{j=1}^n\theta_j^2
θminCi−1∑m[y(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+2λj=1∑nθj2
这里我们用了近似代价函数来代替了逻辑回归代价函数,简化了运算。
同时,对于常数项,我们进行了简化,不过意思仍然与之前一样。
对
于
y
=
1
的
样
本
,
期
望
θ
T
x
>
=
−
0.5
对
于
y
=
0
的
样
本
,
期
望
θ
T
x
<
=
0.5
\begin{aligned} & 对于y=1的样本,期望\theta^Tx>=-0.5\\ & 对于y=0的样本,期望\theta^Tx<=0.5\\ \end{aligned}
对于y=1的样本,期望θTx>=−0.5对于y=0的样本,期望θTx<=0.5
当然也可以更精确一些,如:
对
于
y
=
1
的
样
本
,
期
望
θ
T
x
>
=
1
对
于
y
=
0
的
样
本
,
期
望
θ
T
x
<
=
−
1
\begin{aligned} & 对于y=1的样本,期望\theta^Tx>=1\\ & 对于y=0的样本,期望\theta^Tx<=-1\\ \end{aligned}
对于y=1的样本,期望θTx>=1对于y=0的样本,期望θTx<=−1
取决于折现如何画,如何近似了。
这样来看,支持向量机相对于逻辑回归,似乎只简化了计算。
但我们画出来图后,发现它对逻辑回归的分割,是间隔最大的线性分类。
如下图所示:
对于红蓝两种分类,SVM得出的分类是中间的绿色直线,而不是两边的蓝色直线。
这里的不同直线,就是不同θ所表示的向量的法线。
为何取向量的法线为决策边界?这和我们的决策函数相关。
当样本点(红点)在法线内时,点与向量θ的内积是正值,只是大小的区别,所得的代价函数较小。
但如果红点在法线外,内积负值,代价就较大(此时该点按照预测应该是蓝点,但事实上它是红点,需要调整θ)
所以我们取θ的法线作为决策边界。
间隔最大解释
观察我们的线性SVM公式
min
θ
C
∑
i
−
1
m
[
y
(
i
)
c
o
s
t
1
(
θ
T
x
(
i
)
)
+
(
1
−
y
(
i
)
)
c
o
s
t
0
(
θ
T
x
(
i
)
)
]
+
λ
2
∑
j
=
1
n
θ
j
2
当
y
(
i
)
=
1
时
,
要
调
整
θ
使
得
θ
T
x
(
i
)
>
=
1
当
y
(
i
)
=
0
时
,
要
调
整
θ
使
得
θ
T
x
(
i
)
<
=
−
1
\min_\theta C\sum_{i-1}^m [y^{(i)}cost_1(\theta^Tx^{(i)})+(1-y^{(i)})cost_0(\theta^Tx^{(i)})]+\frac{\lambda}{2}\sum_{j=1}^n\theta_j^2\\ 当y^{(i)}=1时,要调整\theta使得\theta^Tx^{(i)}>=1\\ 当y^{(i)}=0时,要调整\theta使得\theta^Tx^{(i)}<=-1
θminCi−1∑m[y(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+2λj=1∑nθj2当y(i)=1时,要调整θ使得θTx(i)>=1当y(i)=0时,要调整θ使得θTx(i)<=−1
我们思考一下向量内积的含义:
θ
T
x
=
∣
θ
T
∣
∣
x
∣
cos
α
相
当
于
θ
的
长
度
⋅
x
(
i
)
在
θ
上
的
投
影
p
(
i
)
。
\theta^Tx=|\theta^T||x|\cos\alpha\\ 相当于\theta的长度\cdot x^{(i)}在\theta上的投影p^{(i)}。
θTx=∣θT∣∣x∣cosα相当于θ的长度⋅x(i)在θ上的投影p(i)。
带入上式
满
足
min
θ
λ
2
∑
j
=
1
n
θ
j
2
=
λ
2
∣
∣
θ
∣
∣
2
当
y
(
i
)
=
1
时
,
要
调
整
θ
使
得
p
(
i
)
⋅
∣
∣
θ
∣
∣
>
=
1
当
y
(
i
)
=
0
时
,
要
调
整
θ
使
得
p
(
i
)
⋅
∣
∣
θ
∣
∣
<
=
−
1
满足\min_\theta\frac{\lambda}{2}\sum_{j=1}^n\theta_j^2=\frac{\lambda}{2}||\theta||^2\\ 当y^{(i)}=1时,要调整\theta使得p^{(i)}\cdot||\theta||>=1\\ 当y^{(i)}=0时,要调整\theta使得p^{(i)}\cdot||\theta||<=-1\\
满足θmin2λj=1∑nθj2=2λ∣∣θ∣∣2当y(i)=1时,要调整θ使得p(i)⋅∣∣θ∣∣>=1当y(i)=0时,要调整θ使得p(i)⋅∣∣θ∣∣<=−1
当然,结果肯定是离得越远越好,因为离得越远精度越高。
因此当我们的θ向量长度不变时,样本在θ上的投影越大越好。
这样,我们的svm分类器会自动按最大间隔来进行分类。
非线性SVM
类比非线性逻辑回归。非线性SVM与之类似。
举一个只有两个参数的非线性SVM和逻辑回归。
比较效果,SVM和逻辑回归最后都可以训练出上述效果图。但是实现方式有所区别。
关于逻辑回归,之前已经做过了学习,这里就不多赘述。
关于SVM,这里我们将(x,y=1)的样本,设为θx >= 0的情况。可以看成对其进行了z轴(高)上的分类。
- θx >= 0的,输出为1.
- 否则输出为0.
我们采取中间增加一个z=0的平面的方式,将训练集按高度z轴分为两层,于是可以得到一个3维的线性分割面,转化成了线性分割问题。
同理,对于更多维的情况,我们只需要增加1维,即可实现在n+1维上的线性分割。
核函数
下面介绍一下如何利用核函数实现增加1维来对样本进行高纬度的线性分割。
为了方便,我们仍采用上面的二维x1,x2来做一下样例。
给出一个x,我们根据其参数,计算得出它的特征值,然后判断特征值的大小。
f
1
=
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
1
)
)
=
exp
(
−
∣
∣
x
−
l
(
1
)
∣
∣
2
2
σ
2
)
f
2
=
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
2
)
)
=
exp
(
−
∣
∣
x
−
l
(
2
)
∣
∣
2
2
σ
2
)
f
3
=
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
3
)
)
=
exp
(
−
∣
∣
x
−
l
(
3
)
∣
∣
2
2
σ
2
)
.
.
.
f_1=similarity(x,l^{(1)})=\exp(-\frac{||x-l^{(1)}||^2}{2\sigma^2})\\ f_2=similarity(x,l^{(2)})=\exp(-\frac{||x-l^{(2)}||^2}{2\sigma^2})\\ f_3=similarity(x,l^{(3)})=\exp(-\frac{||x-l^{(3)}||^2}{2\sigma^2})\\ ...
f1=similarity(x,l(1))=exp(−2σ2∣∣x−l(1)∣∣2)f2=similarity(x,l(2))=exp(−2σ2∣∣x−l(2)∣∣2)f3=similarity(x,l(3))=exp(−2σ2∣∣x−l(3)∣∣2)...
-
这里的f就是x得出的相似度值。放在一起可以表示为一个向量f=[f1,f2,f3…]。
-
这里的sim()函数就是核函数。
-
这里的l(i)可以是作为训练的样本。
i f x ≈ l ( 1 ) : f 1 ≈ exp ( − ∣ ∣ x − l ( 1 ) ∣ ∣ 2 2 σ 2 ) ≈ 1 i f x 距 离 l ( 1 ) 较 远 : f 1 ≈ exp ( − ∣ ∣ x − l ( 1 ) ∣ ∣ 2 2 σ 2 ) ≈ 0 if\quad x\approx l^{(1)}:f_1\approx\exp(-\frac{||x-l^{(1)}||^2}{2\sigma^2})\approx1 if\quad x距离l^{(1)}较远:f_1\approx\exp(-\frac{||x-l^{(1)}||^2}{2\sigma^2})\approx0 ifx≈l(1):f1≈exp(−2σ2∣∣x−l(1)∣∣2)≈1ifx距离l(1)较远:f1≈exp(−2σ2∣∣x−l(1)∣∣2)≈0
这里的σ作为一个调整平衡度的参数来对该函数起到陡峭或平缓的作用。如图
这 里 的 σ 是 作 为 特 征 值 缩 放 而 存 在 的 参 数 当 σ 2 = 1 时 , 所 得 图 形 如 上 图 所 示 。 当 σ 2 = 0.5 时 , 斜 坡 更 陡 峭 一 些 , 体 现 在 训 练 结 果 中 就 是 , 低 偏 差 , 方 差 大 当 σ 2 = 3 时 , 斜 坡 更 平 缓 一 点 , 体 现 在 样 本 的 训 练 结 果 中 , 高 偏 差 , 方 差 小 \begin{aligned} & 这里的\sigma是作为特征值缩放而存在的参数\\ & 当\sigma^2=1时,所得图形如上图所示。\\ & 当\sigma^2=0.5时,斜坡更陡峭一些,体现在训练结果中就是,低偏差,方差大\\ & 当\sigma^2=3时,斜坡更平缓一点,体现在样本的训练结果中,高偏差,方差小 \end{aligned} 这里的σ是作为特征值缩放而存在的参数当σ2=1时,所得图形如上图所示。当σ2=0.5时,斜坡更陡峭一些,体现在训练结果中就是,低偏差,方差大当σ2=3时,斜坡更平缓一点,体现在样本的训练结果中,高偏差,方差小
非线性svm及核函数计算
获 得 一 组 训 练 集 : ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , . . . , ( x ( m ) , y ( m ) ) 设 置 l ( i ) = x ( i ) 对 于 给 定 的 一 个 目 标 预 测 变 量 x : f i = s i m i l a r i t y ( x , l ( i ) ) 对 于 训 练 集 ( x ( i ) , y ( i ) ) , 将 x ( i ) 转 换 成 f ( i ) f j ( i ) = s i m ( x ( i ) , l ( j ) ) 另 注 意 : 当 j = i 时 , 即 f i ( i ) = s i m ( x ( i ) , l ( i ) = x ( i ) ) = exp ( − 0 2 σ 2 ) = 1 合 并 起 来 f ( i ) = [ f 0 ( i ) f 1 ( i ) . . . f m ( i ) ] 判 断 θ T f > = 0 。 这 里 f 是 固 定 的 , 所 以 要 优 化 θ 来 确 保 下 面 代 价 函 数 最 小 训 练 min θ C ∑ i − 1 m [ y ( i ) c o s t 1 ( θ T f ( i ) ) + ( 1 − y ( i ) ) c o s t 0 ( θ T f ( i ) ) ] + λ 2 ∑ j = 1 n θ j 2 \begin{aligned} & 获得一组训练集:(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(m)},y^{(m)})\\ & 设置l^{(i)}=x^{(i)}\\ & 对于给定的一个目标预测变量x:\\ & \qquad f_i=similarity(x,l^{(i)})\\ & 对于训练集(x^{(i)},y^{(i)}),将x^{(i)}转换成f^{(i)}\\ & \qquad f_j^{(i)}=sim(x^{(i)},l^{(j)})\\ & \qquad 另注意:当j=i时,即f_i^{(i)}=sim(x^{(i)},l^{(i)}=x^{(i)})=\exp(-\frac{0}{2\sigma^2})=1\\ & \qquad 合并起来f^{(i)}=\begin{bmatrix} f_0^{(i)}\\f_1^{(i)}\\...\\f_m^{(i)} \end{bmatrix}\\ & 判断\theta^Tf>=0。这里f是固定的,所以要优化\theta来确保下面代价函数最小\\ & 训练\min_\theta C\sum_{i-1}^m [y^{(i)}cost_1(\theta^Tf^{(i)})+(1-y^{(i)})cost_0(\theta^Tf^{(i)})]+\frac{\lambda}{2}\sum_{j=1}^n\theta_j^2 \end{aligned} 获得一组训练集:(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))设置l(i)=x(i)对于给定的一个目标预测变量x:fi=similarity(x,l(i))对于训练集(x(i),y(i)),将x(i)转换成f(i)fj(i)=sim(x(i),l(j))另注意:当j=i时,即fi(i)=sim(x(i),l(i)=x(i))=exp(−2σ20)=1合并起来f(i)=⎣⎢⎢⎢⎡f0(i)f1(i)...fm(i)⎦⎥⎥⎥⎤判断θTf>=0。这里f是固定的,所以要优化θ来确保下面代价函数最小训练θminCi−1∑m[y(i)cost1(θTf(i))+(1−y(i))cost0(θTf(i))]+2λj=1∑nθj2
上述过程大致分为两部分。
- 根据训练集确定核,后计算得出训练集中不同样本点x的位置与核的距离,将xi变为得到的fi,之后使用后fi可以兼顾到所有的核。
- 调整Θf,使得其代价函数尽可能小,这里就是确定Θ向量了,决策边界同样是Θ的法向量。
多层svm分类。
当样本不止y=0或y=1两种情况时。我们仍可以通过svm进行分类。
对于y={0,1,2,…,k}时。
可以通过单独训练01分类法,最后合并起来,得出结果。
对
于
(
x
,
y
=
i
)
样
本
。
训
练
出
相
应
的
θ
(
i
)
使
用
(
θ
(
i
)
)
T
f
来
进
行
判
断
对于(x,y=i)样本。\\ 训练出相应的\theta^{(i)}\\ 使用(\theta^{(i)})^Tf来进行判断
对于(x,y=i)样本。训练出相应的θ(i)使用(θ(i))Tf来进行判断
使用svm库函数
现在网络上已经有成熟的svm库可以调用了,并且内部提供了更为完整和高校的优化方法策略。
因此我们不用手动重复造轮子了。只需要在使用的时候调用即可。
一般库函数中,允许我们自行调整的参数一般有以下几种:
- 选择常数C,用来体现正则项,确定过拟合和欠拟合。
- 选择核函数,有多种核函数可供选择,上面距离的是一种常用核函数(高斯核函数)。
- 之后能够自行确定变量,如σ等。
补充
另外,对于逻辑回归,svm,核函数的使用情况。
- 当样本数大的时候,建议使用逻辑回归。
- 当样本数小的时候
- m适中,可以使用svm+高斯核函数。
- m很大,有了很多的特征,可以使用逻辑回归 或 不带核函数的svm。
参考资料:
B站吴恩达视频:https://www.bilibili.com/video/BV164411b7dx