1

我有一组随机的点,我想将它们绘制成不同的类(颜色)。我知道如何根据不同的功能对它们进行分类,我在下面展示了一个示例。问题是我知道我想要的分类区域,例如从 (0,0.1) 到 (0.7,1),但我不知道什么函数可以实现这一点或如何解决它们。

x = rand(500,1);
y = rand(500,1);
g(:,1) = 1-x;
g(:,2)= 1 -y;
[~,la] = max(g'); % find the labels
figure, hold on 
plot(x(la==1),y(la==1),'k.','MarkerSize',8)
plot(x(la==2),y(la==2),'r.','MarkerSize',8)
grid on,xlabel('x_1'),ylabel('x_2') 

这是一个使用一些基本函数来创建下图的示例。目前我正在使用试错法,但我怎么能使用与上面相同的想法,但绘制我知道上面提到的端点的区域。

在此处输入图像描述

编辑:使用 am304 解决方案。我得到了正确的输出,但是像这样更复杂的情节似乎可以简化很多。

x = rand(500,1);
y = rand(500,1);
p = polyfit([0 0.7],[0.1 1],1);
p2 = polyfit([0.4 1],[1 0],1);
p3 = polyfit([0 1],[0.3 0.6],1);

figure
hold on
plot(x,y,'m.','MarkerSize',8)
plot(x(y>=polyval(p,x) & y<=polyval(p2,x) & y>=polyval(p3,x)),y(y>=polyval(p,x) & y<=polyval(p2,x) &   y>=polyval(p3,x)),'y.','MarkerSize',8)
plot(x(y>=polyval(p2,x) & y<=polyval(p,x) & y>=polyval(p3,x)),y(y>=polyval(p2,x) & y<=polyval(p,x) & y>=polyval(p3,x)),'r.','MarkerSize',8)
plot(x(y<=polyval(p3,x) & y<=polyval(p,x) & y<=polyval(p2,x)),y(y<=polyval(p3,x) & y<=polyval(p,x) & y<=polyval(p2,x)),'g.','MarkerSize',8)
plot([0 0.7],[0.1 1],'k-')
plot([0.4 1],[1 0],'k-')
plot([0 1],[0.3 0.6],'k-')
grid on,xlabel('x_1'),ylabel('x_2')
4

1 回答 1

1

如果我正确理解你的问题,你想要这样的东西:

>> p = polyfit([0 0.7],[0.1 1],1)
p =

      1.2857         0.1

>> figure
>> hold on
>> plot(x(y>=p(1)*x+p(2)),y(y>=p(1)*x+p(2)),'k.','MarkerSize',8)
>> plot(x(y<=p(1)*x+p(2)),y(y<=p(1)*x+p(2)),'r.','MarkerSize',8)
>> plot([0 0.7],[0.1 1],'g-')
>> grid on,xlabel('x_1'),ylabel('x_2')

这是我在 Octave 中得到的:

在此处输入图像描述

编辑以下评论中的讨论

除了以下使其在将来更具可读性和可调试性之外,您无需进行更多简化:

x = rand(500,1);
y = rand(500,1);
p = polyfit([0 0.7],[0.1 1],1);
p2 = polyfit([0.4 1],[1 0],1);
p3 = polyfit([0 1],[0.3 0.6],1);

figure
hold on
plot(x,y,'m.','MarkerSize',8)
idx1 = y>=polyval(p,x) & y<=polyval(p2,x) & y>=polyval(p3,x);
idx2 = y>=polyval(p2,x) & y<=polyval(p,x) & y>=polyval(p3,x);
idx3 = y<=polyval(p3,x) & y<=polyval(p,x) & y<=polyval(p2,x);
plot(x(idx1),y(idx1),'y.','MarkerSize',8)
plot(x(idx2),y(idx2),'r.','MarkerSize',8)
plot(x(idx3),y(idx3),'g.','MarkerSize',8)
plot([0 0.7],[0.1 1],'k-')
plot([0.4 1],[1 0],'k-')
plot([0 1],[0.3 0.6],'k-')
grid on,xlabel('x_1'),ylabel('x_2')

结果如下图:

在此处输入图像描述

于 2013-11-08T16:39:26.557 回答