机器学习笔记——支持向量机的一些整理
\qquad 在支持向量机的学习当中碰到了一些问题,这里对支持向量机的一些内容进行了整理,内容中涉及到了一些讲解证明及原理的帖子,都是个人觉得写得挺好的,这里做一个归总,若是侵权请联系删除~~
支持向量机入门及数学原理的介绍
几个不错的帖子:
==============================================
原理证明当中涉及的一些内容
元素、向量、矩阵对向量的求导法则
\qquad 在原理证明当中涉及到了元素对向量的求导(拉格朗日乘子法的求导),元素、向量、矩阵对向量的求导法则:向量对向量求导
拉格朗日乘子法
\qquad 因为在证明当中涉及到KKT条件,下面文章对拉格朗日方法进行了较为通俗的介绍:凸优化 - 4 - 凸优化、Lagrange乘子法、KKT条件,当然在上面原理介绍的文章当中也有这部分内容看,可以结合着看。
\qquad 同时这里做个笔记,关于拉格朗日乘子法的理解:
深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
加入松弛变量和惩罚因子情况下的目标求解
\qquad
在文章1中讲到的原理证明过程当中,第一遍未看懂其中的拉格朗日求解过程,尤其是在对向量求偏导的那部分,在参考上述向量求导的内容后,此处做个笔记:
=====================================================
SMO算法
\qquad 文章SVM解释:五、SMO算法对SMO算法进行了详细的说明,同样下面对SMO当中的一些内容进行笔记。
参数 α i \alpha_i αi的上下界
关于上述文章当中提到的参数 α i \alpha_i αi的上下界问题,文章机器学习笔记——SMO算法参数alpha上下界做个了笔记说明。
关于迭代中的参数b取值
在上述文章的介绍中提到了迭代中参数b的取值,分为以下的几种情况:
1、 0 ≤ α 1 ≤ C 0\le \alpha_1 \le C 0≤α1≤C且 0 ≤ α 2 ≤ C 0\le \alpha_2 \le C 0≤α2≤C时,有 b 1 n e w = b 2 n e w b_{1}^{new}=b_{2}^{new} b1new=b2new,那么为什么会有这样一个等式?在算法的论述过程中我们可以得知有以下公式:
0 ≤ α i ≤ C \qquad\qquad\qquad\qquad\qquad\qquad\qquad0\le \alpha_i \le C 0≤αi≤C时, y i ( w T x i + b ) = 1 y_i(w^Tx_i+b)=1 yi(wTxi+b)=1
那么同时满足 0 ≤ α 1 ≤ C 0\le \alpha_1 \le C 0≤α1≤C且 0 ≤ α 2 ≤ C 0\le \alpha_2 \le C 0≤α2≤C时,任意 0 ≤ α i ≤ C 0\le\alpha_i \le C 0≤αi≤C时,满足:
y
i
(
w
T
x
i
+
b
1
n
e
w
)
=
1
\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad y_i(w^Tx_i+b_{1}^{new})=1
yi(wTxi+b1new)=1
y
i
(
w
T
x
i
+
b
2
n
e
w
)
=
1
\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad y_i(w^Tx_i+b_{2}^{new})=1
yi(wTxi+b2new)=1
从上述两个式子当中就可得知:
b
1
n
e
w
=
b
2
n
e
w
\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad b_{1}^{new}=b_{2}^{new}
b1new=b2new
那么当其中一个在范围内,而另一个不在范围内时,例如
0
≤
α
1
≤
C
0\le \alpha_1 \le C
0≤α1≤C,但
α
2
=
C
\alpha_2=C
α2=C时,有以下等式:
y
1
(
w
T
x
i
+
b
1
n
e
w
)
=
1
\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad y_1(w^Tx_i+b_{1}^{new})=1
y1(wTxi+b1new)=1
y
2
(
w
T
x
i
+
b
2
n
e
w
)
≤
1
\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad y_2(w^Tx_i+b_{2}^{new})\le1
y2(wTxi+b2new)≤1
这时就会发现使用
b
1
n
e
w
b_{1}^{new}
b1new作为迭代的结果要更加合理,因为他是通过等式求得的,所以在实际的算法编写当中会通过
i
f
if
if 和
e
l
i
f
elif
elif 来逐步判断
α
i
\alpha_i
αi的范围是否在
[
0
,
C
]
[0,C]
[0,C]当中,然后对b进行赋值,当二者都不在范围内时,则取两者的平均数作为新的参数b。
==========================================================
SMO完整版代码分析
==========================================================
有新内容会持续更新~