效果如下:
主函数:main
%-------------------------------------------------------------------------%
%训练阶段
nums=4;%训练集
x_dim=3;%输入向量维度
Training_Set=[-1 1 1 1
-1 1 0 1
-1 0 1 1
-1 0 0 0];%第一列为常数项,第二列为分量一,第三列为分量二,第四列为目标值
w=rand(x_dim,1);%权值
Learning_Rate=0.03;%学习率
error=0.5;%允许误差
w=Training(nums,x_dim,Training_Set,w,Learning_Rate,error);
%-------------------------------------------------------------------------%
%作图阶段
x=-0.5:0.1:1.5;
y=w(1)./w(3)-w(2)./w(3).*x;
plot(Training_Set(:,2),Training_Set(:,3),"*");
hold on;
plot(x,y);
辅助函数:Training
function [Ret] = Training(nums,x_dim,Training_Set,w,Learning_Rate,error)
%接受参数:样本数量,向量维度,训练集,初始权重,学习率,允许误差
while(1)
Error_Sum=0;%误差和
for i=1:nums
Real_y=Training_Set(i,1+x_dim);%目标真实值
x=Training_Set(i,1:x_dim);%输入向量
Err=Real_y-(x*w>=0);%误差计算
w=w+Learning_Rate.*Err.*(x)';%权值调整
Error_Sum=Error_Sum+Err;%误差累积
end
if(Error_Sum<=error)%结束条件
break;
end
end
Ret=w;
end