分类不同点MATLAB

时间:2013-11-08 16:19:45

标签: matlab plot classification

我有一组随机的点,我想要绘制成不同的类(颜色)。 我知道如何根据不同的功能对它们进行分类,我在下面给出了一个例子。 问题是我知道我想要的分类区域,例如从(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') 

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

enter image description here

编辑: 使用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')

1 个答案:

答案 0 :(得分: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中得到的:

enter image description here

在评论讨论后编辑

除了以下内容之外,没有更多的简化,以使其在未来更具可读性和可调试性:

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')

这导致下图:

enter image description here