📄 visual_2d_fisher_newlibsvm.m
字号:
function visual_2d_fisher_newlibsvm(posData, negData)
% Usages:
% visual_2d_fisher_newlibsvm(posData, negData) project high-dimension data to a 2D
% plot using Fisher discriminant analysis
%
% Inputs:
% posData, negData = data in osu_svm style, made up of the row feature
% vectors.
%
% By Tian Tsong Ng, July 2005
C1 = posData;
C2 = negData;
casesN1 = size(C1,1);
casesN2 = size(C2,1);
% generate gaussian data
data = [C1; C2];
sampleSize = [casesN1,casesN2];
% findFLD2 - compute Fisher Linear Discriminant
m = mean(data,1);
Nsample = size(data,1);
data = data - m(ones(Nsample,1),:);
Nclass = length(sampleSize);
Ns = [0 , cumsum(sampleSize(:)')];
Sw = 0;
Sb = 0;
for count = 1:Nclass
testData = data((Ns(count)+1):Ns(count+1),:);
mc = mean(testData);
Nc = size(testData,1);
for n = 1:Nc
Sw = Sw + (testData(n,:)-mc)'*(testData(n,:)-mc);
end
Sb = Sb + Nc*(mc-m)'*(mc-m);
end
mdim = size(Sw,1);
% for gray
Sw = Sw + 0.001*eye(mdim);
% for rgb
% Sw = Sw + 0.000001*eye(mdim);
% coef = 0.00001 is good
whos Sb Sw
[V,D,flag] = eigs(Sb,Sw,2);
d1 = V(:,1);
d1 = d1/sqrt(sum(d1.^2));
P1 = C1*d1;
N1 = C2*d1;
d2 = V(:,2);
d2 = d2 - (d2'*d1)*d1;
d2 = d2/sqrt(sum(d2.^2));
P2 = C1*d2;
N2 = C2*d2;
C{1} = [P1,P2];
C{2} = [N1,N2];
for n = 1:length(C)
gM{n} = mean(C{n});
gC{n} = cov(C{n});
end
symb = {'ob','or','bg'};
figure;
for n = 1:length(C)
scatter(C{n}(:,1),C{n}(:,2),5,symb{n});
hold on;
end
symb = {'b','k','g'};
for n = 1:length(C)
gmmplot(gM{n},gC{n},1/length(C),[1 2],1,symb{n});
hold on;
end
axis off
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -