机器学习 感知机算法_0(Matlab实现)

文章目录

  • 效果
  • 代码
    • Main
    • Perceptron
    • Sign

效果

代码

Main

x=[-1 7 13 9 14 14 11 -3 14 1 15 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_xif(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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部