BP神经网络的Python实现
利用python实现了简易的 bp神经网络模型,利用误差逆传播算法以及梯度下降法对网络进行训练,具体公式推到等可参考《机器学习》等相关书籍。
源码以及数据集可在链接 https://download.csdn.net/download/wz2671/10790394下载。
BP_TEST.py
# -*- coding: UTF-8 -*-
from BPNet.bpNet import *
import matplotlib.pyplot as plt
# 数据集
bpnet = BPNet()
bpnet.loadDataSet("testSet2.txt")
bpnet.normalize()
# 绘制数据集散点图
bpnet.drawClassScatter(plt)
# BP神经网络进行数据分类
bpnet.bpTrain()
# 计算和绘制分类线
x, z = bpnet.BPClassfier()
bpnet.classfyLine(plt, x, z)
plt.show()
# 绘制误差曲线
bpnet.TrendLine(plt)
plt.show()
# -*- coding: utf-8 -*-
from numpy import *
import matplotlib.pyplot as plt
"""
BP神经网络的Python实现
公式推导等可参考:周志华《机器学习》
"""
class BPNet(object):
def __init__(self):
# 网络参数
self.eb = 0.01 # 误差容限
self.eta = 0.1 # 学习率
self.mc = 0.3 # 动量因子
self.maxiter = 2000 # 最大迭代次数
self.errlist = [] # 误差列表
self.data = None # 数据集
self.label = None # 分类集
self.nSampNum = 0 # 样本集行数
self.nSampDim = 0 # 样本维度
self.nHidden = 4 # 隐含层神经元
self.nOut = 1 # 输出层
self.iterator = 0 # 最优时迭代次数
self.hide_wb = None # 隐含层模型参数
self.out_wb = None # 输出层模型参数
# 激活函数
def logistic(self, net):
return 1.0 / (1.0 + exp(-net)