接着svm原理其一,讲(https://blog.csdn.net/qq_43372138/article/details/83934586):
svm 线性支持向量机
如图,有直线L1,L2来划分两个类别,但是L2出现了一个样本分类错误,根据线性可分支持向量机可知,我们是按距离一个分割面最近的样本点(如上图的d1,d2这里d1=d2,我们可以调节直线的平行位置来使得d1=d2,如果有其他的样本点的值也等于d1或者d2那么这些样本点也需要取出来)的距离比距离其他分割面最近的样本点的距离都要大,那么这个分割面就是最好的。 来选最优分割面的,但很明显L2除了一个样本分错了外,比L1更符合要求。那么这时候我们就用到了线性支持向量机了。
1.线性支持向量机的思想
线性支持向量机的思想和线性可分支持向量机是差不多的,只不过比可分向量机多了一个参数 ζ \zeta ζ,这个参数的名字叫做“松弛因子”,且 ζ > = 0 \zeta>=0 ζ>=0。
2.基于线性可分支持向量机的数学公式推导
首先我们要知道松弛因子有什么用,其最终目的是让这个分割平面具有容错的能力。我们已知对于每一个样本有一个函数距离,我们要用这个函数距离来体现容错这一特性。
在线性可分支持向量机中有一个约束条件:
y
i
⋅
(
w
T
ϕ
(
x
i
)
+
b
)
y_i\cdot (w^T\phi(x_i)+b)
yi⋅(wTϕ(xi)+b)>=1
我们把它变成下式:
y
i
⋅
(
w
T
ϕ
(
x
i
)
+
b
)
y_i\cdot (w^T\phi(x_i)+b)
yi⋅(wTϕ(xi)+b)>=1
−
ζ
i
-\zeta_i
−ζi
那么
每一个样本的函数距离就不一定大于1了,so,就有样本容错能力了
新的目标函数为:
m
a
x
w
,
b
,
ζ
1
−
ζ
i
∣
∣
w
∣
∣
\begin{array}{}max\\w,b,\zeta\end{array} \frac{1-\zeta_i}{||w||}
maxw,b,ζ∣∣w∣∣1−ζi
新目标函数等价为:
m
i
n
w
,
b
,
ζ
1
2
∣
∣
w
∣
∣
2
+
C
∑
i
=
1
n
ζ
i
\begin{array}{}min\\w,b,\zeta\end{array} \frac{1}{2}||w||^2+C\sum_{i=1}^n\zeta_i
minw,b,ζ21∣∣w∣∣2+C∑i=1nζi
这里的C是
ζ
\zeta
ζ的参数,C>0
约束条件:
y
i
⋅
(
w
T
ϕ
(
x
i
)
+
b
)
y_i\cdot (w^T\phi(x_i)+b)
yi⋅(wTϕ(xi)+b)>=1
−
ζ
i
-\zeta_i
−ζi
ζ
i
>
=
0
\zeta_i>=0
ζi>=0
则拉格朗日函数为:
L
(
w
,
b
,
ζ
,
α
,
μ
)
=
1
2
∣
∣
w
∣
∣
2
+
C
∑
i
=
1
n
ζ
i
−
∑
i
=
1
n
α
i
(
y
i
⋅
(
w
T
ϕ
(
x
i
)
+
b
)
L(w,b,\zeta,\alpha,\mu)=\frac{1}{2}||w||^2+C\sum_{i=1}^n\zeta_i-\sum_{i=1}^n\alpha_i(y_i\cdot (w^T\phi(x_i)+b)
L(w,b,ζ,α,μ)=21∣∣w∣∣2+C∑i=1nζi−∑i=1nαi(yi⋅(wTϕ(xi)+b)-1
+
ζ
i
)
−
∑
i
=
1
n
μ
i
ζ
i
+\zeta_i)-\sum_{i=1}^n\mu_i\zeta_i
+ζi)−∑i=1nμiζi
对w,b,
ζ
\zeta
ζ求偏导:
ϑ
L
ϑ
w
=
0
⟹
w
=
∑
i
=
1
n
α
i
y
i
ϕ
(
x
i
)
\frac{\vartheta L}{\vartheta w}=0\Longrightarrow w=\sum_{i=1}^n\alpha_iy_i\phi(x_i)
ϑwϑL=0⟹w=∑i=1nαiyiϕ(xi)
ϑ L ϑ b = 0 ⟹ 0 = ∑ i = 1 n α i y i \frac{\vartheta L}{\vartheta b}=0\Longrightarrow0=\sum_{i=1}^n\alpha_iy_i ϑbϑL=0⟹0=∑i=1nαiyi
ϑ
L
ϑ
ζ
=
0
⟹
C
−
α
i
−
μ
i
=
0
\frac{\vartheta L}{\vartheta \zeta}=0\Longrightarrow C-\alpha_i-\mu_i=0
ϑζϑL=0⟹C−αi−μi=0
这一个的过程和可分的一样,将上面三个式子带回去就可得:
m
a
x
α
(
∑
i
=
1
n
α
i
−
1
2
∑
i
,
j
=
1
n
α
i
α
j
y
i
y
j
ϕ
T
(
x
i
)
ϕ
(
x
j
)
)
\begin{array}{}max\\\alpha\end{array}(\sum_{i=1}^n \alpha_i-\frac{1}{2}\sum_{i,j=1}^n\alpha_i\alpha_jy_iy_j\phi^T(x_i)\phi(x_j))
maxα(∑i=1nαi−21∑i,j=1nαiαjyiyjϕT(xi)ϕ(xj))
约束条件为:
∑
i
=
1
n
α
i
y
i
=
0
\sum_{i=1}^n\alpha_iy_i=0
∑i=1nαiyi=0
C
−
α
i
−
μ
i
=
0
C-\alpha_i-\mu_i=0
C−αi−μi=0
α
i
>
=
0
\alpha_i>=0
αi>=0
μ
i
>
=
0
\mu_i>=0
μi>=0
到了这一步,让后用SMO优化方法对上面的式子进行求解
至于SMO算法内容有点复杂,还在学习中
3.损失函数
1.0/1损失
样本分对了就令其y值为0,也就是没损失
分错了令其y值为1,有损失
2.Logistic损失函数
公式:
l
n
(
1
+
e
i
y
)
/
l
e
n
(
2
)
ln(1+e^y_i)/len(2)
ln(1+eiy)/len(2)
横轴代表
y
i
y_i
yi
这个知道一下就好
3.Hinge损失
即使是分对了也会有损失
只有在虚线两边的没有损失
这里有一个参数
ζ
\zeta
ζ,Hinge图是根据这个参数来画的
到目前为止我不知道这个损失函数有什么用
非线性支持向量机
1.核函数
可以使用核函数,将原始输入空间映射到新的特征空间,从而,使得原本线性不可分的样本可能在核空间可分
多项式核函数:
K
(
x
1
,
x
2
)
=
(
α
⋅
∣
∣
x
1
−
x
2
∣
∣
a
+
r
)
b
K(x_1,x_2)=(\alpha \cdot ||x_1-x_2||^a+r)^b
K(x1,x2)=(α⋅∣∣x1−x2∣∣a+r)b ,
α
,
a
,
b
,
r
\alpha,a,b,r
α,a,b,r为常数
高斯核函数RBF:
K
(
x
1
,
x
2
)
=
e
x
p
(
−
∣
∣
x
1
−
x
2
∣
∣
2
2
σ
2
)
K(x_1,x_2)=exp(-\frac{||x_1-x_2||^2}{2\sigma^2})
K(x1,x2)=exp(−2σ2∣∣x1−x2∣∣2)
Sigmoid核:
K
(
x
1
,
x
2
)
=
t
a
n
h
(
γ
⋅
∣
∣
x
1
−
x
2
∣
∣
a
+
r
)
K(x_1,x_2)=tanh(\gamma \cdot ||x_1-x_2||^a+r)
K(x1,x2)=tanh(γ⋅∣∣x1−x2∣∣a+r),
γ
,
a
,
r
\gamma,a,r
γ,a,r为常数
在实际应用中,往往依赖已经得到的结论或交叉验证等方案才能选择有效的核函数(没有任何东西作为借鉴的时候,用高斯核函数)