python机器学习之神经网络(一)

作者:Jeffrey_Cui 时间:2023-06-21 23:28:42 

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))

python机器学习之神经网络(一)

图中红色是训练数据,蓝色是测试数据,圆点代表类别-1.星点代表类别1。由图可知,对于线性可分的数据集,Rosenblatt感知器的分类效果还是不错的。

来源:http://blog.csdn.net/cui134/article/details/25632981

标签:python,机器学习,神经网络
0
投稿

猜你喜欢

  • Python实战之自动发送邮件的实现

    2023-10-18 15:09:43
  • PHP 用数组降低程序的时间复杂度

    2023-10-08 11:38:03
  • Go语言基础if条件语句用法及示例详解

    2024-04-23 09:35:16
  • 产品设计与用户体验

    2009-02-02 10:15:00
  • Php+SqlServer实现分页显示

    2023-11-20 05:02:24
  • python发布模块的步骤分享

    2023-08-07 11:29:25
  • python打印文件的前几行或最后几行教程

    2022-04-30 01:14:09
  • Python中requests库的学习方法详解

    2022-10-13 07:32:36
  • php打包网站并在线压缩为zip

    2024-05-11 09:47:34
  • 什么是DOM(Document Object Model)文档对象模型

    2024-05-13 09:37:04
  • SQL Server误设置max server memory的处理方法

    2024-01-21 14:01:22
  • 也说说语义

    2009-12-29 13:04:00
  • 如何编写Go语言中间件的实例教程

    2024-04-25 15:29:05
  • Python的iOS自动化打包实例代码

    2022-04-18 01:15:19
  • Asp.net中使用Sqlite数据库的方法

    2024-01-18 03:14:45
  • python爬虫用request库处理cookie的实例讲解

    2023-07-26 03:57:53
  • Tkinter组件实现Radiobutton的示例

    2022-08-01 00:23:24
  • MYSQL事件查看器使用介绍

    2024-01-15 07:33:04
  • 举例讲解如何在Python编程中进行迭代和遍历

    2023-07-12 04:42:30
  • SQL Server 连接到服务器 错误233的解决办法

    2024-01-24 06:58:34
  • asp之家 网络编程 m.aspxhome.com