2013-11-08 3 views
1

У меня есть случайный набор точек, которые я хочу использовать в разных классах (цветах). Я знаю, как я могу классифицировать их в соответствии с различными функциями, и я привел пример ниже. Проблема в том, что я знаю регионы классификации, которые я хочу, от (0,0,1) до (0,7,1), например, но я не знаю, какие функции достигнут этого или как их выработать.Классификация различных точек MATLAB

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

EDIT: Использование 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') 
+0

Ваше решение выглядит отлично с первого взгляда. О какой проб и ошибках вы говорите? –

+0

Расчеты приведены для разных цветных участков: g (:, 1) = 1-x; g (:, 2) = 1 -y; Пробная и ошибка заключается в том, чтобы получить сюжет, который я хочу (я знаю, в каких точках я хочу, чтобы мои линии проходили) я не знаю, что я должен заменить 1-x и 1-y с –

+0

@ Томус, у вас есть посмотрите на мой ответ? Разве это не делает то, что вы хотите? – am304

ответ

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

Это то, что я получаю в октаву:

enter image description here

EDIT после обсуждения в комментариях:

Там не намного больше упрощая лет делать, кроме следующих действий, чтобы сделать его более удобным для чтения и отладке в будущем:

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

+0

PS: вы можете заменить 'y> = p (1) * x + p (2)' на 'y> = polyval (p, x)', и то же самое для другого неравенства. – am304

+0

Извините, я думал, что ответил. Пожалуйста, ознакомьтесь с обновленным первым сообщением, поскольку я не мог вместить его в комментарии. –

Смежные вопросы