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

效果

代码

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值