data=load('data.txt'); x=[data(:,1),data(:,2)]; y=data(:,3); k=length(y); %绘制散点图 for j=1:k if y(j)==1 plot(x(j,1),x(j,2),'o'); hold on end if y(j)==-1 plot(x(j,1),x(j,2),'x'); hold on end end %初始化参数 w=[0,0]; b=0; r=0.5; %学习速度 con=0; t=0; %记录迭代次数 br=[]; %记录b的变化 wr=[]; %记录w的变化 while con==0 for i=1:k if (y(i)*(dot(w,x(i,:))+b))<=0 %判断是否分类错误 w(1)=w(1)+r*y(i)*x(i,1); w(2)=w(2)+r*y(i)*x(i,2); b=b+r*y(i); w=[w(1),w(2)]; wr=[wr,w]; br=[br,b]; t=t+1; end end for i=1:k con1(i)=(y(i)*(dot(w,x(i,:))+b)); end con=(all(con1(:)>0)); end xt=0:0.1:10; yt=(-w(1)*xt-b)/w(2); plot(xt,yt);
数据:
1.2435 4.1728 -1.0000
1.3435 6.6935 -1.0000
1.4435 5.6401 -1.0000
1.5435 3.7946 -1.0000
1.6435 4.2596 -1.0000
1.7435 6.2168 -1.0000
1.8435 5.1952 -1.0000
1.9435 4.7744 -1.0000
2.0435 3.6288 -1.0000
2.1435 5.6932 -1.0000
2.2435 6.1607 -1.0000
8.2858 5.0430 1.0000
8.3858 6.1396 1.0000
8.4858 4.8663 1.0000
8.5858 3.1537 1.0000
8.6858 5.7617 1.0000
8.7858 4.8398 1.0000
8.8858 6.4166 1.0000
8.9858 5.7650 1.0000
9.0858 4.0198 1.0000
9.1858 5.3157 1.0000
9.2858 4.8547 1.0000
运行结果: