绘制矢量w以及另一个矢量投影到w上

时间:2016-03-31 00:26:15

标签: matlab vector linear-algebra matlab-figure projection

我如何绘制向量 w 并将投影数据放到此向量上? 这是代码 - 我的试验用 y1 y2 绘制权重向量。

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;6 5]
m1 = mean(x1); 
m2 = mean(x2); 
m = m1 + m2; 
d1=x1-repmat(m1,5,1);
d2=x2-repmat(m2,6,1);
c = 0.5.*m; 
Sw1 = d1'*d1;
Sw2 = d2'*d2;
Sw = Sw1 + Sw2; 
invSw = inv(Sw);
w= invSw*(m1-m2)' %this is my vector projected
scatter(x1(:,1), x1(:,2), 10, 'ro');
hold on;
scatter(x2(:,1), x2(:,2), 10,'bo');
%this is how i plot the decision boundary, but it doesn't seems correct. 
quiver(c(1,1), c(1,2), 1, -w(1,1)/w(2,1));
quiver(c(1,1), c(1,2), -1, w(1,1)/w(2,1));

auxw= w/norm(w);
plot([0 auxw(1)], [0 auxw(2)]) 
hold off;
figure; 
y1 = x1*w; 
y2 = x2*w; 
hist([y1' y2'])

1 个答案:

答案 0 :(得分:2)

你非常接近。您只计算(或尝试计算)标量投影或您应用于每个向量的比例数量,以便将x1x2中的每个向量投影到w虽然你所拥有的是不完整的。如果从线性代数中回忆起来,要确定两个向量ab之间的标量投影,或ba的标量投影,公式为:

Source: Oregon State Mathematics: Calculus for Undergraduates

在我们的案例中,a将是w,而b将是x1x2中看到的每个向量。我假设这些矩阵的每一行都是一个向量。标量投影见y1y2。您需要计算向量投影,该投影被定义为采用标量投影并乘以a的单位向量,或者只是:

Source: Oregon State Mathematics: Calculus for Undergraduates

因此,y1y2中标量投影的计算不正确。您必须乘以规范化向量w,然后在找到这些标量投影值时,将这些标量值中的每一个乘以相应的规范化向量{ {1}}。但是,在图表上同时绘制这些内容将会令人困惑。你会有很多行会重叠到原始向量w上,所以我做的是通过绘制wwx1中的向量以及相应的对象来循环投影矢量。每次循环时,我们暂停并显示数据,然后清除图形并重新开始。

因此,我已添加并将以下内容更改为您的代码。

x2

函数bsxfun允许我们将%// Your data w = [-0.7936; 0.8899]; x1 = [1 2; 2 3; 3 3; 4 5; 5 5]; x2 = [1 0; 2 1; 3 1; 3 2; 5 3; 6 5]; %// Compute scalar projection auxw = w/norm(w); s1 = x1*auxw; s2 = x2*auxw; %// Change for correctness %// Compute the vector projection y1 = bsxfun(@times, s1, auxw.'); y2 = bsxfun(@times, s2, auxw.'); %// Place the original vectors and corresponding projections %// in one matrix y = [y1; y2]; x = [x1; x2]; %// Loop through and plot w, a point in either x1 or x2 %// and the corresponding projection for ii = 1 : size(y,1) plot([0 w(1)], [0 w(2)]); hold on; plot([0 y(ii,1)], [0 y(ii,2)], 'r'); plot([0 x(ii,1)], [0 x(ii,2)], 'g'); pause(0.5); clf; end x1中的每个向量乘以其对应的标量值。具体来说,它将采用向量x2s1,当我们将s2转置为auxw向量时,我们将创建新的矩阵1 x 2和{{ 1}}其中每一行都将计算y1y2的向量投影,并将它们放入x1x2的行中。

结尾处的循环遍历y1y2w中的向量以及相应的一次投影向量,我们每次暂停0.5秒结果是什么样的。向量x1为蓝色,投影向量为绿色,x2w的原始向量为红色。

我们得到了一系列数据:

enter image description here

我们可以看到红线,它是x1x2x1的投影向量。绿线是x2w的原始向量。