习题5.5: 试编程实现标准BP算法和累积BP算法,在西瓜数据集3.0上分别用这两个算法训练一个单隐层网络,并进行比较

算法的主要思想来自周志华《机器学习》上讲BP算法的部分,实现了书上介绍的标准BP算法和累积BP算法,对于西瓜数据集3.0,已经把文字部分的取值变为离散的数字了

如果要求解亦或问题,把下面的代码注释取消即可

x = np.mat( '1,1,2,2;\1,2,1,2\').T
x = np.array(x)
y=np.mat('0,1,1,0')
y = np.array(y).T

之前写过一版(戳这里查看初级版),全是通过for循环自己慢慢修改参数,这一版借助numpy矩阵运算的操作,使得代码量大大简化,并且运行的时间也比之前的版本快不少。

#!/usr/bin/python
#-*- coding:utf-8 -*-
############################
#File Name: bp-watermelon3.py
#Author: No One
#E-mail: 1130395634@qq.com
#Created Time: 2017-02-23 13:30:35
############################import numpy as np
import math
from sys import argvx = np.mat( '2,3,3,2,1,2,3,3,3,2,1,1,2,1,3,1,2;\1,1,1,1,1,2,2,2,2,3,3,1,2,2,2,1,1;\2,3,2,3,2,2,2,2,3,1,1,2,2,3,2,2,3;\3,3,3,3,3,3,2,3,2,3,1,1,2,2,3,1,2;\1,1,1,1,1,2,2,2,2,3,3,3,1,1,2,3,2;\1,1,1,1,1,2,2,1,1,2,1,2,1,1,2,1,1;\0.697,0.774,0.634,0.668,0.556,0.403,0.481,0.437,0.666,0.243,0.245,0.343,0.639,0.657,0.360,0.593,0.719;\0.460,0.376,0.264,0.318,0.215,0.237,0.149,0.211,0.091,0.267,0.057,0.099,0.161,0.198,0.370,0.042,0.103\').T
x = np.array(x)
y = np.mat('1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0')
y = np.array(y).T
'''
x = np.mat( '1,1,2,2;\1,2,1,2\').T
x = np.array(x)
y=np.mat('0,1,1,0')
y = np.array(y).T
'''
xrow, xcol = x.shape
yrow, ycol = y.shapenp.random.seed(0)print 'x: \n', x
print 'y: \n', ydef sigmoid(x):return 1.0 / (1.0 + np.exp(-x))def printParam(v, w, t0, t1):print 'v:', vprint 'w: ', wprint 't0: ', t0print 't1: ', t1def bpa(x, y, n_hidden_layer, r, error, n_max_train):printprint 'all bp algorithm'print '------------------------------------'print 'init param'[xrow, xcol] = x.shape[yrow, ycol] = y.shapev = np.random.random((xcol, n_hidden_layer))w = np.random.random((n_hidden_layer, ycol))t0 = np.random.random((1, n_hidden_layer))t1 = np.random.random((1, ycol))print '---------- train begins ----------'n_train = 0yo = 0loss = 0while 1:b = sigmoid(x.dot(v) - t0)yo = sigmoid(b.dot(w) - t1)loss = sum((yo - y)**2) / xrowif loss < error or n_train > n_max_train:breakn_train += 1# update paramg = yo * (1 - yo) * (y - yo)w += r * b.T.dot(g)t1 -= r * g.sum(axis = 0)        e = b * (1 - b) * g * w.Tv += r * x.T.dot(e)t0 -= r * e.sum(axis = 0)if n_train % 10000 == 0:print 'train count: ', n_trainprint np.hstack((y, yo))printprint '---------- train ends ----------'print 'train count = ', n_trainyo = yo.tolist()print '---------- learned param: ----------'printParam(v, w, t0, t1)print '---------- result: ----------'print np.hstack((y, yo))print 'loss: ', loss def bps(x, y, n_hidden_layer, r, error, n_max_train):printprint 'standard bp algorithm'print '------------------------------------'print 'init param'[xrow, xcol] = x.shape[yrow, ycol] = y.shapev = np.random.random((xcol, n_hidden_layer))w = np.random.random((n_hidden_layer, ycol))t0 = np.random.random((1, n_hidden_layer))t1 = np.random.random((1, ycol))print '---------- train begins ----------'n_train = 0tag = 0yo = 0loss = 0while 1:for k in range(len(x)):b = sigmoid(x.dot(v) - t0)yo = sigmoid(b.dot(w) - t1)loss = sum((yo - y)**2) / xrowif loss < error or n_train > n_max_train:tag = 1breakb = b[k]b = b.reshape(1,b.size)n_train += 1g = yo[k] * (1 - yo[k]) * (y[k] - yo[k])g = g.reshape(1,g.size)w += r * b.T.dot(g)t1 -= r * ge = b * (1 - b) * g * w.Tv += r * x[k].reshape(1, x[k].size).T.dot(e)t0 -= r * eif n_train % 10000 == 0:print 'train count: ', n_trainprint np.hstack((y, yo))if tag:breakprintprint '---------- train ends ----------'print 'train count = ', n_trainyo = yo.tolist()print '---------- learned param: ----------'printParam(v, w, t0, t1)print '---------- result: ----------'print np.hstack((y, yo))print 'loss: ', loss r = 0.1
error = 0.001
n_max_train = 1000000
n_hidden_layer = 5n = int(argv[1])
if n == 1:bpa(x, y, n_hidden_layer, r, error, n_max_train)
elif n == 2:bps(x, y, n_hidden_layer, r, error, n_max_train)
else:print '命令行参数错误'

命令行输入: python test.py 1 # 1表示运行累积bp算法,2表示标准bp算法

结果如下

---------- train ends ----------
train count =  10472
---------- learned param: ----------
v: [[ 0.73242941  3.65170127  0.59713105  0.53589607  4.26680198][-0.47920127  0.38050143  0.88684761  0.96043754 -5.04922845][-3.53478658 -2.43632002  0.5617708   0.91791984 -3.99160595][ 2.72776748 -3.03747142  0.82596831  0.7629904   3.58719733][-0.49817982  0.11022257  0.45451013  0.77793538 -2.06655661][ 1.31898792  2.91731759  0.94006976  0.51654301  4.99262637][-2.87599092 -1.20602034  0.4544875   0.56614856 -2.14762434][ 3.31012315  2.37538414  0.61649596  0.94252131  0.76600351]]
w:  [[ -7.57093041][ -4.87555553][ -0.60132992][ -1.24255911][ 11.75120165]]
t0:  [[ 2.86694039  1.63790548  0.13229702  0.31939894  1.83144759]]
t1:  [[ 1.86987471]]
---------- result: ----------
[[  1.00000000e+00   9.93190538e-01][  1.00000000e+00   9.99558269e-01][  1.00000000e+00   9.73273387e-01][  1.00000000e+00   9.98817906e-01][  1.00000000e+00   9.95520603e-01][  1.00000000e+00   9.58776391e-01][  1.00000000e+00   9.26738291e-01][  1.00000000e+00   9.78479082e-01][  0.00000000e+00   5.84289232e-03][  0.00000000e+00   6.31392712e-03][  0.00000000e+00   8.31158755e-04][  0.00000000e+00   1.51786116e-03][  0.00000000e+00   2.72394938e-02][  0.00000000e+00   2.37542259e-02][  0.00000000e+00   7.79277689e-02][  0.00000000e+00   1.85295127e-02][  0.00000000e+00   2.97535714e-02]]
loss:  [ 0.00099981]

Python 实现 周志华 《机器学习》 BP算法(高级版)相关推荐

  1. 周志华机器学习——聚类算法。

    聚类算法 聚类算法是一种经典的无监督学习方法,无监督学习的目标是通过对无标记训练样本的学习,发掘和揭示数据集本身的潜在结构与j规律,即不依赖于训练数据集的类标记信息.聚类则试图将数据集的样本划分为若干 ...

  2. 周志华机器学习(西瓜书)学习笔记(持续更新)

    <周志华机器学习>笔记 第1章 绪论 1.1 引言 1.2 基本术语 1.3 假设空间 1.4 归纳偏好 1.5 发展历程 1.6 应用现状 第2章 模型评估与选择 2.1 经验误差与过拟 ...

  3. 【读书笔记】周志华 机器学习 第二章 模型评估和选择

    第二章 模型评估和选择 1 欠拟合和过拟合 偏差和方差 1.1 欠拟合和过拟合 1.2 偏差和方差 2 评估方法 性能度量 2.1 评估方法 2.1.1 留出法 2.2.2 交叉验证法 2.2.3 自 ...

  4. 周志华机器学习--模型评估与选择

    周志华机器学习–模型评估与选择 第一章 绪论 第二章 模型评估与选择 第三章 线性模型 第四章 决策树 第五章 支持向量机 第六章 神经网络 第七章 贝叶斯分类器 第八章 集成学习和聚类 文章目录 周 ...

  5. 周志华机器学习-决策树

    周志华机器学习-决策树 第一章 绪论 第二章 模型评估与选择 第三章 线性模型 第四章 决策树 第五章 支持向量机 第六章 神经网络 第七章 贝叶斯分类器 第八章 集成学习和聚类 文章目录 周志华机器 ...

  6. 周志华机器学习-支持向量机

    周志华机器学习-支持向量机 第一章 绪论 第二章 模型评估与选择 第三章 线性模型 第四章 决策树 第五章 支持向量机 第六章 神经网络 第七章 贝叶斯分类器 第八章 集成学习和聚类 – 文章目录 周 ...

  7. 周志华-机器学习西瓜书-第三章习题3.3 编程实现对率回归

    本文为周志华机器学习西瓜书第三章课后习题3.3答案,编程实现对率回归,数据集为书本第89页的数据 使用tensorflow实现过程 # coding=utf-8 import tensorflow a ...

  8. 周志华机器学习(6):支持向量机

    周志华机器学习(6):支持向量机 6 支持向量机 6.1 间隔与支持向量 6.2 对偶问题(dual problem) 6.3 核函数 6.4 软间隔与正则化 基本是大段摘录西瓜书加上一些自己的解释补 ...

  9. 周志华机器学习--绪论

    周志华机器学习–绪论 第一章 绪论 第二章 模型评估与选择 第三章 线性模型 第四章 决策树 第五章 支持向量机 第六章 神经网络 第七章 贝叶斯分类器 第八章 集成学习和聚类 文章目录 周志华机器学 ...

  10. Python 实现 周志华 《机器学习》 BP算法

    习题5.5: 试编程实现标准BP算法和累积BP算法,在西瓜数据集3.0上分别用这两个算法训练一个单隐层网络,并进行比较 算法的主要思想来自周志华<机器学习>上讲BP算法的部分,实现了书上介 ...

最新文章

  1. python whl大全
  2. 排序算法之——优先队列经典实现(基于二叉堆)
  3. 从阿里云七代云服务器,谈云计算四大趋势
  4. 鹦鹉助手模拟器 梦幻西游 找不到服务器,模拟器玩梦幻 17173鹦鹉助手模拟器上线...
  5. linux nginx jsp,将nginx注册成linux的服务(service)
  6. 关于GCC的理解——On the understanding of the GCC
  7. 闽什么什么院第二课堂网课破解-----微信内置浏览器
  8. JQ 吸顶导航-Demo
  9. 机器学习——概率论基础
  10. 以阿里云服务器为例理解docker端口映射
  11. 蜂鸣器干扰通讯_蜂鸣器工作原理是什么,为什么需要接振荡的信号才能工作?...
  12. AES加解密流程及方法
  13. php 301目录对应,PHP 301转向实现代码
  14. 显示行数 设置ssh终端_SSH终端命令工具:zoc7 for Mac
  15. 2018ec final赛后总结
  16. (十八)用JAVA编写MP3解码器——迷你播放器
  17. Java之JDK环境的安装与配置
  18. 【视觉的盛宴】-圣托里尼、爱琴海
  19. MTK机型手机指令介绍
  20. CMD批量转换GIF图片为PNG图片

热门文章

  1. python爬虫抓取双色球_Python爬虫练习:爬取双色球每期的中奖号码,看能不能中奖...
  2. 网站优化怎么挖掘长尾关键词?
  3. android蓝牙底层通道,底层之旅——Android蓝牙系统分析
  4. stm32最小系统USB转TTL接线
  5. SQLServer2008密钥 key
  6. IDC:英国脱欧对本国IT支出带来3大潜在影响
  7. 你好 Ethereum Rio, 欢迎来到区块链操作系统的世界
  8. 米洛个人修炼术:如何倍增你的功力修行速度达成健康体魄
  9. NAXX Demo2_WYQ_03
  10. 西安python招聘信息_中软国际(陕西西安)2017招聘启事