算法思想
LDA是经典的有监督的降维方法。而我们的降维方法,一般都是将样本数据进行投射。LDA的思想就是将样本投射到一条直线上,使同类的样本点尽可能的接近,而异类的样本点尽可能的远离。如下图所示:
算法推导
假设我们的样本数据是 D={(x1,y1),...,(xm,ym)} D = { ( x 1 , y 1 ) , . . . , ( x m , y m ) } 其中 yi∈{0,1} y i ∈ { 0 , 1 }
我们假设 xi,μi,Σi x i , μ i , Σ i 分别为第 i i 类样本的集合,均值以及协方差矩阵。
我们将数据映射到w上,则两类样本的中心点在直线上的投影分别为 wTμ0,wTμ1 w T μ 0 , w T μ 1
将所有的数据投射到w上,则两类样本的协方差分别为 wTΣ0w,wTΣ1w w T Σ 0 w , w T Σ 1 w
根据LDA的思想:
同类的样本点尽可能的接近,而异类的样本点尽可能的远离
有:
式子 wTΣ0w+wTΣ1w w T Σ 0 w + w T Σ 1 w 要尽可能的小
式子 ||wTμ0−wTμ1||22 | | w T μ 0 − w T μ 1 | | 2 2 要尽可能的大
因此我们的目标转化为最大化:
J=||wTμ0−wTμ1||22wTΣ0w+wTΣ1w=wT(μ0−μ1)(μ0−μ1)TwwT(Σ0+Σ1)w 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
我们可以定义类内散度矩阵:
Sw=Σ0+Σ1=∑x∈x0(x−μ0)(x−μ0)T+∑x∈x1(x−μ1)(x−μ1)T S w = Σ 0 + Σ 1 = ∑ x ∈ x 0 ( x − μ 0 ) ( x − μ 0 ) T + ∑ x ∈ x 1 ( x − μ 1 ) ( x − μ 1 ) T
类间散度矩阵:
Sb=(μ0−μ1)(μ0−μ1)T S b = ( μ 0 − μ 1 ) ( μ 0 − μ 1 ) T
所以优化目标变为:
J=||wTμ0−wTμ1||22wTΣ0w+wTΣ1w=wT(μ0−μ1)(μ0−μ1)TwwT(Σ0+Σ1)w=wTSbwwTSww 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 = w T S b w w T S w w
下面我们的目标就是如何确定w。
上面的式子与w的大小无关,因此问题可以转换为:
minw −wTSbw m i n w − w T S b w
s.t.wTSww=1 s . t . w T S w w = 1
利用拉个朗日乘子法,有:
Sbw=λSww S b w = λ S w w
由于 Sb=(μ0−μ1)(μ0−μ1)T S b = ( μ 0 − μ 1 ) ( μ 0 − μ 1 ) T ,因此可以令:
Sb=λ(μ0−μ1) S b = λ ( μ 0 − μ 1 )
带如式子有:
w=S−1w(μ0−μ1) w = S w − 1 ( μ 0 − μ 1 )
对 Sw S w 做奇异值分解:
Sw=UΣVT S w = U Σ V T
所以有:
S−1w=VΣ−1UT S w − 1 = V Σ − 1 U T
因此可以得到投影向量:
w=VΣ−1UT(μ0−μ1) w = V Σ − 1 U T ( μ 0 − μ 1 )
多维场景
对于降维问题,如果降到多维的场景,可以如下处理:
SbW=λSwW S b W = λ S w W
有:
S−w1SbW=λW S w − 1 S b W = λ W
因此只需要对 S−w1Sb S w − 1 S b 做特征值分解,得到的最大的特征值对应的特征向量组成的矩阵就是多维的投影向量。
多分类场景
如果是多分类(假设为 N N )问题,则只需要修改下式即可:
其中 mi m i 为第 i i <script type="math/tex" id="MathJax-Element-29">i</script>例样本的个数。
最后说一句
特征值分解或者奇异值分解无处不在啊。