一、定义
1. 引入
银行常见的业务场景,判断是否给人发信用卡,通常评判对象的特征如下:
下图中的红框,我们拎出来6个特征:年龄、性别、平均收入、居住时长、工作时长、当前负债。
机器学习的通过大量相关数据的训练,最终输出一个g,这个g代表的model,能够对给定特征的人做出判别,yes(发卡) OR no(不发卡)
这就是机器学习应用的典型场景。
2. 数学表示
对具体的场景进行数学抽象。
对于每一个输入,我们都可以使用 X = ( x 1 , x 2 , . . . x d ) X=(x_1,x_2, ... x_d) X=(x1,x2,...xd) 表示他的特征。比如信用卡案例,特征维度为6,其中 x 1 x_1 x1表示age、 x 2 x_2 x2表示gender等
对于输出Y,我们使用 y = { + 1 ( g o o d ) , − 1 ( b a d ) } y = \{+1(good), -1(bad)\} y={+1(good),−1(bad)}表示判断题的结果。
整个评判公式可以做如下表述:
h ( x ) = s i g n ( ( ∑ i = 1 d w i x i ) − t h r e s h o l d ) h(x)=sign((\sum_{i=1}^dw_i x_i)-threshold) h(x)=sign((i=1∑dwixi)−threshold)
其中
w
i
w_i
wi表示每个X的特征
x
i
x_i
xi对应的权重,权重越大的特征项,越能影响最终结果。threshold表示阈值,刚刚好使得累加之后的特征值减去阈值后,正数表示good,负数表示bad.
最后在整个函数外套一个sign函数,将所有的正数;输出为y为1,所有的负数输出y为-1.
这样的 h ( x ) h(x) h(x)表示的机器学习模型称之为感知机。
整个模型中,所有的参数包括 W i W_i Wi和 t h r e s h o l d threshold threshold,其中 i ∈ [ 1 , d ] i\in[1,d] i∈[1,d]
为使得整个表达更加简洁,进一步地: 我们需要将参数 − t h r e s h o l d -threshold −threshold写为 w 0 w_0 w0,整合到 W W W中。
h ( x ) = s i g n ( ∑ i = 1 d w i x i − t h r e s h o l d ) h(x)=sign(\sum_{i=1}^dw_ix_i-threshold) h(x)=sign(i=1∑dwixi−threshold) = s i g n ( ∑ i = 1 d w i x i + w 0 × x 0 ) =sign(\sum_{i=1}^dw_ix_i+w_0\times x_0) =sign(i=1∑dwixi+w0×x0) = s i g n ( ∑ i = 0 d w i x i ) = s i g n ( W T X ) =sign(\sum_{i=0}^dw_ix_i)=sign(W^TX) =sign(i=0∑dwixi)=sign(WTX)
其中 x 0 = 1 x_0=1 x0=1,最终 h ( x ) h(x) h(x)可以表示为两个向量的内积。接下来我们使用向量 W W W就可以表征假设模型 h h h。
3. 二维空间的感知机
无论x的维度,感知机都可以表述为上一节最终 h ( x ) h(x) h(x)形态。二维空间上,我们可以可视化的对感知机算法如何求解有更深的理解。
使用机器学习的目的是为了得到一个尽可能逼近真实值f的g。
在二维空间中,输出y用⭕️和×表示,将圆圈表示为+1
,将x表示为-1
,整个假设假设模型就是一条线。我们的目标为,在下图中找出一条线,能够将两种类型的点做最好分割。
所以感知机又叫线性分类器。
如何找到这条完美分割线?
很直观的想法,我们随机开始一条线,然后将data中所有的点依次用这条线来做测试。每一个二维平面的点都会对这条线进行修正。经过一轮轮的修正,算法最终输出一条对测试集合中的data都满足的线。伪代码入下图左侧部分。
这个过程中,最核心的是,一个错误分类的点如何作用于这条线,使得其更能够满足分类要求。
如前文所言,假设模型
h
(
x
)
h(x)
h(x)这条线,可以用权重向量
W
W
W来表示法向量。
对于当前的错误分类点
(
X
n
(
t
)
y
n
(
t
)
)
(X_{n(t)}y_{n(t)})
(Xn(t)yn(t)),对应的y值如果为-1,我们对向量做减法,法向量w远离该点;如果y为1,那么对向量做加法,使得法向量向其靠近。如上图右侧描述。
所以法向量
W
W
W更新策略就很统一写成:
w
t
+
1
=
w
t
+
y
n
(
t
)
x
n
(
t
)
w_{t+1} = w_t+y_{n(t)}x_{n(t)}
wt+1=wt+yn(t)xn(t)
这里还要问自己一个问题:为什么这样的更新策略就能够实现正确分类呢?
简单推导一下:
y
n
W
t
+
1
T
X
n
=
y
n
(
W
t
+
y
n
X
n
)
X
n
=
y
n
W
t
X
n
+
X
n
2
y_nW_{t+1}^TX_n=y_n(W_t+y_nX_n)X_n=y_nW_tX_n+X_n^2
ynWt+1TXn=yn(Wt+ynXn)Xn=ynWtXn+Xn2
y
n
W
t
+
1
T
X
n
>
y
n
W
t
X
n
y_nW_{t+1}^TX_n > y_nW_tX_n
ynWt+1TXn>ynWtXn
W
T
X
n
W^TX_n
WTXn表示我们的模型算出来的分数,
y
n
W
T
X
n
y_nW^TX_n
ynWTXn表示算出来的分数在靠近真实的
y
n
y_n
yn,这就意味着从t到t+1过程中的权重
W
W
W的改变,会使得整个模型越来越与训练集的真值靠近。
算法的动态更新过程,可以用下图做可视化表示。
二、算法相关证明
思考两个问题:
- 按照上一节中描述的PLA版本,算法一定会停下来吗?
- 假设在当前数据集,PLA能够完美分割。但是对于新进来的X,我们的假设模型依旧成立吗?
第一个问题是本节证明的重点。第二个问题其实是算法泛化能力的问题,这是机器学习永恒的主题,我们会在接下章节中多次与它交手。
算法想要停下来,首先需要保证整个样本空间是线性可分的。
如果样本线性可分,那么PLA算法一定会停下来,并且在样本集空间中能够将样本做完美分割。
证明
证明思路:
使用
W
f
W_f
Wf表示最优的W,这个权重向量能够将每一个样本空间的点做正确区分。
我们使用
W
f
T
W
t
W_f^TW_t
WfTWt向量内积来表示
W
t
W_t
Wt向完美
W
f
W_f
Wf的相似程度。这个数值越大,表明
W
t
W_t
Wt越接近最优。
W
f
T
W
t
+
1
=
W
f
T
(
W
t
+
y
n
(
t
)
X
n
(
t
)
)
W_f^TW_{t+1}=W_f^T(W_t+y_{n(t)}X_{n(t)})
WfTWt+1=WfT(Wt+yn(t)Xn(t))
≥
W
f
T
W
t
+
m
i
n
(
y
n
W
f
T
X
n
)
\ge W_f^TW_t+min(y_nW_f^TX_n)
≥WfTWt+min(ynWfTXn)
≥
W
f
T
W
t
+
0
\ge W_f^TW_t+0
≥WfTWt+0
≥
W
f
T
W
t
\ge W_f^TW_t
≥WfTWt
上式说明,每次更新,
W
t
W_t
Wt是逐渐接近最优
W
f
W_f
Wf的。
再看长度:
∣
∣
W
t
+
1
∣
∣
2
=
∣
∣
W
t
+
y
n
(
t
)
X
n
(
t
)
∣
∣
2
||W_{t+1}||^2=||W_t+y_{n(t)}X_{n(t)}||^2
∣∣Wt+1∣∣2=∣∣Wt+yn(t)Xn(t)∣∣2
=
∣
∣
W
t
∣
∣
2
+
2
y
n
(
t
)
W
t
T
X
n
(
t
)
+
∣
∣
y
n
(
t
)
X
n
(
t
)
∣
∣
2
=||W_t||^2+2y_{n(t)}W_t^TX_{n(t)}+||y_{n(t)}X_{n(t)}||^2
=∣∣Wt∣∣2+2yn(t)WtTXn(t)+∣∣yn(t)Xn(t)∣∣2
≤
∣
∣
W
t
∣
∣
2
+
m
a
x
∣
∣
x
n
∣
∣
2
\le ||W_t||^2+max||x_n||^2
≤∣∣Wt∣∣2+max∣∣xn∣∣2
所以长度的增长有上限。每次长度最多增长
∣
∣
x
n
∣
∣
2
||x_n||^2
∣∣xn∣∣2
最后,我们联立上面两个结论,推导出单位权重向量的增长情况。
假设W从 W 0 W_0 W0经过了T个错误分类点的纠正,变成了 W T W_T WT,同样,我们知道 W 0 = − t h r e s h o l d W_0=-threshold W0=−threshold,在接下来证明中,令 W 0 = 0 W_0=0 W0=0
首先根据 W f T W t + 1 ≥ W f T W t + m i n ( y n W f T X n ) W_f^TW_{t+1}\ge W_f^T W_t+min(y_nW_f^TX_n) WfTWt+1≥WfTWt+min(ynWfTXn)推导出 W f T W t ≥ W f W 0 + T m i n ( y n W f T X n ) = T m i n ( y n W f T X n ) (1) W_f^TW_{t}\ge W_fW_0+Tmin(y_nW_f^TX_n)=Tmin(y_nW_f^TX_n) \tag{1} WfTWt≥WfW0+Tmin(ynWfTXn)=Tmin(ynWfTXn)(1)
然后根据
∣
∣
W
t
+
1
∣
∣
2
≤
∣
∣
W
t
∣
∣
2
+
m
a
x
∣
∣
X
n
∣
∣
2
||W_{t+1}||^2 \le ||W_t||^2+max||X_n||^2
∣∣Wt+1∣∣2≤∣∣Wt∣∣2+max∣∣Xn∣∣2推导出
∣
∣
W
t
∣
∣
2
≤
∣
∣
W
0
∣
∣
2
+
T
m
a
x
∣
∣
X
n
∣
∣
2
=
T
m
a
x
∣
∣
X
n
∣
∣
2
(2)
||W_t||^2\le||W_0||^2+Tmax||X_n||^2= Tmax||X_n||^2 \tag{2}
∣∣Wt∣∣2≤∣∣W0∣∣2+Tmax∣∣Xn∣∣2=Tmax∣∣Xn∣∣2(2)
利用(1)(2)结果,我们可以推导出
W
f
∣
∣
W
f
∣
∣
W
T
∣
∣
W
T
∣
∣
≥
T
m
i
n
(
y
n
W
f
T
X
n
)
∣
∣
W
f
∣
∣
T
m
a
x
∣
∣
X
n
∣
∣
=
T
∗
C
(3)
\frac{W_f}{||W_f||} \frac{W_T}{||W_T||}\ge \frac{Tmin(y_nW_f^TX_n)}{||W_f||\sqrt{T}max||X_n||} = \sqrt{T}*C \tag{3}
∣∣Wf∣∣Wf∣∣WT∣∣WT≥∣∣Wf∣∣Tmax∣∣Xn∣∣Tmin(ynWfTXn)=T∗C(3)其中
C
=
m
i
n
(
y
n
W
f
T
X
n
)
∣
∣
W
f
∣
∣
m
a
x
∣
∣
X
n
∣
∣
C=\frac{min(y_nW_f^TX_n)}{||W_f||max||X_n||}
C=∣∣Wf∣∣max∣∣Xn∣∣min(ynWfTXn)
至此,我们已经拿到对应的结论。C是一个常数,等式(3)左侧为两个单位向量,很明显可以看出随着T的增长,我们的
W
T
W_T
WT逐渐向
W
f
W_f
Wf靠近。
三、算法变种
我们无法确定拿到的data集是否存在一条完美分割的线。如果我们知道的话,那不就意味着我们知道f了,知道f就没必要再用机器学习来输出g去逼近f
而且往往data数据集中包含噪声。
所以问题来了。
当面对包含噪声,不知道是否线性可分的DATA情况,我们应该怎样求解?
Pocket Algorithm
通俗一点的讲法:
在PLA迭代过程中,始终将当前最好的一条线 W n o w W_{now} Wnow握在手里。在每次更新 W T W_T WT之后,遍历整个Data,比较 W n o w W_{now} Wnow和 W T W_T WT哪个分类效果更好,并将更好的线替换到 W n o w W_{now} Wnow中,直到算法迭代次数满足预设要求。
伪码流程:
缺点:
由于每次挑最好的时候,都要做一轮对比,所以Pocket Algorithm算法相比PLA会慢一些。