matlab感知机实现异或,感知机的matlab实现

感知机是二类分类的线性分类模型,其输入为实实例的特征向量,输出是实例的类别,两类分别取+1和-1。

输入空间到输出空间的函数为:f(x) = sign(w*x+b)

其中w,b感知机模型参数,w是权值(权向量),b是偏置,w*x是w和x的内积。sign是函数符号,输入为正时输出+1,输入为负时,输出为-1.

感知机是一种线性分类模型,属于判别模型。感知机模型的假设空间是定义在特征空间中的所有线性分类模型或线性分类器。

感知机的分类面: w*x+b = 0      是对应于特征空间的一个超平面S,其中W是超平面法向量,b是超平面截距,这个超平面将特征空间化为两半,每一边代表一类。

在训练感知机的时候首先初始化w,b,然后使用误分点来驱动超平面的更新

当一个x(i)被误分时,通过 w = w+L*y(i)*x(i) , b = b+L*y(i) 来更新w,b.   其中L是学习的步长(0

这里在matlab中产生两类(X和Y,各60个点)高斯分布的点,通过感知机算法来寻找一个分类面。

load gaoData2;

x1 = x; %第一类点

x2 = y; %第一类点

plot(x1(1,:),x1(2,:),'ro',x2(1,:),x2(2,:),'b*');hold on

y1 = ones(1,60);

y2 = -ones(1,60);

x = [x1 x2];    %实例输入点

y = [y1 y2];    %对应的输出

w = [0 0];        %初始化

b = 0;

itary = 0.05;      %步长

cont = 0;

cont1 = 0;

cont2 = 0;

tic;     %给出程序在tic,toc之间程序运行时间

for j = 1:50000   %设定循环次数,避免数据不是线性可分时陷入死循环

for i = 1:size(x,2)

panbie = y(i)*(w*x(:,i)+b);

if sign(panbie)>=1

cont = cont+1;

else w = w+itary*y(i)*x(:,i)';

b = b+itary*y(i);

cont1 = cont1+1;

end

end

if cont>=size(x,2)       %全部分类正确则跳出循环

break;

end

cont = 0;

cont2 = cont2+1;

end

u1 = min(x(1,:)):max(x(1,:));

u2 = -((w(1)/w(2))*u1+b/w(2));

w              %最终的权值向量

b

cont1

cont2

time1 = toc

plot(u1,u2,'g');hold off

程序运行结果:

0818b9ca8b590ca3270a3433284dd417.png



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值