绘制向量 w 以及另一个向量在 w 上的投影
Draw the vector w as well as the projection of another vector onto w
如何 绘制 向量 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'])
你们很亲近。您只计算(或尝试计算)标量投影或应用于每个矢量的比例量,以便将 x1
和 x2
中的每个矢量投影到 w
上你有的是不完整的。如果你回忆一下线性代数,要确定两个向量 a
和 b
之间的标量投影,或者 b
到 a
的标量投影,公式是:
Source: Oregon State Mathematics: Calculus for Undergraduates
在我们的例子中,a
将是 w
,而 b
将是 x1
和 x2
中看到的每个向量。我假设这些矩阵的每一行都是一个向量。在 y1
和 y2
中可以看到标量投影。您需要计算 向量 投影,它被定义为采用标量投影并乘以 a
的单位向量,或者简单地说:
Source: Oregon State Mathematics: Calculus for Undergraduates
因此,y1
和y2
中标量投影的计算是不正确的。你必须乘以 normalized 向量 w
,然后当你找到这些标量投影值时,你将这些标量值中的每一个乘以相应的 normalized向量w
。然而,将这些同时绘制在图表上会令人困惑。您将有许多线重叠到原始矢量 w
上,所以我所做的是循环绘制 w
,x1
或 x2
中的矢量以及相应的投影矢量。每次我们循环时,我们都会暂停并显示数据,然后清除图形并重新开始。
因此,我已将以下内容添加并更改到您的代码中。
%// 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
函数bsxfun
允许我们将x1
和x2
中的每个向量乘以它们对应的标量值。具体来说,它将采用向量 s1
和 s2
,当我们将 auxw
转置为 1 x 2
向量时,我们将创建新矩阵 y1
和 y2
其中每行将计算 x1
和 x2
的矢量投影并将它们放入 y1
和 y2
的行中。
最后的循环循环遍历w
,x1
或x2
中的一个向量和相应的投影向量一次一个,我们每次暂停0.5秒看看结果是什么样的。矢量 w
为蓝色,投影矢量为绿色,来自 x1
或 x2
的原始矢量为红色。
我们得到这些系列的数字:
我们可以看到红线,它是从 x1
或 x2
到 w
的投影向量。绿线是来自 x1
或 x2
.
的原始向量
如何 绘制 向量 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'])
你们很亲近。您只计算(或尝试计算)标量投影或应用于每个矢量的比例量,以便将 x1
和 x2
中的每个矢量投影到 w
上你有的是不完整的。如果你回忆一下线性代数,要确定两个向量 a
和 b
之间的标量投影,或者 b
到 a
的标量投影,公式是:
Source: Oregon State Mathematics: Calculus for Undergraduates
在我们的例子中,a
将是 w
,而 b
将是 x1
和 x2
中看到的每个向量。我假设这些矩阵的每一行都是一个向量。在 y1
和 y2
中可以看到标量投影。您需要计算 向量 投影,它被定义为采用标量投影并乘以 a
的单位向量,或者简单地说:
Source: Oregon State Mathematics: Calculus for Undergraduates
因此,y1
和y2
中标量投影的计算是不正确的。你必须乘以 normalized 向量 w
,然后当你找到这些标量投影值时,你将这些标量值中的每一个乘以相应的 normalized向量w
。然而,将这些同时绘制在图表上会令人困惑。您将有许多线重叠到原始矢量 w
上,所以我所做的是循环绘制 w
,x1
或 x2
中的矢量以及相应的投影矢量。每次我们循环时,我们都会暂停并显示数据,然后清除图形并重新开始。
因此,我已将以下内容添加并更改到您的代码中。
%// 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
函数bsxfun
允许我们将x1
和x2
中的每个向量乘以它们对应的标量值。具体来说,它将采用向量 s1
和 s2
,当我们将 auxw
转置为 1 x 2
向量时,我们将创建新矩阵 y1
和 y2
其中每行将计算 x1
和 x2
的矢量投影并将它们放入 y1
和 y2
的行中。
最后的循环循环遍历w
,x1
或x2
中的一个向量和相应的投影向量一次一个,我们每次暂停0.5秒看看结果是什么样的。矢量 w
为蓝色,投影矢量为绿色,来自 x1
或 x2
的原始矢量为红色。
我们得到这些系列的数字:
我们可以看到红线,它是从 x1
或 x2
到 w
的投影向量。绿线是来自 x1
或 x2
.