Percopetron的Matlab实现 - 似乎无法修复绘图

时间:2017-08-21 11:47:32

标签: matlab machine-learning

这是我第一次使用ML(和Matlab),我跟随"从数据中学习"作者:Yaser S. Abu-Mostafa。

我试图实现Perceptron算法,在尝试通过伪代码后,使用其他人的解决方案我似乎无法解决我的问题(我也经历了其他线程)

算法将数据分开,它有效。但是,我想绘制一条线,但似乎它以某种方式将它们分开,以便' -1'群集被划分为第二个群集或更多群集。

这是代码:

iterations = 100;
dim = 3;

X1=[rand(1,dim);rand(1,dim);ones(1,dim)];   % class '+1'
X2=[rand(1,dim);1+rand(1,dim);ones(1,dim)]; % class '-1'
X=[X1,X2];
Y=[-ones(1,dim),ones(1,dim)];
w=[0,0,0]';
% call perceptron
wtag=weight(X,Y,w,iterations);
% predict
ytag=wtag'*X;


% plot prediction over origianl data

figure;hold on

plot(X1(1,:),X1(2,:),'b.')
plot(X2(1,:),X2(2,:),'r.')
plot(X(1,ytag<0),X(2,ytag<0),'bo')
plot(X(1,ytag>0),X(2,ytag>0),'ro')
legend('class -1','class +1','pred -1','pred +1')


%Why don't I get just one line?
plot(X,Y);

重量函数(Perceptron):

function [w] = weight(X,Y,w_init,iterations)
%WEIGHT Summary of this function goes here
%   Detailed explanation goes here

w = w_init;
for iteration = 1 : iterations  %<- was 100!
  for ii = 1 : size(X,2)         %cycle through training set
    if sign(w'*X(:,ii)) ~= Y(ii) %wrong decision?
      w = w + X(:,ii) * Y(ii);   %then add (or subtract) this point to w
    end
  end
  sum(sign(w'*X)~=Y)/size(X,2);   %show misclassification rate
end

我不认为问题出现在第二个功能中,但我添加了

我非常确定算法会将其分离到多个群集,但我无法说明为什么到目前为止我所做的大部分学习都是数学和理论,而不是实际编码所以我和#39;我可能遗漏了一些明显的东西......

0 个答案:

没有答案