感知器构建

来源:互联网 发布:赚钱最快的方法 知乎 编辑:程序博客网 时间:2024/06/11 00:15

感知器算法:

目的:
对于已知的数据点{x1, x2, …, xN}分为w1,w2两类,寻求该数据点之间的权向量wT

确定方程的一般形式一般形式:d(X) = w1x1+w2x2+…+ wnxn+wn+1 =W0TX+wn+1
其中W0=(w1, w2, …, wn)T称为权向量。
增广形式:d(X) = WTX wTW=(w1, w2, …, wn, wn+1)T ——增广权向量
X=(x1, x2, …, xn, 1)T ——增广模式
算法过程:
1. 给定一个增广的训练模式集合{x1, x2, …, xN},其中每个模式类别已知,分别属于w1类和w2类。
2. (1) 初始化:设置迭代步数k=1,令增量=某个正的常数;分别赋予初始增广权矢量W(1)的各分量较小的任意值。
 (2)输入训练模式xk,计算判别函数值WT(k)xk;
 (3)调整增广权矢量,规则是:
  如果xk∈1和WT(k)<=0,则W(k+1) = W(k) + ρxk.;
  如果xk∈1和WT(k)>=0,则W(k+1) = W(k) -ρxk.;
  若xk∈1和WT(k)xk>0,如果xk∈w2和WT(k)xk<0,则W(k+1) = W(k);
  如果k< N,令k=k+1,返回(2)。如果k=N,则检验判别函数是否能够都正确分类。若是,结束;否则,令k=1,返回(2)。
算法优化
如果训练模式已经符号规范化,即xk2已经乘以1(包括增广分量1)。
则调整权矢量的规则可以统一为
W(k+1)={ w(k)  (wT*xT>0)分类正确
     {w(k)+ρx  (wT*xT<=0)分类错误
  

在用全部模式训练完一轮后,如果仍有模式被错分,则需要进行第二轮、第三轮迭代,直到所有模式都能够正确分类为止;
可以证明:这个算法是收敛的。

代码构建:
https://github.com/233lawliet/Java/tree/master/Perseptron