当前位置:   article > 正文

机器学习-感知器学习算法_输入权重的调整是感知器的关键问题,感知器使用id3策略进行学习

输入权重的调整是感知器的关键问题,感知器使用id3策略进行学习

由于文章编辑问题,图片和公式都无法展示,需要原文章和源代码的,请下载
链接: http://pan.baidu.com/s/1dE8yK1N 密码: 2c9n

机器学习-感知器学习算法

                                                                                                                        Python语言实现

                                                                                   初学者整理,参考资料均来源于网上

一、           概述

感知器是由美国计算机科学家罗森布拉特(Rosenblatt)于1957年提出的。感知器可谓是最早的人工神经网络。

     感知器分单层感知器和多层感知器。

二、           单层感知器(Single Layer Perceptron

l 简介

单层感知器是一个具有一层神经元、采用阈值激活函数的前向网络。通过对网络权值的训练,可以使感知器对一组输人矢量的响应达到元素为01的目标输出,从而实现对输人矢量分类的目的。

单层感知器是一个简单的线性二分类器,它保存着输入权重,根据输入和内置的函数计算输出.人工神经网络中的单个神经元。

单层感知器可以计算逻辑或,逻辑与,逻辑非等运算,但是不能计算异或。因为异或不是平面线性可分的,在多层感知器中解决。

l 模型

单层感知器只有输入和输出,输入和输出直接相连,多个输入一个输出。

模型为每个输入定义为X,输入到输出的权重定义为w,所有的输入和权重的乘积和为输出的值,对于这个乘积和做如下处理,如果乘机和大于临界值(一般是0),输入端就取1;如果小于临界值,就取-1

l 工作原理

单层感知器可将外部输入分为两类。当感知器的输出为+1时,输入属于L1,当感知器输出-1时,输入属于L2类,从而实现两类目标的识别。在二维空间,单层感知器进行模式识别的判决超平面由下式决定:

对于只有两个输入的判别边界是直线(),选择合适的学习算法可训练出满意的w1w2。将样本中两类数据用直线分开。如下图:

b的值决定了直线的偏移量,w决定了直线的旋转度数。

l 学习算法

第一步、设置变量和参数

f(x)为激活函数,y(n)为实际输出,d(n)为期望输出,λ为学习速率,n为迭代次数,e为实际输出与期望输出的误差。

第二步、初始化

给权值向量w的各个分量赋一个较小的随机非零值,置n=1

第三步、输入一组样本X(n)=[1,x1(n),x2(n),…,xm(n)],并给出它的期望输出d(n)

第四步、计算出实际输出:y(n)=f()

第五步、求出期望输出和实际输出的差 e=d(n)-y(n)。根据误差判断输出是否满足条件,一般为对所有样本误差为零或者均小于预设的值,则算法结束,否则将值增加1,并用下式调整权值:

w(n+1)=w(n)+λ[d(n)-y(n)]x(n)

权值调整公式属于随机梯度下降算法。(待确认)

然后转到第三步,进行下一轮计算过程。

l 代码(Python)

感知器源码(Perceptron.py)

#单层感知器机器学习算法 20170621 gyk

 

#多层感知器使用梯度下降算法进行训练

#单层感知器只能解决线性可分问题

 

#importlogging

#importos

 

#预测函数,训练使用使用公式“输入×权重的和”为结果。使用阶跃函数sigmoid把结果转换为10

#由于默认第一个输入为1,第一个权重为b,所以在公式转换为:w1*x1+w2*x2+b=0

#结果等于0为线性分割线的线上。小于0为线下,大于0为线上。用该线把结果分成两种。

#由于在预测的时候,输入参数比训练参数少一个结果列,所以不能用输入参数数组计算特征列,而是用权重数组减去第一个bias偏移量列来计算特征数。

defpredict(inputs, weights):

   activation = weights[0]

   for i in range(len(weights)-1):

       activation += weights[i+1]*inputs[i]

   return sigmoid(activation)

 

#阶跃函数,把值转换成1/0或者1/-1

defsigmoid(value):

   return 1.0 if value >= 0.0 else 0.0

 

#训练

#初始化权重为0.5,然后循环训练集,读取每一条训练集数据,进行预测,然后把预测结果和实际结果进行对比,如果一样就用下一条训练。如果和实际结果不相等。就使用随机梯度下降算法重新计算权重。

#然后重新训练,直到所有训练数据的预测结果和实际结果一直,则训练结束。

#训练的结果其实就是在平面上找一条直线,该直线能把两类的数据点分割在直线的两边。如果有的点是错误的,就变化w1w2来旋转直线,变化w0来移动直线找到最佳位置。训练速率太大会找不到最佳位置,

#训练速率太小,训练速度就太慢。期望值和实际值的差值的正负决定了旋转和移动的方向。

#l_rate为学习速率,一般在00.1

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/286872
推荐阅读
相关标签
  

闽ICP备14008679号