⌛️本文状态:已完结✔️
¶一、基本思想
感知器(Perception)的特点是随意确定判别函数初始值,在对样本分类训练过程中逐步修正直至最终确定。
感知器可以解决线性可分
问题。
¶二、形式化定义
为了讨论方便,将样本向量增加一维,定义增广的样本向量为 y=[1,x_1,x_2,…,x_d]^T ;相应地,定义增广的权向量为 a=[w_0,w_1,w_2,…,w_d]^T ;
在此基础上,再定义对于第一类的样本,y=y , 对于第二类样本 y=-y ,称作规范化增广样本向量。
此时,对于所有正确分类的样本,都应该有 a^Ty>0
定义感知准则函数J_P(a):
$$ J_P(a)=sum_{yin Y^k}(-a^Ty) $$ 其中$Y^k$表示被错分的规范化增广样本集。确定向量$a$的问题变为对$J_P(a)$求极小值的问题。当$Y^k$为空集(即不存在错分样本时),$J_P(a)=0$达到极小值。
¶二、梯度下降法求解
对(迭代)向量沿某函数的负梯度方向修正。迭代式为:
其中,
¶三、实验
感知器的训练过程动画为:
关键代码为
代码语言:javascript复制a1 = [0;0;0];
ak=zeros(3,MAXNUM_train);
ak(:,1) = a1;
num_wrong = 0;
for die_dai=1:MAXNUM_train
num_p1 = ak(:,die_dai)'* p1; % p1、p2为规范化增广样本向量
num_p2 = ak(:,die_dai)'* p2;
num_wrong = length(num_p1(num_p1<=0)) length(num_p2(num_p2<=0));
fu_ti_du = sum(p1(:,num_p1<=0),2) sum(p2(:,num_p2<=0),2); % 最关键的一步
ak(:,die_dai 1) = ak(:,die_dai) rk * fu_ti_du;
if num_wrong==0
break;
end
end
完整代码已上传到Github