我如何绘制向量 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'])
答案 0 :(得分:2)
你非常接近。您只计算(或尝试计算)标量投影或您应用于每个向量的比例数量,以便将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
中标量投影的计算不正确。您必须乘以规范化向量w
,然后在找到这些标量投影值时,将这些标量值中的每一个乘以相应的规范化向量{ {1}}。但是,在图表上同时绘制这些内容将会令人困惑。你会有很多行会重叠到原始向量w
上,所以我做的是通过绘制w
,w
或x1
中的向量以及相应的对象来循环投影矢量。每次循环时,我们暂停并显示数据,然后清除图形并重新开始。
因此,我已添加并将以下内容更改为您的代码。
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
中的每个向量乘以其对应的标量值。具体来说,它将采用向量x2
和s1
,当我们将s2
转置为auxw
向量时,我们将创建新的矩阵1 x 2
和{{ 1}}其中每一行都将计算y1
和y2
的向量投影,并将它们放入x1
和x2
的行中。
结尾处的循环遍历y1
,y2
或w
中的向量以及相应的一次投影向量,我们每次暂停0.5秒结果是什么样的。向量x1
为蓝色,投影向量为绿色,x2
或w
的原始向量为红色。
我们得到了一系列数据:
我们可以看到红线,它是x1
或x2
到x1
的投影向量。绿线是x2
或w
的原始向量。