机器学习第5章第1节(下) : 针对两类函数训练神经网络
来源:互联网 发布:什么是主域名与子域名 编辑:程序博客网 时间:2024/06/05 17:03
机器学习第5章第1节(下) : 针对两类函数训练神经网络
思路
使用一系列二维数据对神经网络进行训练
代码
#!/usr/bin/env python# -*- coding: utf-8 -*-"""针对两类函数训练神经网络将一组(x,y)值划分为以下两类函数之一 第一类: y = 2x + 1 第二类: y = 7x + 1@author: Oscar"""import pylab as plimport numpy as np#学习速率a = 0.3#偏置b = 1#训练数据x =np.array ([ [1,1,3], #y = 2x + 1 [1,2,5], #y = 2x + 1 [1,1,8], #y = 7x + 1 [1,2,15],#y = 7x + 1 [1,3,7], #y = 2x + 1 [1,4,29] #y = 7x + 1 ])#期望输出d = np.array([ 1, #训练数据的第一类 1, #训练数据的第一类 -1, #训练数据的第二类 -1, #训练数据的第二类 1, #训练数据的第一类 -1 #训练数据的第二类 ])#权值weight = np.array([b,0,0])#验证用的数据test_data1 = np.array([b,9,19]) #第一类test_data2 = np.array([b,9,64]) #第二类"""感知器: +1 : 第一类 -1 : 第二类"""def sgn(v): if v >= 0: return +1 else: return -1"""计算感知器所需要的参数的值,然后把值传递给感知器,返回分类的值"""def comy(current_weight,current_x): return sgn(np.dot(current_weight.T,current_x))"""更新权值"""def update_weight(old_weight,current_d,current_x,a): return old_weight + a*(current_d - comy(old_weight,current_x))*current_x#开始训练print("开始训练,当前权值:",weight)i = 0for xn in x : weight = update_weight(weight,d[i],xn,a) i += 1 print("第",i,"轮训练,当前使用的数据:",xn," 当前权值:",weight)#训练完毕,查看数据分类情况print("----------------------------------------------------")for xn in x: print("x=",xn[1],", y=",xn[2],"=>",comy(weight,xn))print("----------------------------------------------------")#训练完毕,开始验证print("当前测试数据:",test_data1," ,分类结果:",comy(weight,test_data1))print("当前测试数据:",test_data2," ,分类结果:",comy(weight,test_data2))"""运行结果:开始训练,当前权值: [1 0 0]第 1 轮训练,当前使用的数据: [1 1 3] 当前权值: [ 1. 0. 0.]第 2 轮训练,当前使用的数据: [1 2 5] 当前权值: [ 1. 0. 0.]第 3 轮训练,当前使用的数据: [1 1 8] 当前权值: [ 0.4 -0.6 -4.8]第 4 轮训练,当前使用的数据: [ 1 2 15] 当前权值: [ 0.4 -0.6 -4.8]第 5 轮训练,当前使用的数据: [1 3 7] 当前权值: [ 1. 1.2 -0.6]第 6 轮训练,当前使用的数据: [ 1 4 29] 当前权值: [ 1. 1.2 -0.6]----------------------------------------------------x= 1 , y= 3 => 1x= 2 , y= 5 => 1x= 1 , y= 8 => -1x= 2 , y= 15 => -1x= 3 , y= 7 => 1x= 4 , y= 29 => -1----------------------------------------------------当前测试数据: [ 1 9 19] ,分类结果: 1当前测试数据: [ 1 9 64] ,分类结果: -1"""#------------------------根据训练结果绘制可视化图-----------------------------------##数据点的x轴和y轴坐标point_x = x[:,1] point_y = x[:,2]#准备绘制pl.subplot(111)#坐标轴的最大最小值x_max = np.max(point_x) + 15x_min = np.min(point_x) - 5y_max = np.max(point_y) + 50y_min = np.min(point_y) - 5#设置x轴的标签和最大最小值pl.xlabel(u"x")pl.xlim(x_min,x_max)#设置y轴的标签和最大最小值pl.ylabel(u"y")pl.ylim(y_min,y_max)#绘制训练数据for i in range(0,len(d)): if d[i] > 0: #绘制成红色星号 pl.plot(point_x[i],point_y[i],"r*") else: #绘制成红色圆点 pl.plot(point_x[i],point_y[i],"ro")#绘制测试点1if comy(weight,test_data1) > 0: #绘制成蓝色的小点 pl.plot(test_data1[1],test_data1[2],"b.")else: #绘制成蓝色的小叉 pl.plot(test_data1[1],test_data1[2],"bx")#绘制测试点2if comy(weight,test_data2) > 0: #绘制成蓝色的小点 pl.plot(test_data2[1],test_data2[2],"b.")else: #绘制成蓝色的小叉 pl.plot(test_data2[1],test_data2[2],"bx")#绘制测试点3test_data3 = [b,9,60]if comy(weight,test_data3) > 0: #绘制成蓝色的小点 pl.plot(test_data3[1],test_data3[2],"b.")else: #绘制成蓝色的小叉 pl.plot(test_data3[1],test_data3[2],"bx")#绘制分类线line_x = np.array(range(0,20))"""因为权值为[ 1. 1.2 -0.6]所以可以得出: 1.2x - 0.6y + 1 = 0整理一下: 1.2x + 1 = 0.6y可以得出神经网络的分类线的大致方程为: y = 2x + 1.68"""line_y = 2 * line_x + 1.68#绘制成绿色线条pl.plot(line_x,line_y,"g--")#显示图像pl.show()
运行结果
开始训练,当前权值: [1 0 0]第 1 轮训练,当前使用的数据: [1 1 3] 当前权值: [ 1. 0. 0.]第 2 轮训练,当前使用的数据: [1 2 5] 当前权值: [ 1. 0. 0.]第 3 轮训练,当前使用的数据: [1 1 8] 当前权值: [ 0.4 -0.6 -4.8]第 4 轮训练,当前使用的数据: [ 1 2 15] 当前权值: [ 0.4 -0.6 -4.8]第 5 轮训练,当前使用的数据: [1 3 7] 当前权值: [ 1. 1.2 -0.6]第 6 轮训练,当前使用的数据: [ 1 4 29] 当前权值: [ 1. 1.2 -0.6]----------------------------------------------------x= 1 , y= 3 => 1x= 2 , y= 5 => 1x= 1 , y= 8 => -1x= 2 , y= 15 => -1x= 3 , y= 7 => 1x= 4 , y= 29 => -1----------------------------------------------------当前测试数据: [ 1 9 19] ,分类结果: 1当前测试数据: [ 1 9 64] ,分类结果: -1
阅读全文
0 0
- 机器学习第5章第1节(下) : 针对两类函数训练神经网络
- 机器学习第5章第1节(上) : 使用神经网络学习逻辑或的运算
- 周志华《机器学习》第 5 章 神经网络
- 周志华《机器学习》笔记:第5章 神经网络
- 《机器学习》读书笔记 7 第5章 神经网络 一
- 《机器学习》读书笔记 7 第5章 神经网络 二
- 神经网络与深度学习笔记——第5章 深度神经网络为何很难训练
- 神经网络与机器学习(第3版)阅读笔记{第1章}
- Stanford机器学习---第四周.神经网络模型
- 机器学习训练营---第一周总结
- 机器学习第5章第2节 : LMS算法
- 神经网络与机器学习(第3版)阅读笔记{第0章}
- AndrewNg机器学习第四周作业:关于使用逻辑回归、神经网络训练数据并应用之的心得
- 第5章 神经网络
- 《机器学习》学习笔记 第1章
- 斯坦福机器学习第四周(神经网络及其应用)
- coursera-斯坦福-机器学习-吴恩达-第4周笔记-神经网络
- 机器学习-第四周作业——构建深度神经网络
- Python全局变量和局部变量
- Spring boot Hibernate SSerializationException: could not deserialize invalid stream header
- 用select实现TCP回射程序(服务器及客户端)
- SQL Server2008 学习之(十二) :XML存储与查询技术
- 搜索提示框实现
- 机器学习第5章第1节(下) : 针对两类函数训练神经网络
- 1004. 成绩排名 (20)
- nginx 实现 反向代理 负载均衡
- HDU 1713 相遇周期(求两个分数的最小公倍数)
- 计算球体积
- jvm类加载顺序
- Unity使用Cardboard、MojingSDK等VR插件的3DUI(UGUI)凝视效果的实现(V客学院知识分享)
- Android bitmap旋转、平移简单几何变换很方便
- git基础配置/SSH