机器学习练习----神经网络的标准BP算法(误差逆传播算法)
此算法的实现基于下面理论那里的西瓜书伪代码,读数据部分直接用了大神的一段代码,源地址https://blog.csdn.net/qdbszsj/article/details/79110888
同时给出一些理论:https://blog.csdn.net/aaalswaaa1/article/details/83046813
import pandas as pd
import numpy as np
import random
import math# 激活函数
def sigmoid(X, d):if d == 1:for i in range(len(X)):X[i] = 1 / (1 + math.exp(-X[i]))else:for i in range(len(X)):X[i] = sigmoid(X[i], d-1)return X# 数据读入
dataset = pd.read_csv('watermelon3.0.csv', delimiter=",",header=None) # 不把第一行当属性名,直接读入,不改header会默认不读第一行
# 文本数字化
attributeMap = {}
attributeMap['浅白'] = 0
attributeMap['青绿'] = 0.5
attributeMap['乌黑'] = 1
attributeMap['蜷缩'] = 0
attributeMap['稍蜷'] = 0.5
attributeMap['硬挺'] = 1
attributeMap['沉闷'] = 0
attributeMap['浊响'] = 0.5
attributeMap['清脆'] = 1
attributeMap['模糊'] = 0
attributeMap['稍糊'] = 0.5
attributeMap['清晰'] = 1
attributeMap['凹陷'] = 0
attributeMap['稍凹'] = 0.5
attributeMap['平坦'] = 1
attributeMap['硬滑'] = 0
attributeMap['软粘'] = 1
attributeMap['否'] = 0
attributeMap['是'] = 1
dataset = np.array(dataset)
m, n = np.shape(dataset)for i in range(m):for j in range(n):if dataset[i][j] in attributeMap:dataset[i][j] = attributeMap[dataset[i][j]]dataset[i][j] = round(dataset[i][j], 3)# 初始化数据
X = dataset[:, :n-1] # 样本属性输入
Y = dataset[:, -1] # 样本输出
m, n = np.shape(X)
eta = 0.2 # 学习参数
q = 10 # 隐层神经元数
l = 1 # 输出神经元
w = [[random.random() for i in range(l)] for j in range(q)] # 隐层与输出层之间的连接权
v = [[random.random() for i in range(q)] for j in range(n)] # 输入层与隐层之间的连接权
theta = [random.random() for i in range(l)] # 输出层阈值
gamma = [random.random() for i in range(q)] # 隐层阈值
Ek = 4 # 累积误差
time = 0 # 最大循环次数# 迭代学习
while(time < 5000 and Ek > 0.1):Ek = 0time += 1for k in range(m):alpha = np.dot(X[k], v) # 隐层输入b = sigmoid(alpha-gamma, 1) # 隐层输出beta = np.dot(b, w) # 输出层输入y = sigmoid(beta-theta, 1) # 输出层输出g = y*(1-y)*(Y[k]-y)e = b*(1-b)*((np.dot(w, g)).T)w += eta*np.dot(b.reshape((q, 1)), g.reshape((1, l)))theta -= eta*gv += eta*np.dot(X[k].reshape((n, 1)), e.reshape((1, q)))gamma -= eta*eE = sum((y-Y[k])*(y-Y[k]))/2Ek += Ealpha = np.dot(X, v)
b = sigmoid(alpha-gamma, 2)
beta = np.dot(b, w)
y = sigmoid(beta - theta, 2)
print(y)
print(Ek)
print(time)
机器学习练习----神经网络的标准BP算法(误差逆传播算法)相关推荐
- BP(BackPropagation)误差逆传播算法
上篇文章介绍了多层前馈神经网络,那么这种网络是怎样训练生成的呢,BP算法就是其中一种生成多层神经网络的算法 ,又称为反向传播算法,下面来了解一下BP算法. 举例: 下图中是根据一个手写数字辨识的神经网 ...
- 《机器学习与数据挖掘》实验五 编程实现误差逆传播算法(BP算法)
前言: 摘要:本文对机器学习实验五 标准BP算法的代码进行实现,如果不了解的BP算法的话,可以自行上网搜索BP算法的详解. 实验题目:编程实现误差逆传播算法(BP算法) 实验目的:掌握误差逆传播算法( ...
- BP算法误差逆传播参数更新公式推导
BP算法误差逆传播参数更新公式推导
- 人工智能知识全面讲解:多层神经网络与误差逆传播算法
7.3.1 从单层到多层神经网络 明斯基教授曾表示,单层神经网络无法解决异或问题,但是当增加一个计 算层以后,两层神经网络不仅可以解决异或问题,而且具有非常好的非线性分 类效果.只是两层神经网络的计算 ...
- 误差逆传播算法公式理解及推导
前言:公式理解及推导参考自<机器学习>周志华 P101 BP网络 BP网络一般是指由 误差逆传播(error BackPropagation, BP)算法训练的多层前馈神经网络. 给定训练 ...
- 机器学习中神经网络,支持向量机以及贝叶斯分类器总结
第五章神经网络 5.1神经元模型 神经网络中最基本的成分是神经元模型,即"简单单元". 在"M-P神经元模型"中,神经元接受收到来自n个其他神经元传递过来的输入 ...
- python大战机器学习——人工神经网络
人工神经网络是有一系列简单的单元相互紧密联系构成的,每个单元有一定数量的实数输入和唯一的实数输出.神经网络的一个重要的用途就是接受和处理传感器产生的复杂的输入并进行自适应性的学习,是一种模式匹配算法, ...
- 机器学习与数据挖掘--编程实现BP算法
机器学习与数据挖掘实验五 (编程实现误差逆传播算法BP算法) 实验目的: 掌握误差逆传播算法(BP算法)的工作流程 实验环境: Anaconda/Jupyter notebook/Pycharm 实验 ...
- 机器学习——前馈神经网络
一.神经网络基础 1. 神经元模型 神经网络中最基本的单元是神经元模型(neuron). 细胞体分为两部分,前一部分计算总输入值(即输入信号的加权和,或者说累积电平),后一部分先计算总输入值与该神经元 ...
- 神经网络算法的应用领域,神经元网络算法的思想
1.人工神经网络的发展 现代意义上对神经网络(特指人工神经网络)的研究一般认为从1943年美国芝加哥大学的生理学家W.S. McCulloch和W.A. Pitts提出M-P神经元模型开始,到今年正好 ...
最新文章
- @2021高考生,用 Python 分析专业“钱景”
- JVM调优总结(十一)JVM 几个重要的参数
- Fiori Error message Exception raised without specific error
- Windows 11 快速体验:开始菜单居中,全系圆角设计!
- HoloLens开发手记-配置开发环境 Install the tools
- java jsf_将Java 8日期时间API与JSF和Java EE 7结合使用
- latex 图片大小_用LaTeX写作业——插入图片(二)
- I/O多路复用之select,poll,epoll简介
- android PopupWindow实现从底部弹出或滑出选择菜单或窗口
- Redis Scan返回数据量大于Limit的Count原因分析
- 几种常用 css3 选择器解释
- 2D Game Creation - 2D游戏开发基本流程
- kms地址大全_kms激活服务器地址(常用)和自己搭建KMS服务器教程
- 计算机安全群,大开眼界||斯坦福大学信息安全课程群
- 操作系统基础:内存管理逻辑思维导图,简单看懂内存管理的逻辑
- 第一次用 Mac git 遇到的一些问题及解决方法,记录一下
- Python中shape的用法
- word中装订线位置_word装订线位置在哪里
- 看了CES之后,跳槽到朝阳行业有着落了
- SpringBoot发送html邮箱验证码