hello! 大家好!线性判别分析LDA的算法及原理我们在上两篇之前已经详细介绍过,许多读者好奇LDA该如何实现,那么今天小A来教大家如何使用Python去实现LDA。
首先,计算均值:
这里data的行表示样本数,列表示特征。axis=0表示按照列来求均值,如果按行求特征,则axis=1
然后计算类内散度:
上一篇我们讲过类内散度的公式:
接下来计算类间散度:
这里np.vstack是合并样本。
类间散度公式如下所示:
最后是LDA实现
以下代码所对应的w的求值公式如下所示:
从这个公式的形式上看,w对应矩阵(Sw)逆*Sb的一个特征向量,而拉格朗日乘子就是相应的特征值。考虑到最大特征值对应变化最大的方向,因此我们将w取为(Sw)逆*Sb的最大特征值对应的特征向量,从而使其具有最好的分离效果。所以LDA的公式可以写成:
这里np.mat(Sw).I,np.mat是转化成为矩阵,而.I是矩阵求逆运算。
np.linalg.eig是计算矩阵的特征值和特征向量。
我们制造一些数据集:
以上就是LDA实现的全过程,具体公式的详细推导在线性判别分析LDA超详细讲解里有详细介绍。
喜欢的话点个关注吧~