线性判别分析
线性判别分析(Linear Discriminant Analysis,简称LDA)是一种经典的线性学习方法,在二分类问题上因为最早由Fisher, 1936] 提出,亦称“Fisher判别分析”
思想原理(模型)
从几何的角度,让全体训练样本经过投影
给定训练样例集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近(同类样本方差小),异类样例尽可能原理,在对新鲜样本进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定新样本的类别.
目标函数
为了使同类样例的投影点尽可能接近,可以让同类样例投影点的协方差尽可能小
w
T
∑
0
w
+
w
T
∑
1
w
w^T\textstyle\sum_0w+w^T\textstyle\sum_1w
wT∑0w+wT∑1w
而想要异类样例的投影点尽可能远离,可以让类中心之间的距离尽可能大
∣
∣
w
T
μ
0
−
w
T
μ
1
∣
∣
2
2
||w^T\mu_0-w^T\mu_1||^2_2
∣∣wTμ0−wTμ1∣∣22
同时考虑两者,则可以得到最大化的目标
J
=
∣
∣
w
T
μ
0
−
w
T
μ
1
∣
∣
2
2
w
T
∑
0
w
+
w
T
∑
1
w
=
w
T
(
μ
0
−
μ
1
)
(
μ
0
−
μ
1
)
T
w
w
T
(
∑
0
+
∑
1
)
w
J=\frac{||w^T\mu_0-w^T\mu_1||^2_2}{w^T\textstyle\sum_0w+w^T\textstyle\sum_1w}=\frac{w^T(\mu_0-\mu_1)(\mu_0-\mu_1)^Tw}{w^T(\textstyle\sum_0+\textstyle\sum_1)w}
J=wT∑0w+wT∑1w∣∣wTμ0−wTμ1∣∣22=wT(∑0+∑1)wwT(μ0−μ1)(μ0−μ1)Tw
定义“类内散度矩阵”
S
w
=
∑
0
+
∑
1
=
∑
x
∈
X
0
(
x
−
μ
0
)
(
x
−
μ
0
)
T
+
∑
x
∈
X
1
(
x
−
μ
1
)
(
x
−
μ
1
)
T
S_w=\textstyle\sum_0+\textstyle\sum_1=\displaystyle\sum_{x∈X_0}(x-\mu_0)(x-\mu_0)^T+\displaystyle\sum_{x∈X_1}(x-\mu_1)(x-\mu_1)^T
Sw=∑0+∑1=x∈X0∑(x−μ0)(x−μ0)T+x∈X1∑(x−μ1)(x−μ1)T
定义“类间散度矩阵”
S
b
=
(
μ
0
−
μ
1
)
(
μ
0
−
μ
1
)
S_b=(\mu_0-\mu_1)(\mu_0-\mu_1)
Sb=(μ0−μ1)(μ0−μ1)
目标函数可以重写为
J
=
w
T
S
b
w
w
T
S
w
w
J=\frac{w^TS_bw}{w^TS_ww}
J=wTSwwwTSbw
如何确定w呢,注意观察上述式子,可以知道目标函数分子分母是关于w的二次项,所以解与w的长度无关,只与其方向有关,为了不失其一般性,可以令
w
T
S
w
w
=
1
w^TS_ww=1
wTSww=1
问题可以转化为
min
w
w
T
S
b
w
\min\limits_ww^TS_bw
wminwTSbw
s
.
t
.
w
T
S
w
w
=
1
s.t.w^TS_ww=1
s.t.wTSww=1
这样可以将问题转化为在一个等式约束条件下,另一个函数求极值的问题。所以可以想到高数里的拉格朗日乘子法
S
b
w
=
λ
S
w
w
S_bw=\lambda S_ww
Sbw=λSww
由于
(
μ
0
−
μ
1
)
T
w
(\mu_0-\mu_1)^Tw
(μ0−μ1)Tw
是标量
所以
S
b
w
=
λ
(
μ
0
−
μ
1
)
S_bw=\lambda (\mu_0-\mu_1)
Sbw=λ(μ0−μ1)
最后得到
w
=
S
w
−
1
(
μ
0
−
μ
1
)
w=S^{-1}_w(\mu_0-\mu_1)
w=Sw−1(μ0−μ1)
考虑到数值解的稳定性,在实践中通常是对S_w进行奇异值分解
S
w
=
U
∑
V
T
S_w=U\textstyle\sum V^T
Sw=U∑VT
S
w
−
1
=
V
∑
−
1
U
S_w^{-1}=V\textstyle\sum^{-1} U
Sw−1=V∑−1U
LDA算法还可以推广到多任务学习中,我们可以定义“全局散度矩阵”
S
t
=
S
b
+
S
w
=
∑
i
=
1
m
(
x
i
−
μ
)
(
x
i
−
μ
1
)
T
S_t=S_b+S_w=\displaystyle\sum_{i=1}^m(x_i-\mu)(x_i-\mu_1)^T
St=Sb+Sw=i=1∑m(xi−μ)(xi−μ1)T
其中将类内散度矩阵定义为每个类别的散度矩阵之和
S
w
=
∑
i
=
1
N
S
w
i
S_w=\displaystyle\sum_{i=1}^NS_{w_i}
Sw=i=1∑NSwi
其中
S
w
i
=
∑
x
∈
X
i
(
x
−
μ
i
)
(
x
−
μ
i
)
T
S_{w_i}=\displaystyle\sum_{x∈X_i}(x-\mu_i)(x-\mu_i)^T
Swi=x∈Xi∑(x−μi)(x−μi)T
由上述式子们可得
S
b
=
S
t
−
S
w
=
∑
i
=
1
N
m
i
(
μ
i
−
μ
)
(
μ
i
−
μ
)
T
S_b=S_t-S_w=\displaystyle\sum_{i=1}^Nm_i(\mu_i-\mu)(\mu_i-\mu)^T
Sb=St−Sw=i=1∑Nmi(μi−μ)(μi−μ)T
显然,多分类LDA可以有多种实现方法,使用Sb,Sw,St中饭任何三个就可