LDA是一种有监督的降维技术,它的每个样本输出都是有类别的。
LDA的思想是投影后类间方差尽可能大,类内方差尽可能小。
类间散度矩阵为:
S b = ∑ i = 1 C ( μ i − μ ) ( μ i − μ ) T \boldsymbol{S}_{b}=\sum_{i=1}^{C}(\mu _{i}-\mu)(\mu _{i}-\mu)^{T} Sb=i=1∑C(μi−μ)(μi−μ)T
其中, C C C为类别总数, μ \mu μ为所有样本的均值:
μ = 1 m ∑ i = 1 m x i \mu =\frac{1}{m}\sum_{i=1}^{m}\mathbf{x}^{i} μ=m1i=1∑mxi
∣ C i ∣ |C_{i}| ∣Ci∣为类别为 C i C_{i} Ci的样本数, μ i \mu _{i} μi为类别为 C i C_{i} Ci的样本均值:
μ i = 1 ∣ C i ∣ ∑ i = 1 ∣ C i ∣ x i \mu _{i}=\frac{1}{|C_{i}|}\sum_{i=1}^{|C_{i}|}\mathbf{x}^{i} μi=∣Ci∣1i=1∑∣Ci∣xi
类间散度矩阵为:
S w = ∑ i = 1 C ∑ x i ∈ C i ( x i − μ i ) ( x i − μ i ) T \mathbf{S}_{w}=\sum_{i=1}^{C}\sum_{\mathbf{x}^{i}\in C_{i}}(\mathbf{x}^{i}-\mu _{i})(\mathbf{x}^{i}-\mu _{i})^{T} Sw=i=1∑Cxi∈Ci∑(xi−μi)(xi−μi)T
投影后的类间协方差矩阵:
w T S b w \mathbf{w^{T}S_{b}w} wTSbw
投影后的类内协方差矩阵:
w T S w w \mathbf{w^{T}S_{w}w} wTSww
类内方差最小,类间方差最大,等价于最大化下式:
arg max w w T S b w w T S w w \arg \max_{w}\frac{\mathbf{w^{T}S_{b}w}}{\mathbf{w^{T}S_{w}w}} argwmaxwTSwwwTSbw
分子和分母都为 w \mathbf{w} w的二次项,不失一般性,令 w T S w w = 1 \mathbf{w^{T}S_{w}w}=1 wTSww=1,则上式等价于最小化下式:
arg min w − w T S b w s . t . w T S w w = 1 \arg\min_{w}-\mathbf{w^{T}S_{b}w}\\ s.t.\mathbf{w^{T}S_{w}w}=1 argwmin−wTSbws.t.wTSww=1
带约束的最优化问题,使用拉格朗日乘子法:
J ( w ) = − w T S b w − λ ( 1 − w T S w w ) J(\mathbf{w})=-\mathbf{w^{T}S_{b}w}-\lambda(1-\mathbf{w^{T}S_{w}w}) J(w)=−wTSbw−λ(1−wTSww)
此时,求梯度并令梯度为0:
∂ J ( w ) ∂ w = − 2 S b w + 2 λ S w w = 0 \frac{\partial J(\mathbf{w})}{\partial \mathbf{w}}=-2\mathbf{S_{b}w}+2\lambda\mathbf{S_{w}w}=0 ∂w∂J(w)=−2Sbw+2λSww=0
最终得:
S w − 1 S b w = λ w \mathbf{S_{w}^{-1}S_{b}w}=\lambda \mathbf{w} Sw−1Sbw=λw
因此,需要求 S w − 1 S b w \mathbf{S_{w}^{-1}S_{b}w} Sw−1Sbw的特征值和特征向量。
由于利用了样本的类别得到的投影矩阵,因此降维到的维度 d d d最大值为类别数减1。
输入: m m m个 n n n维样本,有 k k k个类别,需要降到的维度为 d d d。
输出:降维后的样本集。
(1)分别求出类间散度矩阵 S b \mathbf{S_{b}} Sb和类内散度矩阵 S w \mathbf{S_{w}} Sw。
(2)计算出矩阵 S w − 1 S b \mathbf{S_{w}^{-1}S_{b}} Sw−1Sb。
(3)计算出矩阵 S w − 1 S b \mathbf{S_{w}^{-1}S_{b}} Sw−1Sb的最大 d d d个特征值和对应的特征向量,组成投影矩阵:
W = ( w 1 , w 2 , . . . , w d ) \mathbf{W}=(\mathbf{w}_{1},\mathbf{w}_{2},...,\mathbf{w}_{d}) W=(w1,w2,...,wd)
(4)得到新的样本:
x n e w i = W T x i \mathbf{x^{i}_{new}}=\mathbf{W^{T}x^{i}} xnewi=WTxi
(1)LDA为有监督降维,PCA为无监督降维。
(2)PCA可以降低到任意维度,LDA只能降维最大至类别数减1。
(3)LDA可以进行分类。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn.datasets import make_classification
x, y = make_classification(n_samples=1000, n_features=3, n_redundant=0, n_classes=3, n_informative=2,
n_clusters_per_class=1,class_sep =0.5, random_state =10)
print(x.shape)
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(x[:, 0], x[:, 1], x[:, 2],c=y)
from sklearn.decomposition import PCA
model1=PCA(n_components=2)
x1 = model1.fit_transform(x)
print(x1.shape)
plt.scatter(x1[:,0],x1[:,1],c=y)
plt.show()
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
model2 = LinearDiscriminantAnalysis(n_components=2)
model2.fit(x,y)
x2=model2.transform(x)
print(x2.shape)
plt.scatter(x2[:,0],x2[:,1],c=y)
plt.show()