这是我第一次使用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;我可能遗漏了一些明显的东西......