《机器学习(周志华)》笔记--神经网络(2)--感知机与多层网络:感知机、知机算法步骤、感知机与逻辑操作、多层前馈神经网络

二、感知机与多层网络

1、感知机

  感知机由两层神经元组成,输入层接收外界的输入信号后传递给输出层,输出层是M-P神经元,亦称“阈值逻辑单元”。结构如下图

      

  感知机能容易地实现逻辑与、或、非操作。

  神经网络的基本单元为神经元,神经元接受来自其他神经元的信号,经过一个线性变换,与阈值比较,通过非线性变换即激活函数处理作为神经元的输出。感知机包括两层神经元。感知机是线性模型,能够实现线性分类任务。

数学推理过程:

      

  对样本进行规范化处理,即负类样本全部乘以(-1),则有:

        

  感知机算法通过对已知类别的训练样本集的学习,寻找一个满足上式的权向量。

当对样本进行规范化处理后,即负类样本全部乘以(-1),要使所有样本分类,争取wT与所有样本的乘积均大于0。感知机算法通过对已知类别的训练样本集的学习,寻找一个权值向量w,其转置与所有样本的乘积的结果均大于0.

 2、感知机算法步骤

  (1)将训练样本集{ x1,  …, xN}化为增广向量形式,并进行规范化处理。初始化权值向量ŵ(1),开始迭代。迭代次数k=1 。

  (2)用全部训练样本进行一轮迭代,计算ŵT(k)xi 的值,并修正权向量。分两种情况,更新权向量的值:

        

      统一写作:

          

 分析分类结果:只要有一个错误分类,回到(2),直至对所有样本正确分类。

  感知机算法是一种赏罚过程:

    分类正确时,对权向量“赏”——这里用“不罚”,即权向量不变;

    分类错误时,对权向量“罚”——对其修改,向正确的方向转换。

代码实现:

#感知机算法
import numpy as np
import matplotlib.pyplot as plt
X0 = np.array([[1,0],
              [0,1],
              [2,0],
              [2,2]])
X1 = np.array([[-1,-1],
              [-1,0],
              [-2,-1],
              [0,-2]])
plt.grid()
plt.scatter(X0[:,0],X0[:,1],c = 'r',marker='o',s=500)
plt.scatter(X1[:,0],X1[:,1],c = 'g',marker='*',s=500)
plt.show()

#将样本数据化为增广向量矩阵
ones = -np.ones((X0.shape[0],1))
X0 = np.hstack((ones,X0))
ones = -np.ones((X1.shape[0],1))
X1 = np.hstack((ones,X1))
#对样本进行规范化处理
X = np.vstack((-X0,X1))

plt.grid()
plt.scatter(X0[:,1],X0[:,2],c = 'r',marker='o',s=500)
plt.scatter(X1[:,1],X1[:,2],c = 'g',marker='*',s=500)
W = np.ones((X.shape[1],1))
p1=[-2.0,2.0]
p2=[(W[0]+2*W[1])/W[2],(W[0]-2*W[1])/W[2]]
plt.plot(p1,p2)
flag = True
while(flag):
    flag = False
    for i in range(len(X)):
        x = X[i,:].reshape(-1,1)    
        if np.dot(W.T,x)<=0:
            W = W + x
            p2=[(W[0]+2*W[1])/W[2],(W[0]-2*W[1])/W[2]]
            print(W)
            plt.plot(p1,p2)
            flag = True
plt.show()

举例演示:

已知两类训练样本:

  

  用感知器算法求出将样本分为两类的权向量解。

 解:

  所有样本写成增广向量形式,进行规范化处理,负类样本乘以(-1):

        

  任取w(1)=0,取c=1,迭代过程为:

  第一轮:

      

  有两个wT(k)xi ≤0的情况(错判),进行第二轮迭代。

  第二轮:

    

   第三轮:

    

   第四轮:

    

  该轮迭代的分类结果全部正确,故解向量:

  分类决策边界:

  当cŵ(1)取其他值时,结果可能不一样,所以感知器算法的解不是单值的。

  

猜你喜欢

转载自www.cnblogs.com/lsm-boke/p/12284782.html