如何改善2个分离数据集的距离计算?
这是代码:
X = [ 3.6 79
1.8 54
3.333 74
2.283 62
4.533 85
2.883 55
4.7 88
3.6 85
1.95 51
4.35 85
1.833 54
3.917 84
4.2 78
1.75 47
4.7 83
2.167 52
1.75 62
4.8 84
1.6 52
4.25 79
1.8 51
1.75 47
3.45 78
3.067 69
4.533 74
3.6 83
1.967 55
4.083 76
3.85 78
4.433 79
4.3 73
4.467 77
3.367 66
4.033 80
3.833 74
2.017 52
1.867 48
4.833 80
1.833 59
4.783 90 ]
clc;
close all;
figure;
h(1) = plot(X(:,1),X(:,2),'bx');
hold on;
X1 = X(1:3,:);
X2 = X(4:40,:);
h(2) = plot(X1(1:3,1), X1(1:3,2),'rs','MarkerSize',10);
k=5;
[D2 ind] = sort(squeeze(sqrt(sum(bsxfun(@minus,X2,permute(X1,[3 2 1])).^2,2))))
ind_closest = ind(1:k,:)
x_closest = X(ind_closest,:)
for j = 1:length(x_closest);
h(3) =plot(x_closest(j,1),x_closest(j,2),'ko','MarkerSize',10);
end
输出如下图所示:
问题是,代码没有选择红色平方数据点的最近数据点。我也尝试使用统计工具箱中的pdist2函数,结果与我在代码中应用的bsxfun函数类似。 我不确定代码中哪个部分需要改进,以便我可以选择最接近目标的数据点。 真的很感激,如果有人可以帮我改进我的代码
答案 0 :(得分:0)
如果closest point
表示最接近X
,则第19行&第20行应该替换为
[D2 ind] = sort(squeeze(sqrt(sum(bsxfun(@minus, X ,permute(X1,[3 2 1]))。^ 2,2))))
ind_closest = ind( 2:k + 1 ,:)
如果closest point
表示最接近X2
,请尝试以下操作:
x_closest = X2 (ind_closest,:)
与此同时,我对您的代码进行了一些修改,因为您的h(3)
可以进行优化。
clc; clear; close all;
%load fisheriris
%X=meas(:,3:4);
load X
X=unique(X,'rows');
figure;
h(1) = plot(X(:,1),X(:,2),'bx');
hold on;
X1 = X([5 15 30],:);
h(2) = plot(X1(:,1), X1(:,2),'rs','MarkerSize',10);
[D2,ind] = sort(squeeze(sqrt(sum(bsxfun(@minus,X,permute(X1,[3 2 1])).^2,2))));
k=3;
ind_closest = unique(ind(2:k+1,:));
x_closest = X(ind_closest,:);
h(3) =plot(x_closest(:,1),x_closest(:,2),'ko','MarkerSize',10);
axis equal
似乎工作正常。