机器学习----感知机,Perceptron Learning Algorithm (PLA)
感知机是一种简单、靠谱的分类算法,首先我们看一张示意图:
目标函数:
h
(
x
)
=
sign
(
(
∑
i
=
1
d
w
i
x
i
)
+
b
)
h(x)=\text {sign}((\sum_{i=1}^{d}w_ix_i)+b)
h(x)=sign((i=1∑dwixi)+b)
对于 ( + 1 , − 1 ) (+1,-1) (+1,−1)的分类,如果是 ( + 1 , 0 ) (+1,0) (+1,0),只需要适当调整 s i g n sign sign函数表达式就行了。实际上分错分对都是按上述进行更新的,直到没有错误。由向量关系可知, w w w为分类直线的法向量,上图右边表示当 y = + 1 y=+1 y=+1时和 y = − 1 y=-1 y=−1时,分类直线法向量的更新步骤可以看出:
- 当 y = + 1 y=+1 y=+1分类错误时, w t T x < 0 , s i g n ( w t + 1 T x ) = − 1 w_t^Tx<0,sign(w_{t+1}^Tx)=-1 wtTx<0,sign(wt+1Tx)=−1,两个向量夹角大于90°,更新后向量夹角小于90°, w t + 1 T x > 0 , s i g n ( w t + 1 T x ) = + 1 w_{t+1}^Tx>0,sign(w_{t+1}^Tx)=+1 wt+1Tx>0,sign(wt+1Tx)=+1,此点更新后分类正确
- 当 y = − 1 y=-1 y=−1分类错误时, w t T x > 0 , s i g n ( w t + 1 T x ) = + 1 w_t^Tx>0,sign(w_{t+1}^Tx)=+1 wtTx>0,sign(wt+1Tx)=+1,两个向量夹角小于90°,更新后向量夹角大于90°, w t + 1 T x < 0 , s i g n ( w t + 1 T x ) = − 1 w_{t+1}^Tx<0,sign(w_{t+1}^Tx)=-1 wt+1Tx<0,sign(wt+1Tx)=−1,此点更新后分类正确
理论证明:
这里感知机模型为:
h
(
x
)
=
sign
(
(
∑
i
=
1
d
w
i
x
i
)
+
b
)
h(x)=\text {sign}((\sum_{i=1}^{d}w_ix_i)+b)
h(x)=sign((i=1∑dwixi)+b)
变形为:
h
(
x
)
=
sign
(
(
∑
i
=
0
d
w
i
x
i
)
)
=
sign
(
w
T
(
t
)
x
(
t
)
)
h(x)=\text {sign}((\sum_{i=0}^{d}w_ix_i))=\text {sign}(w^T(t)x(t))
h(x)=sign((i=0∑dwixi))=sign(wT(t)x(t))
接着给出式
对
于
y
(
t
)
s
i
g
n
(
w
T
(
t
)
x
(
t
)
)
的
数
据
,
更
新
规
则
是
w
(
t
+
1
)
=
w
(
t
)
+
y
(
t
)
x
(
t
)
对于y(t) {sign}(w^T(t)x(t))的数据, 更新规则是 w(t + 1) = w(t) + y(t)x(t)
对于y(t)sign(wT(t)x(t))的数据,更新规则是w(t+1)=w(t)+y(t)x(t)
-
因为 y ( t ) ≠ sign ( w T ( t ) x ( t ) ) y(t)\ne \text {sign}(w^T(t)x(t)) y(t)=sign(wT(t)x(t)),所以当 sign ( w T ( t ) x ( t ) ) > 0 \text {sign}(w^T(t)x(t))>0 sign(wT(t)x(t))>0时, y ( t ) = − 1 y(t)=-1 y(t)=−1,
当 sign ( w T ( t ) x ( t ) ) < 0 \text {sign}(w^T(t)x(t))<0 sign(wT(t)x(t))<0时, y ( t ) = 1 y(t)=1 y(t)=1,所以 y ( t ) w T ( t ) x ( t ) < 0 y(t)w^T(t)x(t) < 0 y(t)wT(t)x(t)<0 -
如果分类正确则, y ( t ) w T ( t ) x ( t ) > 0 y(t)w^T(t)x(t) > 0 y(t)wT(t)x(t)>0
y
(
t
)
w
T
(
t
+
1
)
x
(
t
)
=
y
(
t
)
(
w
(
t
)
+
y
(
t
)
x
(
t
)
)
x
(
t
)
=
y
(
t
)
w
T
(
t
)
x
(
t
)
+
y
2
(
t
)
x
T
(
t
)
x
(
t
)
y(t)w^T(t+1)x(t)=y(t)(w(t) + y(t)x(t))x(t)=y(t)w^T(t)x(t)+y^2(t)x^T(t)x(t)
y(t)wT(t+1)x(t)=y(t)(w(t)+y(t)x(t))x(t)=y(t)wT(t)x(t)+y2(t)xT(t)x(t)
注意
x
(
t
)
x(t)
x(t)的第一个分量为
1
1
1,
w
(
t
)
w(t)
w(t)第一个分量为截距
b
b
b,因为
y
2
(
t
)
x
T
(
t
)
x
(
t
)
>
0
y^2(t)x^T(t)x(t)>0
y2(t)xT(t)x(t)>0,因此
y
(
t
)
w
T
(
t
+
1
)
x
(
t
)
>
y
(
t
)
w
T
(
t
)
x
(
t
)
y(t)w^T(t+1)x(t)>y(t)w^T(t)x(t)
y(t)wT(t+1)x(t)>y(t)wT(t)x(t)
- 由上我们知道,即使分类错误, y ( t ) w T ( t ) x ( t ) < 0 y(t)w^T(t)x(t) < 0 y(t)wT(t)x(t)<0,但利用更新规则后, y ( t ) w T ( t + 1 ) x ( t ) > y ( t ) w T ( t ) x ( t ) y(t)w^T(t+1)x(t)>y(t)w^T(t)x(t) y(t)wT(t+1)x(t)>y(t)wT(t)x(t),也就是向着正方向前进了,即判断的正确率越来越高,所以如果资料是可分的,那么经过有限步之后可以得到 w w w,使得对所有的 x x x, y w T x > 0 yw^Tx>0 ywTx>0
编程示意图:
更新规则进行更新,还有一点值得注意就是终止规则:
- 如果已知线性可分,全部判断对终止。
- 若是线性不可分,一般设定循环多少次后终止,不同循环次数每次终止的结果不一样, w w w调整有可能过度,结果不稳定。