效果
代码
Main
x=[-1 7 1
3 9 1
4 14 1
1 -3 1
4 1 1
5 3 1];
y=[1 1 1 -1 -1 -1]';%
size_x=size(x);
b=ones(1,size_x(2));%初始权值
Error=0;%允许分类错误数量最大值
error=size_x(1);%当前一轮迭代分类错误数量
Step=0.1;%迭代步长
while(error>Error)
[b, error]=Perceptron(b, x, y, size_x(1), Error, Step);
end
%作图
plot(x(1:3,1),x(1:3,2),'*');
hold on;
plot(x(4:6,1),x(4:6,2),'+');
X=-10:0.5:10;
Y=(b(1,1).*X+b(1,3))/(-b(1,2));
plot(X,Y);
Perceptron
function [b, error]=Perceptron(b, x, y, nums_x, Error, Step)
%b:感知器当前权值
%x:自变量矩阵
%nums_x:x的规模
%y:目标值矩阵
%当y=1, Func(b, x)>=0为分类正确
%当y=-1, Func(b, x)<0为分类正确
%分类正确时, 于是y*Func(b, x)>=0恒成立
%Sum_y*Func(b, x)越大, 分类误差越小
%于是可定义损失函数:-y*Func(b, x), 并求其最小值
%分类错误数量
error=0;
for i=1:nums_x
if(y(i,1)*Sign(b, x(i,:))<0)
error=error+1;
b=b+Step*(x(i,:).* y(i,1));
end
end
end
Sign
function [y] = Sign(b,x)
%接收前向神经元的信号x
%信号A转换为信号y
%向后向神经元发送信号y
%y=bn*xn+b(n-1)*x(n-1)+b(n-2)*x(n-2)+...+b1*x1+b0*1
%b=[bn, b(n-1),...,b1, b0]
%x=[xn, x(n-1),...,x1, 1]
%计算
y=2*(sum(b.*x)>=0)-1;
end