資源簡介
BPNet算法是一種最有效的多層神經網絡學習方法算法實現分類。包括已實現的代碼和訓練、測試的數據集。

代碼片段和文件信息
#-*-coding:utf-8-*-
from?numpy?import?*
class?BPNet(object):
????def?__init__(self):
????????self.eb=0.01
????????self.iterator=0
????????self.eta=0.1
????????self.mc=0.3
????????self.maxiter=2000
????????self.nHidden=4;
????????self.nOut=1;
????????self.errlist=[]
????????self.dataMat=0
????????self.classLabes=0
????????self.nSampNu=0
????????self.nSampDim=0
???????#?self.hi_wb=self.hi_wb+(1.0-self.mc)*self.eta*dhi_wb+self.mc*dhi_wbOld
????#激活函數
????def?logistic(selfnet):
????????return?1.0/(1.0+exp(-net))
????#q全局誤差函數
????def?errorfunc(selfinX):
????????return?sum(power(inX2))*0.5
????#傳遞函數導函數
????def?dlogit(selfnet):
????????return?multiply(net(1.0-net))
????def?init__hiddenWB(self):#隱含層初始化
????????self.hi_w=2.0*(random.rand(self.nHiddenself.nSampDim)-0.5)
????????self.hi_b?=?2.0?*?(random.rand(self.nHidden?1)?-?0.5)
????????self.hi_wb?=?mat(self.addcol(mat(self.hi_w)mat(self.hi_b)))
????def?init_OutputWB(self):#輸出層初始化
????????self.out_w=2.0*(random.rand(self.nOutself.nHidden)-0.5)
????????self.out_b?=?2.0?*?(random.rand(self.nOut?1)?-?0.5)
????????self.out_wb?=?mat(self.addcol(mat(self.out_w)mat(self.out_b)))
????#加載數據集
????def?loadDataSet(selffilename):
????????self.dataMat=[];self.classLabes=[]
????????fr=open(filename)
????????for?line?in?fr.readlines():
????????????lineArr=line.strip().split()
????????????self.dataMat.append([float(lineArr[0])float(lineArr[1])1.0])
????????????self.classLabes.append(float(lineArr[2]))
????????self.dataMat=mat(self.dataMat)
????????mn=shape(self.dataMat)
????????self.nSampNum=m;#樣本數量
????????self.nSampDim=n-1#樣本維度
????#數據集歸一化
????def?normalize(selfdataMat):
????????[mn]=shape(dataMat)
????????for?i?in?xrange(n-1):
????????????dataMat[:i]=(dataMat[:i]-mean(dataMat[:i]))/(std(dataMat[:i])+1.0e-10)
????????return?dataMat
????#矩陣新增新列
????def?addcol(selfmatrix1matrix2):
????????[m1n1]=shape(matrix1)
????????[m2n2]=shape(matrix2)
????????if?m1!=m2:
????????????print?“different?rowscan?not?merge?matrix“
????????????return?;
????????mergMat=zeros((m1n1+n2))
????????mergMat[:0:n1]=matrix1[:0:n1]
????????mergMat[:n1:(n1+n2)]=matrix2[:0:n2]
????????return?mergMat
????#繪制分類點
????def?drawClassScatter(selfplt):
????????i=0
????????for?mydata?in?self.dataMat:
????????????if?self.classLabes[i]==1:
????????????????plt.scatter(mydata[00]mydata[01]c=‘blue‘marker=‘o‘)
????????????else:
????????????????plt.scatter(mydata[00]?mydata[01]?c=‘red‘?marker=‘s‘)
????????????i+=1
????#主函數----------
????def?bpTrain(self):
????????SampIn=self.dataMat.T
????????expected=mat(self.classLabes)
????????self.init__hiddenWB();self.init_OutputWB()
????????dout_wbOld=0.0;dhi_wbOld=0.0
????????#主循環
????????for?i?in?xrange(self.maxiter):
????????????#正向傳播,從輸入層到隱藏層
????????????hi_input=self.hi_wb*SampIn
????????????hi_output=self.logistic(hi_input)
????????????hi2out=self.addcol(hi_output.Tones((self.nSampNum1))).
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????448??2018-04-24?21:57??BPNet\.idea\BPNet.iml
?????文件????????213??2018-04-23?20:19??BPNet\.idea\misc.xm
?????文件????????466??2018-04-24?21:57??BPNet\.idea\modules.xm
?????文件??????22641??2018-04-25?20:45??BPNet\.idea\workspace.xm
?????文件???????5224??2018-04-25?19:54??BPNet\BPNet.py
?????文件???????6138??2018-04-25?19:54??BPNet\BPNet.pyc
?????文件????????577??2018-04-25?20:16??BPNet\BPTest.py
?????文件???????2251??2018-04-24?21:37??BPNet\data.txt
?????目錄??????????0??2018-04-27?18:57??BPNet\.idea
?????目錄??????????0??2018-04-27?18:57??BPNet
-----------?---------??----------?-----??----
????????????????37958????????????????????10
- 上一篇:決策樹算法ID3和C45
- 下一篇:運用ID3算法訓練決策樹
評論
共有 條評論