机器学习:Python实现单层Rosenblatt感知器
如果对Rosenblatt感知器不了解,可以先查看下相关定义,然后对照下面的代码来理解。
代码中详细解释了各步骤的含义,有些涉及到了数学公式的解释。
这篇文章是以理解Rosenblatt感知器的原理为主,所以只实现了单层感知器,比较复杂的
多层的感知器会在后面写到。
下面是详细代码及说明:
'''
算法:Rosenblatt感知器=====>单层感知器
特性:提供快速的计算,能够实现逻辑计算中的NOT、OR、AND等简单计算
本质:在坐标轴轴里面存在一条直线(面)可以把数据分成两类
''' '''
变量约定:大写表示矩阵或数组,小写表示数字
X:表示数组或者矩阵
x:表示对应数组或矩阵的某个值
''' '''
关于学习效率(也叫步长:控制着第n次迭代中作用于权值向量的调节)(下面的参数a):
学习效率过大:收敛速度提高,稳定性降低,即出结果快,但是结果准确性较差
学习效率过小:稳定性提高,收敛速度降低,即出结果慢,准确性高,耗费资源
对于学习效率的确定,有专门的算法,这里不做研究。仅仅按照大多数情况下的选择:折中值
'''
import numpy as np
a=0.5 ##学习率 0<a<1
X=np.array([[1,1],[1,0],[0,0],[0,1]]) ##输入
D=np.array([1,1,0,1]) ##期望输出结果
W=np.array([0,0]) ##权重向量 ##硬限幅函数(即标准,这个比较简单:输入v大于0,返回1.小于等于0返回-1)
'''
最后的权重为W([1,1]),则:x+y=0 ==>y=-x
即:分类线方程为:y=-x()
'''
def sgn(v):
if v>0:
return 1
else:
return -1 ##激活函数(输出函数) '''
这里是两个向量相乘,对应的数学公式:
a(m,n)*b(p,q)=m*p+n*q
在下面的函数中,当循环中xn=1时(此时W=([1,1])):
np.dot(W.T,x)=(1,1)*(1,1)=1*1+1*1=2>0 ==>sgn 返回1
'''
def output(W,x):
return sgn(np.dot(W.T,x))##dot表示两个矩阵相乘 ##权重计算函数
'''
对应数学公式: w(n+1)=w(n)+a(d(n)-y(n))*x(n)
对应下列变量的解释:
w(n+1) <= neww 的返回值
w(n) <=oldw(旧的权重向量)
a <= a(学习率,范围:0<a<1)
d(n) <= d(期望输出值)
y(n) <= output的返回值(实际输出值)
x(n) <= x(输入值)
'''
def neww(oldW,d,x,a):
return oldW+a*(d-output(oldW,x))*x ##修正权值
'''
此循环的原理:
权值修正原理(单样本)==>神经网络每次读入一个样本,进行修正,
样本读取完毕,修正过程结束 '''
i=0
for xn in X:
W=neww(W,D[i],xn,a)
i+=1 print("最后的权值:",W.T) ##输出结果
print("开始验证结果...")
for xn in X:
print("D%s and W%s =>%d"%(xn,W.T,output(W,xn))) ##测试准确性:
'''
由上面的说明可知:分类线方程为y=-x,从坐标轴上可以看出:
(2,3)属于+1分类,(-2,-1)属于-1分类
'''
print("开始测试...")
test=np.array([2,3])
print("D%s and W%s =>%d"%(test,W.T,output(W,test)))
test=np.array([-2,-1])
print("D%s and W%s =>%d"%(test,W.T,output(W,test)))
输出结果:
>>>
最后的权值: [ 1. 1.]
开始验证结果...
D[1 1] and W[ 1. 1.] =>1
D[1 0] and W[ 1. 1.] =>1
D[0 0] and W[ 1. 1.] =>-1
D[0 1] and W[ 1. 1.] =>1
开始测试...
D[2 3] and W[ 1. 1.] =>1
D[-2 -1] and W[ 1. 1.] =>-1
>>>
机器学习:Python实现单层Rosenblatt感知器的更多相关文章
- 神经网络与机器学习第3版学习笔记-第1章 Rosenblatt感知器
神经网络与机器学习第3版学习笔记 -初学者的笔记,记录花时间思考的各种疑惑 本文主要阐述该书在数学推导上一笔带过的地方.参考学习,在流畅理解书本内容的同时,还能温顾学过的数学知识,达到事半功倍的效果. ...
- 神经网络与机器学习 笔记—Rosenblatt感知器收敛算法C++实现
Rosenblatt感知器收敛算法C++实现 算法概述 自己用C++实现了下,测试的例子和模式用的都是双月分类模型,关于双月分类相关看之前的那个笔记: https://blog.csdn.net/u0 ...
- Rosenblatt感知器
一.定义 Rosenblatt感知器建立在一个线性神经元之上,神经元模型的求和节点计算作用于突触输入的线性组合,同时结合外部作用的偏置,对若干个突触的输入项求和后进行调节. 二.基本计算过程 Rose ...
- Coursera机器学习基石 第2讲:感知器
第一讲中我们学习了一个机器学习系统的完整框架,包含以下3部分:训练集.假设集.学习算法 一个机器学习系统的工作原理是:学习算法根据训练集,从假设集合H中选择一个最好的假设g,使得g与目标函数f尽可能低 ...
- 神经网络与机器学习 笔记—多层感知器(MLP)
多层感知器(MLP) Rosenblatt感知器和LMS算法,都是单层的并且是单个神经元构造的神经网络,他们的局限性是只能解决线性可分问题,例如Rosenblatt感知器一直没办法处理简单异或问题.然 ...
- 机器学习:Python实现最小均方算法(lms)
lms算法跟Rosenblatt感知器相比,主要区别就是权值修正方法不一样.lms采用的是批量修正算法,Rosenblatt感知器使用的 是单样本修正算法.两种算法都是单层感知器,也只适用于线性可分的 ...
- python机器学习——感知器
最近在看机器学习相关的书籍,顺便把每天阅读的部分写出来和大家分享,共同学习探讨一起进步!作为机器学习的第一篇博客,我准备从感知器开始,之后会慢慢更新其他内容. 在实现感知器算法前,我们需要先了解一下神 ...
- 机器学习之感知器算法原理和Python实现
(1)感知器模型 感知器模型包含多个输入节点:X0-Xn,权重矩阵W0-Wn(其中X0和W0代表的偏置因子,一般X0=1,图中X0处应该是Xn)一个输出节点O,激活函数是sign函数. (2)感知器学 ...
- 机器学习 —— 基础整理(六)线性判别函数:感知器、松弛算法、Ho-Kashyap算法
这篇总结继续复习分类问题.本文简单整理了以下内容: (一)线性判别函数与广义线性判别函数 (二)感知器 (三)松弛算法 (四)Ho-Kashyap算法 闲话:本篇是本系列[机器学习基础整理]在time ...
随机推荐
- 《汇编语言程序设计》——仿windows计算器
<汇编语言程序设计> ——计算器程序设计 目录 一. 题目与目标 1. 题目 2. 学习目的 二. 分析与设计 1. 系统分析 2. ...
- barmanager工具栏及gridcontrol部分属性设置
1.工具栏部分属性设置,如:右键菜单,禁止移动等 2.gridControl属性设置,如选中行颜色,禁止移动隐藏等
- 【CNMP系列】CentOS7.0下安装FTP服务
一个小插曲,安装一个FTP服务,便于和远程服务器的文件沟通.后续我们会讲到如何使用Capistrano配合git完成服务器的代码部署以及发布流程.现在,代码先走FTP吧,挺稳. FTP简介 FTP 是 ...
- itextsharp c# asp.net 生成 pdf 文件
一切的开始必须要有2个dll, 可以通过nuget 包xiazai, 关键字是itextsharp. using iTextSharp.text; using iTextSharp.text.pdf; ...
- HP DL388 gen9服务器安装RHEL 6.5系统
测试: 1.默认UEFI模式,F10下智能安装,如果选择自己划分分区,进入该选项后会看到系统自动就帮我们创建了一个/efi 的500M分区,一开始我就是被这个分区坑了的,要知道服务每次重启都要等很久的 ...
- 最简单的 RabbitMQ 监控方法 - 每天5分钟玩转 OpenStack(158)
这是 OpenStack 实施经验分享系列的第 8 篇. 先来看张图:这是 Nova 的架构图,我们可以看到有两个组件处于架构的中心位置:数据库和Queue.数据库保存状态信息,而几乎所有的 nova ...
- 剑指offer编程题Java实现——面试题12打印1到最大的n位数
题目:打印1到最大的n位数 输入数字n,按顺序打印输出从1到最大的n位十进制数,比如输入3,打印从1到999. 这道题考察的地方是如何表示大数问题.由于n是任意大的数组,如果n太大的话n位数就超过了l ...
- bash之重定向
标准输入 stdin:代码为0,使用< 或 <& ...
- 读书笔记 effective c++ Item 30 理解内联的里里外外 (大师入场啦)
最近北京房价蹭蹭猛涨,买了房子的人心花怒放,没买的人心惊肉跳,咬牙切齿,楼主作为北漂无房一族,着实又亚历山大了一把,这些天晚上睡觉总是很难入睡,即使入睡,也是浮梦连篇,即使亚历山大,对C++的热情和追 ...
- Java I/O之NIO概念理解
JDK1.4的java.nio.*包引入了新的Java I/O新类库,其目的在于提高速度.实际上,旧的I/O包已经使用nio重新实现过,以便充分利用这种速度提高,因此即使我们不显式地用nio编码,也能 ...