【问题标题】:Line Projected - Linear discriminant analysisLine Projected - 线性判别分析
【发布时间】:2016-07-06 08:42:28
【问题描述】:

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

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

http://research.cs.tamu.edu/prism/lectures/pr/pr_l10.pdf http://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]

【问题讨论】:

    标签: algorithm matlab machine-learning linear-algebra linear-regression


    【解决方案1】:

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

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

    作为问题一的结果,我怎样才能投影第一类和第二类的数据。我的意思是如何绘制它们。

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

    v_0 x + v_1 y = 0
    

    是您要查找的行。有很多以规范形式绘制线条的方法。其中之一(假设它不是常数)是用“高中格式”表示:

    y = - v_0 / v_1 * x
    

    如果v_1 不为0,则显然有效,如果是,则您的线只是X 轴。

    【讨论】:

    • 你介意告诉我这是怎么回事吗?您能否在该线上绘制投影线和每个类的项目数据。感谢您宣布特征值和向量的想法,我认为我们可以在不去特征值和向量的情况下找到投影向量 - 如文档中所述。
    • 我给了你你想要绘制的线的方程。要绘制(一维)投影数据,您只需使用点积 - 就像在您的代码中一样。
    • 因为来自 (v) 的向量是 [-0.7936 0.8899]'。我将 (x) 视为我的第 1 类原始数据,并将其绘制如下。 plot((0.793/0.889)*c1),不知道为什么需要点积。如果您提供更多解释,我将不胜感激,我还是初学者。
    猜你喜欢
    • 2013-06-19
    • 2013-12-10
    • 2018-07-08
    • 2022-06-22
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    相关资源
    最近更新 更多