机器学习——BP神经网络算法应用(下)
1、BP神经网络算法应用——简单非线性数据集测试(异或:XOR)
将BP神经网络算法应用(上)写好的NeuralNetwork.py文件与要测试的文件XOC_test.py文件放到同一目录下,并在XOC_test.py文件里面包含NeuralNetwork模块
代码如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu
from NeuralNetwork import NeuralNetwork
import numpy as np
#实例化一个神经网络
nn = NeuralNetwork([2,2,1],'tanh')
X = np.array([[0,0],[0,1],[1,0],[1,1]])
y = np.array([0,1,1,0])
nn.fit(X,y)
for i in [[0,0],[0,1],[1,0],[1,1]]:
print(i,nn.predict(i))运行结果:每个点以及对应的权重
[0, 0] [ 0.00373644]
[0, 1] [ 0.99822259]
[1, 0] [ 0.99815927]
[1, 1] [-0.02115078]2、BP神经网络算法应用——手写数字识别
每个图片大小为:8*8,识别数字:0,1,2,3,4,5,6,7,8,9
sk-learn数据包里面有该数据集模块,通过代码查看该数据集的相关信息
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu
from sklearn.datasets import load_digits #加载数字图片数据集
digits = load_digits()
print(digits.data.shape) #打印该数据集的维度
import pylab as pl
pl.gray() #灰度化
pl.matshow(digits.images[0]) #打印出第一张图片
pl.show()运行结果:
(1797, 64)
表示:该数据集有1797张图片,每张图片采用8*8=64个像素点方式。打印出数据集第一张图片如下:
代码:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu
import numpy as np
from sklearn.datasets import load_digits #手写阿拉伯数字的数据集
from sklearn.metrics import confusion_matrix,classification_report #混淆矩阵,一种特定的矩阵用来呈现算法性能的可视化效果
from sklearn.preprocessing import LabelBinarizer #sklearn中每个数字用0,1表示,数字是几,第几位为1,其他位是0
from NeuralNetwork import NeuralNetwork
from sklearn.cross_validation import train_test_split #交叉验证,分为K份,其中一份为训练集,其他为测试集
digits = load_digits()
X = digits.data #特征量
y = digits.target #分类标签
#标准化,时数据在0,1之间
X -= X.min()
X /= X.max()
#输入层的神经单元数目与特征向量的维度相同,输出层与分类的数目相同,隐藏层有一定灵活的处理
nn = NeuralNetwork([64,100,10],'logistic') #实例化一个神经网络
X_train,X_test,y_train,y_test = train_test_split(X,y) #利用交叉验证方法将数据集分成训练和测试
labels_train = LabelBinarizer().fit_transform(y_train) #0,1数据类型转化
labels_test = LabelBinarizer().fit_transform(y_test)
print("start fitting")
nn.fit(X_train,labels_train,epochs = 3000)
predictions=[]
for i in range(X_test.shape[0]):
o = nn.predict(X_test[i]) #测试集中每一行预测其标签为多少,范围在0,1之间
predictions.append(np.argmax(o)) #取0-9中预测y值(0-1之间的数字)对应最大的数
print(confusion_matrix(y_test,predictions)) #混淆矩阵查看预测正确的数目
print(classification_report(y_test,predictions)) #预测的精确度运行结果:
start fitting
[[52 0 0 0 0 0 0 0 0 0]
[ 0 36 0 0 0 1 1 0 8 7]
[ 0 0 49 0 0 0 0 0 3 0]
[ 0 0 0 38 0 0 0 0 1 0]
[ 0 2 0 0 42 0 0 0 0 1]
[ 0 0 0 0 0 44 0 0 1 1]
[ 0 0 0 0 0 0 37 0 0 0]
[ 0 0 0 0 0 0 0 34 0 0]
[ 0 2 0 0 0 1 0 0 49 0]
[ 0 0 0 0 0 1 0 0 1 38]]
precision recall f1-score support
0 1.00 1.00 1.00 52
1 0.90 0.68 0.77 53
2 1.00 0.94 0.97 52
3 1.00 0.97 0.99 39
4 1.00 0.93 0.97 45
5 0.94 0.96 0.95 46
6 0.97 1.00 0.99 37
7 1.00 1.00 1.00 34
8 0.78 0.94 0.85 52
9 0.81 0.95 0.87 40
avg / total 0.94 0.93 0.93 450注:第一个矩阵中,横向表示:预测值;纵向表示:真实值;对角线表示:预测对的实例情况。
precision:预测是某个数,的确是这个数的概率;recall:真实值为某个数,确实预测是这个数的概率;这两个值都是准确度的一个衡量。
智能推荐
BP神经网络及其改进算法;自适应学习速率BP;周志华《机器学习》课后题5.6
1.前言 课时有限,并没有能系统的学习第五章神经网络的部分,此课后习题也是在网络上找的代码来学习的,python的基础也不是很好,故还有很多缺陷,在原代码的基础上补充了很多注释,在文末也会给出实验结果和待补充的地方,供学习参考。参考材料会在文末附录给出,包括原代码以及数据链接。 本文针对的是周志华《机器学习》课后题5.6的编程。任务如下:试设计一个BP改进算法,能通过动态调整学习率显著提升收敛速度...
吴恩达|机器学习作业4.0神经网络反向传播(BP算法)
4.0.神经网络学习 1)题目: 在本练习中,您将实现神经网络的反向传播算法,并将其应用于手写数字识别任务。在之前的练习中,已经实现了神经网络的前馈传播,并使用Andrew Ng他们提供的权值来预测手写数字。在本练习中,将自己实现反向传播算法来学习神经网络的参数。 本次的数据与上次作业是一样的,这里不再赘述。 数据集链接: https://pan.baidu.com/s/1i_i77cVsa5Tt...
从 0 开始机器学习 - 神经网络反向 BP 算法!
最近一个月项目好忙,终于挤出时间把这篇 BP 算法基本思想写完了,公式的推导放到下一篇讲吧。 一、神经网络的代价函数 神经网络可以看做是复杂逻辑回归的组合,因此与其类似,我们训练神经网络也要定义代价函数,之后再使用梯度下降法来最小化代价函数,以此来训练最优的权重矩阵。 1.1 从逻辑回归出发 我们从经典的逻辑回归代价函数引出,先来复习下: J(θ)=1m∑i=1m[&minus...
机器学习 BP神经网络 梯度下降 反向传播算法
文章目录 一、误差逆传播公式推导 1.1 神经网络的结构 1.2 参数含义 1.3 损失函数 1.4 梯度下降 1.5 链式法则求偏导 1.6 反向逆传播算法 二、BP神经网络 2.1 主函数 2.2 测试集 2.2 训练集 BP神经网络的建立 一、误差逆传播公式推导 1.1 神经网络的结构 1.2 参数含义 w为权重矩阵,矩阵乘积之后得到下一层神经元的输入 W矩阵的特点,行的个数为输入的维数,列...
MATLAB之机器学习——BP神经网络
要开始慢慢谢谢自己的博客,作为一个刚刚开始写博客的萌新,将自己的想法,学习内容总结变成文字进行输出。不管写得怎样,有时间都会坚持写下去。(#^.^#) 有什么建议,欢迎指正。 开始进入正题,上篇博客写了一个十分简单的三帧间差分法,其实存在很多的缺点的,会出现“空洞”现象,“双影”现象(物体轮廓太粗啦),不能提取区域物体的完整区域,只能提取轮廓,算法十...
猜你喜欢
盒马唠机器学习之BP神经网络
对于大多数的人来说刚接触神经网络的时候都会先碰到BP算法的问题,如何形象快速地理解BP神经网络,尤其是理解当中的逆向反馈,很多人总是会在这里的大量公式觉得好像很难就退缩了,其实不难,就是一个链式求导法则反复用。如果不想看公式,可以直接把数值带进去,实际的计算一下,体会一下这个过程之后再来推导公式,这样就会觉得很容易了。 神...
机器学习之BP神经网络 以及 tensorflow 实现
BP (Back Propagation)神经网络简介 : 先介绍一下神经元,在生物神经网络中,每个神经元与其它神经元相连,当一个神经元“兴奋”时,就会通过穿出神经向其它神经元发送化学物质,其它神经元会通过穿人神经接受信息然后再传递至神经中枢处理信息。现在机器学习中的神经网络就是基于生物学中的神经元模型的。一个一个的神经元与其它神经元相互连接构成所谓的神经网络。 BP 神经...
VUE给动态生成的el-checkbox添加v-model
需求描述:根据返回的数据,页面动态for循环添加el-checkbox,动态绑定v-model; html代码: tabList数据格式: 之前的错误做法: 开始以为这样就可以了,毕竟在el-checkbox上用item.status绑定v-model,后面发现checkbox点击的时候并没有更新; 解决方案: 官方文档...
[UE4]蓝图和C++调用自定义函数
1、C++自定义方法,蓝图调用 UFUNCTION宏是处理将C++函数暴露给反射系统的一些事情,参数BlueprintCallable意味着这个函数可以在蓝图中调用,而后面的目录是必须有的,这样在蓝图中右键点击的时候,我们就可以根据这个目录找到我们需要的函数。 2、蓝图定义方法,C++调用 当我们在蓝图中定义了一系列操作后,我们也想用C++调用,我们利用BlueprintImplementable...
