LDA与PCA的区别如下表:
LDA的原理如下:
LDA降维的流程总结。
输入:数据集D={(x1,y1),(x2,y2),...,((xm,ym))},其中任意样本xi为n维向量,yi∈{C1,C2,...,Ck},降维到的维度d。
输出:降维后的样本集$D′$
1) 计算类内散度矩阵Sw
2) 计算类间散度矩阵Sb
3) 计算矩阵Sw^−1*Sb
4)计算Sw^−1*Sb的最大的d个特征值和对应的d个特征向量(w1,w2,...wd),得到投影矩阵W
5) 对样本集中的每一个样本特征xi,转化为新的样本zi=WT*xi
6) 得到输出样本集
代码实现如下,这里使用的a,b是Nx2的二维点集合,经过LDA后,二维的点变为一维。更高维度的也是可以做到的。函数里的dim是原始数据的维度,d是想要降到的维度。
def lda():
a=np.random.randn(100,2)/5 +[2,1]
b=np.random.randn(100,2)/5 +[1,2]
dim = a.shape[-1]
# plt.scatter(a[:, 0], a[:, 1], c='b')
# plt.scatter(b[:, 0], b[:, 1], c='r')
# plt.show()
centroid_a, centroid_b= np.mean(a, axis=0),