线性判别分析(Linear Discriminant Analysis, LDA)是一种经典的模式识别方法,它通过将数据投影到一个低维空间来实现分类。该算法假设每个类别的数据都服从多元正态分布,并且各个类别的协方差矩阵相同。LDA算法的主要目标是将不同类别之间的距离最大化,同时将同一类别内部的距离最小化。
基本思想
LDA算法的基本思想是将多维数据投影到一个低维空间,使得不同类别之间的距离尽可能大,同一类别内部的距离尽可能小。假设有n个样本,每个样本有m个特征。LDA算法的主要步骤如下:
对每个类别,计算其均值向量。将所有类别的均值向量合并为一个矩阵M,其中每行对应一个均值向量。
对每个类别,计算其协方差矩阵Si。
计算总的类别内散度矩阵Sw,表示所有类别内部数据的离散程度。
计算总的类别间散度矩阵Sb,表示不同类别之间的距离。
对矩阵Sw求逆,然后计算矩阵Sw^-1Sb的特征向量和特征值。
对特征值从大到小排序,选择前k个特征向量作为投影方向。
将数据投影到选定的投影方向上,得到新的低维特征表示。
利用投影后的特征表示进行分类。
数学表述
假设有k个类别,每个类别有nk个样本。每个样本有m个特征,表示为x=(x1, x2, …, xm)。类别标签用y表示,y∈{1,2,…,k}。LDA算法的主要目标是最大化以下函数:
J(w) = (wTSbTw)/(w^T Sw^w)
其中w是一个m维列向量,表示投影方向。Sb和Sw分别表示类别间散度矩阵和类别内散度矩阵,定义如下:
Sb = Σk(nk*(mk-m)(mk-m)^T)
Sw = ΣkΣi(xi-mk)(xi-mk)^T
其中mk是第k个类别的均值向量,xi是第k个类别中的第i个样本。J(w)的值越大,说明投影后的类别间距离越大,同一类别内部距离越小。因此,LDA算法的目标是求解J(w)的最大值对应的投影方向w。利用拉格朗日乘数法,将J(w)的约束条件w^T Sw^w = 1加入到目标函数中,得到如下优化问题:
max(w) J(w) = (w^T SbTw)/(wT Sw^w)
subject to: w^T Sw^w = 1
对上述优化问题求解,可以得到特征值问题:
Sw^-1 Sb w = λw
其中λ是特征值,w是特征向量。解出特征向量后,将其按照特征值大小从大到小排序,选择前k个特征向量作为投影方向,将原始数据投影到这些方向上,得到新的低维特征表示。
LDA和PCA的比较
LDA和主成分分析(Principal Component Analysis, PCA)都是常用的降维方法,它们的区别在于降维的目标不同。PCA旨在最大化数据的方差,而LDA旨在最大化类别间距离,同时最小化类别内距离。因此,LDA更适合于分类问题,而PCA更适合于数据可视化等非监督学习任务。
此外,LDA的投影方向是根据类别信息得到的,因此它需要有类别标签的数据才能训练。而PCA只需要原始数据,不需要类别标签。在没有类别标签的情况下,PCA是更为常用的降维方法。
设样本集合D={(x1, y1), (x2, y2), …, (xn, yn)},其中xi∈R^d为第i个样本的特征向量,yi∈{0, 1}为第i个样本的类别标签,0表示负样本,1表示正样本。假设正样本数为m1,负样本数为m0,总样本数为m=m0+m1。
计算均值向量
分别计算正样本集合D1和负样本集合D0的均值向量:
μ1 = (1/m1) ∑xi,yi=1
μ0 = (1/m0) ∑xi,yi=0
计算类内散度矩阵
计算正样本集合D1和负样本集合D0的类内散度矩阵Si:
Si = ∑(xi - μi)(xi - μi)^T,yi = i
计算总类内散度矩阵
计算总类内散度矩阵Sw:
Sw = S0 + S1
其中,S0和S1分别为负样本集合D0和正样本集合D1的类内散度矩阵。
计算类间散度矩阵
计算类间散度矩阵Sb:
Sb = (μ1 - μ0)(μ1 - μ0)^T
求解投影方向
目标是求解J(w)的最大值对应的投影方向w。利用拉格朗日乘数法,将J(w)的约束条件w^T Sw^w = 1加入到目标函数中,得到如下优化问题:
max(w) J(w) = (w^T SbTw)/(wT Sw^w)
subject to: w^T Sw^w = 1
对上述优化问题求解,可以得到特征值问题:
Sw^-1 Sb w = λw
其中λ是特征值,w是特征向量。
选择投影方向
将特征向量按照对应的特征值大小从大到小排序,选择前k个特征向量作为投影方向,将原始数据投影到这些方向上,得到新的低维特征表示。
这样,我们就完成了线性判别分析算法的公式推导。
上一篇:python学习——【第五弹】
下一篇:重识express再学一遍