python机器学习之神经网络(一)
作者:Jeffrey_Cui 发布时间:2023-06-21 23:28:42
标签:python,机器学习,神经网络
python有专门的神经网络库,但为了加深印象,我自己在numpy库的基础上,自己编写了一个简单的神经网络程序,是基于Rosenblatt感知器的,这个感知器建立在一个线性神经元之上,神经元模型的求和节点计算作用于突触输入的线性组合,同时结合外部作用的偏置,对若干个突触的输入求和后进行调节。为了便于观察,这里的数据采用二维数据。
目标函数是训练结果的误差的平方和,由于目标函数是一个二次函数,只存在一个全局极小值,所以采用梯度下降法的策略寻找目标函数的最小值。
代码如下:
import numpy as np
import pylab as pl
b=1 #偏置
a=0.3 #学习率
x=np.array([[b,1,3],[b,2,3],[b,1,8],[b,2,15],[b,3,7],[b,4,29],[b,4,8],[b,4,20]]) #训练数据
d=np.array([1,1,-1,-1,1,-1,1,-1]) #训练数据类别
w=np.array([b,0,0]) #初始w
def sgn(v):
if v>=0:
return 1
else:
return -1
def comy(myw,myx):
return sgn(np.dot(myw.T,myx))
def neww(oldw,myd,myx,a):
return oldw+a*(myd-comy(oldw,myx))*myx
for ii in range(5): #迭代次数
i=0
for xn in x:
w=neww(w,d[i],xn,a)
i+=1
print w
myx=x[:,1] #绘制训练数据
myy=x[:,2]
pl.subplot(111)
x_max=np.max(myx)+15
x_min=np.min(myx)-5
y_max=np.max(myy)+50
y_min=np.min(myy)-5
pl.xlabel(u"x")
pl.xlim(x_min,x_max)
pl.ylabel(u"y")
pl.ylim(y_min,y_max)
for i in range(0,len(d)):
if d[i]==1:
pl.plot(myx[i],myy[i],'r*')
else:
pl.plot(myx[i],myy[i],'ro')
#绘制测试点
test=np.array([b,9,19])
if comy(w,test)>0:
pl.plot(test[1],test[2],'b*')
else:
pl.plot(test[1],test[2],'bo')
test=np.array([b,9,64])
if comy(w,test)>0:
pl.plot(test[1],test[2],'b*')
else:
pl.plot(test[1],test[2],'bo')
test=np.array([b,9,16])
if comy(w,test)>0:
pl.plot(test[1],test[2],'b*')
else:
pl.plot(test[1],test[2],'bo')
test=np.array([b,9,60])
if comy(w,test)>0:
pl.plot(test[1],test[2],'b*')
else:
pl.plot(test[1],test[2],'bo')
#绘制分类线
testx=np.array(range(0,20))
testy=testx*2+1.68
pl.plot(testx,testy,'g--')
pl.show()
for xn in x:
print "%d %d => %d" %(xn[1],xn[2],comy(w,xn))
图中红色是训练数据,蓝色是测试数据,圆点代表类别-1.星点代表类别1。由图可知,对于线性可分的数据集,Rosenblatt感知器的分类效果还是不错的。
来源:http://blog.csdn.net/cui134/article/details/25632981


猜你喜欢
- 日志是用来记录程序在运行过程中发生的状况,在程序开发过程中添加日志模块能够帮助我们了解程序运行过程中发生了哪些事件,这些事件也有轻重之分。根
- 每个被捕获的参数将被作为纯Python字符串来发送,而不管正则表达式中的格式。 举个例子,在这行URLConf中:(r'^artic
- 问题:1.一个销售系统,设有各级代理商,每个代理商的表是这样设计的 数据库结构表1: 代理商资料表[id]
- 什么是Scrapy?Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍。所谓的框架就是一个已经被集成了各
- 前言Python快捷创建文件夹和文件详解 自己做文件时发现 简单的反复操作十分浪费时间,于是想到了 使用Python,这个分享给
- 时间序列是指在一段时间内发生的任何可量化的度量或事件。尽管这听起来微不足道,但几乎任何东西都可以被认为是时间序列。一个月里你每小时的平均心率
- 目录1.按照一列数值进行排序1.1按照五缺失值的一列进行排序1.1.1升序排列1.1.2 降序排列1.2按照有缺失值的一列进行排序1.2.1
- 用到的一些知识点:Flask-SQLAlchemy、Flask-Login、Flask-WTF、PyMySQL这里通过一个完整的登录实例来介
- python里面的matplotlib.pylot是大家比较常用的,功能也还不错的一个包。基本框架比较简单,但是做一个功能完善且比较好看整洁
- 网上看到一些例子,对于一个简单的3 级联动,都加上什么Struts, Hibernate诸如此类的框架。这个Ajax联动殊不知和这些框架有什
- 什么是下载?首先客户端会问服务器,有没有一个xxx的文件啊?服务器开始寻找,找到后对客户端说有,然后客户端在本地新建一个文件,客户端从服务器
- 一、初始化CounterCounter支持3种形式的初始化,比如提供一个数组,一个字典,或单独键值对“=”式赋值。具体初始化的代码如下所示:
- 一、问题描述 筛选出多个txt文件中需要的数据二、数据准备这是我自己建立的要处理的文件,里面是随意写的一些数字和字母三、程序编写import
- 实时读取logstash日志,有异常错误keywork即触发报警。# /usr/bin/env python3# -*- coding: u
- 一、pip简介Pip 是安装python包的工具,提供了安装包,列出已经安装的包,升级包以及卸载包的功能。Pip 是对easy_instal
- 1.直方图# -*-coding:utf-8 -*-# @Time : 21:02# @Author: 黄荣津# @File :
- 1、什么是偏函数partialpython中提供一种对于函数固定属性的函数 2、偏函数的作用把一个函数的某些参数给固定住(也就是设
- SQL Server Sa用户相信大家都有一定的理解,下面就为您介绍SQL Server 2000身份验证模式的修改方法及SQL Serve
- 我们直接先给出输出与预期不同的代码In[28]: a = [1,2,3,4,5,6]In[29]: for i in a: ...: &nb
- 1、选择排序选择排序是一种简单直观的排序算法。它的原理是这样:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余