LDA原理
LDA思想
这里的LDA是指Linear Discriminant Analysis,简称LDA,全称线性判别分析。要与自然语言处理领域的LDA(Latent Dirichlet Allocation)隐含狄利克雷分布区分开来。
LDA是一种监督学习降维技术,它的数据集的每个样本是有类别输出的。而PCA是不考虑样本类别输出的无监督降维技术。
核心思想是:投影后类内方差最小,类间方差最大。理解为:数据在低维度上进行投影,投影后希望每一类别数据的投影点尽可能接近,而不同类别数据的类别中心之间距离尽可能远。
瑞利商(Rayleigh quotient)与广义瑞利商(genralized Rayleigh quotient)
瑞利商的定义(R(A,x))如下
其中x为非零向量,而A为(n imes n)的Hermitan矩阵,所谓Hermitan矩阵就是满足共轭转置和自相等的矩阵,即(A^H=A)。如果A是实数阵,则满足(A^T=A)的矩阵即为Hermitan矩阵。
瑞利商(R(A,x))有一个非常重要的性质,即它的最大值等于矩阵A最大的特征值,而最小值等于矩阵A的最小特征值,也就是满足如下:
当x是正标准正交基时,即满足(x^Hx=1)时瑞利商退化为(R(A,x)=x^HAx)。
广义瑞利商定义如下:
其中(x)为非零向量,而A,B为(n imes n)的Hermitan矩阵,B为正定矩阵。它的最大值和最小值是什么?我们令(x=B^{-frac{1}{2}}x'),则上式分母转化为
而其分子转化为
此时我们的(R(A,B,x))转化为(R(A,B,x'))
利用瑞利商的性质可知,(R(A,B,x'))的最大值为矩阵(B^{-frac{1}{2}}AB^{-frac{1}{2}})的最大特征值或者说是矩阵(B^{-1}A)的最大特征值,而最小值为矩阵(B^{-1}A)的最小特征值。
二类LDA
LDA的目标是:中心点尽可能大,即每类均值的距离尽可能大;类间距离尽可能小,即协方差尽可能小。
最后推导为瑞利商和广义瑞利商。
假设数据集(D={(x_1,y_1),(x_2,y_2),...,(x_m,y_m)}),其中任意样本(x_i)为n维重见天日,(y_iin {{0,1}})。我们定义(N_j(j=0,1))为第j类样本的个数,(X_j(j=0,1))为第j类样本的集合,而(mu_j(j=0,1))为第j类样本的均值向量定义(Sigma_j(j=0,1))为第j类样本的协方差矩阵(缺少分母部分)。
(mu_j)表示为
(Sigma_j)表示为
由于是两类数据,我们将其投影到一条直线上即可。假设我们的投影直线是向量(w_j),则对任意一个样本(x_i),它在直线(w)的投影为(w^Tx_i),对于我们两个类别中心点(mu_0,mu_1),在直线(w)的投影为(w^Tmu_0)和(w^Tmu_1)。由于LDA需要让不同类别的数据中心之间的距离尽可能大,也就是我们需要最大化(lVert w^Tmu_0-w^Tmu_1 Vert_2^2),同时,我们希望同一种类数据的投影点尽可能的接近,也就是要同类样本投影点的协方差(w^TSigma_0w)和(w^TSigma_1w)尽可能的小,即最小化(w^TSigma_0w+w^TSigma_1w),综上所述,我们的优化目标表示为:
我们一般定义类间散度矩阵(S_w)如下
定义类间散度矩阵(S_b)如下
这样,重写优化目标如下
这就是广义瑞利商!由广义瑞利商的性质可知,我们的(J(w'))最大值为矩阵(S_w^{-frac{1}{2}}S_bS_w^{-frac{1}{2}})的最大特征值,而对应的(w')为(S_w^{-frac{1}{2}}S_bS_w^{-frac{1}{2}})的最大特征值对应的向量!而(S_w^{-1}S_b)的特征值和(S_w^{-frac{1}{2}}S_bS_w^{-frac{1}{2}})的特征值相同,(S_w^{-1}S_b)的特征向量(w)和(S_w^{-frac{1}{2}}S_bS_w^{-frac{1}{2}})的特征向量(w')满足(w=s_w^{-frac{1}{2}}w')的关系。
注意到,二分类时,(S_bw)的方向恒为(mu_0-mu_1),令(S_bw=lambda(mu_0-mu_1)),将其带入((S_w^{-1}S_b)w=lambda w),可以得到(w=S_w^{-1}(mu_0-mu_1)),也就是说只要求出原始二类样本的均值和方差,就可以确定最佳投影方向了。
多类LDA
同理(略)
LDA算法流程
输入:数据集(D={(x_1,y_1),(x_2,y_2),...,(x_m,y_m)}),其中任意样本(x_i)为n维向量,(y_iin{C_1,C_2,...,C_k})降维到的维度d
输出:降给后的样本集(D')
- 计算类内散度矩阵(S_w)
- 计算类间散度矩阵(S_b)
- 计算矩阵(S_w^{-1}S_b)
- 计算(S_w^{-1}S_b)的最大特征值对应的d个特征向量((w_1,w_2,...,w_d)),得到投影矩阵W
- 对样本集中的每一个样本特征x,转化为新的样本(z_i=W^Tx_i)
- 得到输出样本集(D'={(z_1,y_1),(z_2,y_2),...,(z_m,y_m)})
以上就是LDA进行降维的算法流程,实际上LDA除了可以用于降维外,还可以用于分类。一个常见的LDA分类基本思想是假设各个类别的样本数据符合高斯分布,这样利用LDA进行投影后,可以利用极大似然估计计算各个类别投影数据的均值和方差,进而得到该类别高斯分布的概率密度函数。当一个新的样本来后,我们可以将它投影,然后将投影后的样本特征分别带入各个类别的高斯分布概率函数,计算它属于这个类别的概率,最大概率对应的类别即为预测类别。
LDA VS PCA
LDA与PCA都可以用于降维
相同点:
- 均可降维
- 均使用了矩阵分解思想
- 都假设数据符合高斯分布
不同点:
- LDA是有监督的降维,PCA是无监督的降维
- LDA降维最多降到类别数k-1维,而PCA无此限制
- LDA除了降维,还可以用于分类
- LDA选择分类性能最好的投影方向,而PCA选择样本投影具有最大方差的方向
LDA算法总结
LDA优点:
- 降维过程可以使用先验知识,而PCA这种无监督学习无法使用先验知识
- LDA依赖均值而不是方差的时候,比PCA算法较优
LDA缺点:
- LDA不适合对非高斯分布进行降维
- 最多降维到类别数k-1维
- LDA依赖方差而不是均值的时候,降维效果不好
- LDA可能过拟合
sklearn中LDA使用
类库
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
参数
- solover:求LDA超平面特征矩阵使用的方法
- shrinkage:正则化参数
- priors:类别权重
- n_componets:降到的维数
实例
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
lda = LinearDiscriminantAnalysis(n_components=2)
lda.fit(x)
如果数据是有标签是,优先使用LDA。
PCA有助于去噪声。