LDA 中文名称线性判别分析
最近用到LDA,因为不是数学方面出生,所以只管结果正确,不太追究具体的原理,在网上找到了一些别人的实现以及参考资料,自己实现了以下,但和OpenCV里面的LDA[1]结果相差较大,后来经过参考多个版本以及理论知识,最终实现版本如下,与OpenCV的LDA结果一致且与LDA的公式相符:
function [coeff, latent]= myLDA(data, labels)
% Make sure labels are nice
[classes, bar, labels] = unique(labels);
nc = length(classes);
dataMean = mean(data, 1);
Sb = 0;%类间
for i = 1:nc
cur_X = data(labels == i,:);
meanTemp = mean(cur_X, 1);
Sb = Sb + size(cur_X,1)*(meanTemp'-dataMean')*(meanTemp'-dataMean')';
end
Sw = 0;%类内
for i = 1:nc
cur_X = data(labels == i,:);
meanTemp = mean(cur_X, 1);
for j = 1:size(cur_X,1)
dataTemp = cur_X(j, :);
Sw = Sw + (meanTemp' - dataTemp&#