线投影 - 线性判别分析



我有两个问题。我有用于线性判别分析的附加代码,它处理两个类 - 每个类两个特征。这是最基本的一个。然而

我不知道为什么我的投影线与教程不同。请告诉我我对所附pdf的错误实现在哪里。

http://research.cs.tamu.edu/prism/lectures/pr/pr_l10.pdfhttp://www.di.univr.it/documenti/OccorrenzaIns/matdid/matdid437773.pdf

% Fisher's linear discriminant. 
% : xi is column vector of which element is test metric. 
% Therefore size of row is the number of test metrics. 
% Number of column is the number of data sets. 
% x1 = rand(2, 30) + 0.75.*ones(2,30); %[d1(:,c1) d1(:,c2)]';
% x2 = rand(2, 30) + 0.3 .*ones(2,30); %[d2(:,c1) d2(:,c2)]';
x1=[1 2;2 3;3 3;4 5;5 5]'  % the first class 5 observations
x2=[1 0;2 1;3 1;3 2;5 3]' % the second class 6 observations
m1 = mean(x1')'; 
m2 = mean(x2')'; 
m = m1 + m2; 
Sw1 = zeros(size(x1, 1), size(x1,1)); 
Sw2 = zeros(size(x1, 1), size(x1,1)); 
   for i = 1:size(x1,1)
       Sw1 =  Sw1 + (x1(:,i)-m1)*(x1(:,i)-m1)';
   end
  for i = 1:size(x2,1)
     Sw2 =  Sw2 + (x2(:,i)-m2)*(x2(:,i)-m2)';
  end
 Sw = Sw1 + Sw2; 
 w = Sw^(-1)*(m2-m1);
  scatter(x1(1,:), x1(2,:), 10, 'ro');
hold on;
scatter(x2(1,:), x2(2,:),10,'bo');
c = 0.5.*m; %Average mean.ie. m/2
quiver(c(1,1), c(2,1), 1, -w(1,1)/w(2,1));
quiver(c(1,1), c(2,1), -1, w(1,1)/w(2,1));
quiver(w(1,1),w(2,1), 0.5)
hold off;
figure; 
y1 = x1'*w; 
y2 = x2'*w; 
hist([y1 y2])
newy=w'*newp;
%newp is new point
diff1=abs(m1-newy);
diff2=abs(m2-newy);
if diff1 >=diff2
  %newp is included in class1
else
%newp is included in class2

 It has to be something similar to the following picture
[![smthg simialr to the following final results][3]][3]

我不知道如何在两个类之间投影线。我看到的一些解决方案,他们使用特征值和矢量来确定投影线,而其他一些解决方案则不需要通过确定特征值。为什么协方差矩阵的秩很重要?

特征值用于反转矩阵,您可能还在调用中使用inv(sw)特征分解。这对该方法并不重要,您可以通过多种方式反转矩阵。

作为问题一的结果,我如何预测一等和二等的数据。我的意思是我怎么能绘制它们。

提供的图像有点误导。实际上,您投影到的"线"(超平面)应该穿过原点 (0,0)。他们将其移走的事实只是武断的决定 - 方法本身不支持。超平面的方程存储在v向量中,它以规范形式给出,因此

v_0 x + v_1 y = 0

是您正在寻找的行。 有很多方法可以以规范形式绘制线条。其中之一(假设它不是恒定的)是以"高中格式"表达它:

y = - v_0 / v_1 * x

这显然有效 iff v_1 不是 0,如果是,你的线只是 X 轴。

相关内容

  • 没有找到相关文章