线性判别法LDA——P60
主要思想
需要找一条直线,希望各点投影在该直线上后,希望同一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。量化这两点感官,则需满足异类点的中心距离远,同类点的方差小.
模型建立
假设我们有数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x m , y m ) } D=\{(x_1,y_1),(x_2,y_2),\dots,(x_m,y_m)\} D={(x1,y1),(x2,y2),…,(xm,ym)},其中任意样本 x i x_i xi为n为向量, y i ∈ { 0 , 1 } y_i\in\{0,1\} yi∈{0,1},我们定义
- X i ( i = 0 , 1 ) X_i(i=0,1) Xi(i=0,1)为第 i i i类样本的集合,
- # X i ( i = 0 , 1 ) \#X_i(i=0,1) #Xi(i=0,1)为第 i i i类样本的个数,
- a i ( i = 0 , 1 ) a_i(i=0,1) ai(i=0,1)为第 i i i类样本的投影中心点(是一个向量),
- μ i ( i = 0 , 1 ) \mu_i(i=0,1) μi(i=0,1)为第 i i i类样本的中心点
- S i ( i = 0 , 1 ) S_i(i=0,1) Si(i=0,1)为第 i i i类样本的方差
- Σ i ( i = 0 , 1 ) \Sigma_i(i=0,1) Σi(i=0,1)为第 i i i类样本的协方差矩阵
根据投影的知识可得
点 ( x i 1 , x i 2 ) (x_{i1},x_{i2}) (xi1,xi2)在直线 w 1 x 1 + w 2 x 2 = 0 w_1x_1+w_2x_2=0 w1x1+w2x2=0上的投影相当于向量 ( x i 1 , x i 2 ) (x_{i1},x_{i2}) (xi1,xi2)在向量 ( w 1 , w 2 ) (w_1,w_2) (w1,w2)上的投影,即为向量 ( x i 1 , x i 2 ) (x_{i1},x_{i2}) (xi1,xi2)与向量 ( w 1 , w 2 ) (w_1,w_2) (w1,w2)的点积 ( x i ) T w (x_i)^Tw (xi)Tw
则有
a i = 1 # X i ∑ j ∈ X i ( x j ) T w = ( 1 # X i ∑ j ∈ X i ( x j ) T ) w = μ i w ( i = 0 , 1 ) a_i=\frac{1}{\#X_i}\sum_{j\in X_i}(x_j)^Tw~~~~~~~~\\ =(\frac{1}{\#X_i}\sum_{j\in X_i}(x_j)^T)w\\ =\mu_iw~~~~~~~~~(i=0,1) ai=#Xi1j∈Xi∑(xj)Tw =(#Xi1j∈Xi∑(xj)T)w=μiw (i=0,1)
S i = ∑ j ∈ X i ( ( x j ) T w − a i ) 2 = ∑ j ∈ X i ( ( ( x j ) T − μ i ) w ) 2 ( 1 ) = ∑ j ∈ X i ( ( x j − μ i ) T w ) 2 ( 2 ) = ∑ j ∈ X i w T ( x j − μ i ) ( x j − μ i T ) w ( 3 ) = w T ( ∑ j ∈ X i ( x j − μ i ) ( x j − μ i ) T ) w = w T Σ i w . ( i = 0 , 1 ) S_i=\sum_{j\in X_i}((x_j)^Tw-a_i)^2~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \\ =\sum_{j\in X_i}(((x_j)^T-\mu_i)w)^2~~~~~~~~~~~~~~~(1)\\ =\sum_{j\in X_i}((x_j-\mu_i)^Tw)^2~~~~~~~~~~~~~~~~~~~(2)\\ =\sum_{j\in X_i}w^T(x_j-\mu_i)(x_j-\mu_i^T)w~~~(3)\\ =w^T(\sum_{j\in X_i}(x_j-\mu_i)(x_j-\mu_i)^T)w~~~~~~~~~\\ =w^T\Sigma_iw.~~~~~(i=0,1)~~~~~~~~~~~~~~~~~~~~~~~~~~~ Si=j∈Xi∑((xj)Tw−ai)2 =j∈Xi∑(((xj)T−μi)w)2 (1)=j∈Xi∑((xj−μi)Tw)2 (2)=j∈Xi∑wT(xj−μi)(xj−μiT)w (3)=wT(j∈Xi∑(xj−μi)(xj−μi)T)w =wTΣiw. (i=0,1)
- 其中(1)由 a i a_i ai的表达式代入得到
- (2)由于 μ i \mu_i μi是数,一个数点转置还是它本身
- (3)根据 ( x T y ) 2 = ( x T y ) ( x T y ) = ( x T y ) T ( x T y ) = y T x x T y (x^Ty)^2=(x^Ty)(x^Ty)=(x^Ty)^T(x^Ty)=y^Txx^Ty (xTy)2=(xTy)(xTy)=(xTy)T(xTy)=yTxxTy其中 x T y x^Ty xTy为一个数
根据主要思想,我们建立以下目标函数
由于我们希望| a 1 − a 2 a_1-a_2 a1−a2|尽可能大, S 1 + S 2 S_1+S_2 S1+S2尽可能小,即可建立目标函数
由 于 min ∣ a 1 − a 2 ∣ = > min ( a 1 − a 2 ) 2 max w ( a 1 − a 2 ) 2 S 1 + S 2 由于\min~~ |a_1-a_2|=>\min ~~(a_1-a_2)^2\\ \max\limits_{w}\frac{(a_1-a_2)^2}{S_1+S_2} 由于min ∣a1−a2∣=>min (a1−a2)2wmaxS1+S2(a1−a2)2
下面求解 ( a 1 − a 2 ) 2 (a_1-a_2)^2 (a1−a2)2和 S 1 + S 2 S_1+S_2 S1+S2
( a 1 − a 2 ) 2 = ( ( μ 1 − μ 2 ) w ) 2 = w T ( μ 1 − μ 2 ) ( μ 1 − μ 2 ) T w S 1 + S 2 = w T ( Σ 1 + Σ 2 ) w (a_1-a_2)^2=((\mu_1-\mu_2)w)^2=w^T(\mu_1-\mu_2)(\mu_1-\mu_2)^Tw\\ S_1+S_2=w^T(\Sigma_1+\Sigma_2)w (a1−a2)2=((μ1−μ2)w)2=wT(μ1−μ2)(μ1−μ2)TwS1+S2=wT(Σ1+Σ2)w
最终确立目标函数为
max w = w T ( μ 1 − μ 2 ) ( μ 1 − μ 2 ) T w w T ( Σ 1 + Σ 2 ) w \max\limits_w=\frac{w^T(\mu_1-\mu_2)(\mu_1-\mu_2)^Tw}{w^T(\Sigma_1+\Sigma_2)w} wmax=wT(Σ1+Σ2)wwT(μ1−μ2)(μ1−μ2)Tw
根据拉格朗日乘子法得到最优权重为
w ∗ = ( Σ 1 + Σ 2 ) − 1 ( μ 1 − μ 2 ) w^*=(\Sigma_1+\Sigma_2)^{-1}(\mu_1-\mu_2) w∗=(Σ1+Σ2)−1(μ1−μ2)
当 Σ 1 + Σ 2 \Sigma_1+\Sigma_2 Σ1+Σ2不可逆的时候采用 w ∗ = ( Σ 1 + Σ 2 + λ I ) − 1 ( μ 1 − μ 2 ) w^*=(\Sigma_1+\Sigma_2+\lambda I)^{-1}(\mu_1-\mu_2) w∗=(Σ1+Σ2+λI)−1(μ1−μ2)
二分类
- 计算每个类别点集的中心点 μ i \mu_i μi
- 计算每个类别点集的协方差矩阵 Σ i \Sigma_i Σi
- 计算类间散度矩阵 S w = Σ 1 + Σ 2 S_w=\Sigma_1+\Sigma_2 Sw=Σ1+Σ2
- 判断
S
w
S_w
Sw是否可逆(在python中用np.linalg.det()求解矩阵A的行列式|A|,如果行列式为0,不可逆,否则可逆。)
- 若可逆,则 w ∗ = S w − 1 ( μ 1 − μ 2 ) w^*=S_w^{-1}(\mu_1-\mu_2) w∗=Sw−1(μ1−μ2)
- 若不可逆,则 w ∗ = ( S w + λ I ) − 1 ( μ 1 − μ 2 ) w^*=(S_w+\lambda I)^{-1}(\mu_1-\mu_2) w∗=(Sw+λI)−1(μ1−μ2)
多分类
-
计算整个样本点集的中心点 μ \mu μ
-
计算每个类别点集的中心点 μ i \mu_i μi
-
计算每个类别点集的协方差矩阵 Σ i \Sigma_i Σi
-
计算全局散度矩阵 S t = ∑ i = 1 m ( x i − μ ) ( x i − μ ) T S_t=\sum_{i=1}^m (x_i-\mu)(x_i-\mu)^T St=∑i=1m(xi−μ)(xi−μ)T
-
计算类内散度矩阵 S w = ∑ j = 1 k Σ j S_w=\sum_{j=1}^k\Sigma_j Sw=∑j=1kΣj
-
计算类间散度矩阵 S b = ∑ j = 1 k m j ( μ j − μ ) ( μ j − μ ) T S_b=\sum_{j=1}^k m_j(\mu_j-\mu)(\mu_j-\mu)^T Sb=∑j=1kmj(μj−μ)(μj−μ)T
其中 m j m_j mj表示第 j j j类的样本数
-
计算 S w − 1 S b S_w^{-1}S_b Sw−1Sb的特征根和特征向量,选取前k个