算法描述:
Perceptron Learning Algorithm |
---|
For
t
=
0
,
1
,
2
,
⋯
t=0,1,2, \cdots
t=0,1,2,⋯ 1.找到错误的分类点 ( x n ( t ) , y n ( t ) ) ({x_n}(t),{y_n}(t)) (xn(t),yn(t)): s i g n ( ω t T x n ( t ) ) ≠ y n ( t ) sign(\omega _t^T{x_n}(t)) \ne {y_n}(t) sign(ωtTxn(t))̸=yn(t) 2.修正错误: ω t + 1 ← ω t + y n ( t ) x n ( t ) {\omega _{t + 1}} \leftarrow {\omega _t} + {y_n}(t){x_n}(t) ωt+1←ωt+yn(t)xn(t) Until足够的次数,最好没有错误的分类点 |
证明:
现有超平面 ω T x + b = 0 {\omega ^T}x + b = 0 ωTx+b=0 ,则其对应的法向量为 ω {\omega} ω,以下分别对两种错误的分类情况进行讨论。
-
1.将值为+1的点错分到-1的分类点( ω {\omega} ω与 x n 的 角 度 太 大 x_n的角度太大 xn的角度太大),如下图所示,
-
2.将值为-1的点错分到+1的分类点( ω {\omega} ω与 x n 的 角 度 太 小 x_n的角度太小 xn的角度太小),如下图所示,
即,算法描述里的修正步骤,就是对向量 x n x_n xn和超平面法向量 ω {\omega} ω之间的夹角进行修正,使得修正完的超平面能正确分类该点。
讨论:
对于数据集线性不可分或者是带噪声的数据集,则PLA并不适用,此时应找到一条线使得错误分类点最少。
ω
g
←
arg
min
ω
∑
n
=
1
N
[
[
y
n
≠
s
i
g
n
(
ω
T
x
n
)
]
]
{\omega _g} \leftarrow \mathop {\arg \min }\limits_\omega \sum\limits_{n = 1}^N { [\kern-0.15em[ {y_n} \ne sign({\omega ^T}{x_n}) ]\kern-0.15em] }
ωg←ωargminn=1∑N[[yn̸=sign(ωTxn)]]
这是一个NP-hard问题。
对于上述问题,这里可采用改进的PLA方法,即Pocket PLA。
Pocket PLA Algorithm |
---|
初始化
ω
^
\hat \omega
ω^ For t = 0 , 1 , 2 , ⋯ t=0,1,2, \cdots t=0,1,2,⋯ 1.随机找到一个错误的分类点 ( x n ( t ) , y n ( t ) ) ({x_n}(t),{y_n}(t)) (xn(t),yn(t)): s i g n ( ω t T x n ( t ) ) ≠ y n ( t ) sign(\omega _t^T{x_n}(t)) \ne {y_n}(t) sign(ωtTxn(t))̸=yn(t) 2.修正错误: ω t + 1 ← ω t + y n ( t ) x n ( t ) {\omega _{t + 1}} \leftarrow {\omega _t} + {y_n}(t){x_n}(t) ωt+1←ωt+yn(t)xn(t) 3.如果 ω t + 1 \omega_{t+1} ωt+1比 ω ^ \hat \omega ω^犯的错误少,则用 ω t + 1 \omega_{t+1} ωt+1代替 ω ^ \hat \omega ω^ Until足够的次数,返回 ω ^ \hat \omega ω^作为算法g的参数 |