
rbf神经网络
-
2023年3月3日发(作者:薄伽梵)径向基(RBF)神经⽹络python代码实现
importnorm,pinv
frommatplotlibimportpyplotasplt
importnumpy
classRBF:
def__init__(self,indim,numcenters,outdim):
=indim
=outdim
ters=numcenters
s=[m(-1,1,indim)foriinrange(numcenters)]
=8
self.W=((numcenters,outdim))
def_basisfunc(self,c,d):
assertlen(d)==
(-*norm(c-d)**2)
def_calcAct(self,X):
#calculateactivationsofRBFs
G=(([0],ters),float)
forci,cinenumerate(s):
forxi,x0inenumerate(X):
G[xi,ci]=self._basisfunc(c,x0)
returnG
deftrain(self,X,Y):
"""X:matrixofdimensionsnxindim
y:columnvectorofdimensionnx1"""
#chooserandomcentervectorsfromtrainingset
rnd_idx=ation([0])[:ters]
s=[X[i,:]foriinrnd_idx]
print("center",s)
#calculateactivationsofRBFs
G=self._calcAct(X)
print(G)
#calculateoutputweights(pseudoinverse)
self.W=(pinv(G),Y)
deftest(self,X):
"""X:matrixofdimensionsnxindim"""
G=self._calcAct(X)
Y=(G,self.W)
returnY
if__name__=='__main__':
n=100
x=[-1:1:complex(0,n)].reshape(n,1)
#setyandaddrandomnoise
y=(3*(x+0.5)**3-1)
#y+=(0,0.1,)
#rbfregression
rbf=RBF(1,20,1)
(x,y)
z=(x)
#plotoriginaldata
(figsize=(12,8))
(x,y,'k-')
#plotlearnedmodel
(x,z,'r-',linewidth=2)
#plotrbfs
#(s,(ters),'gs')
#(s,(ters),'gs')
#s:
##RFpredictionlines
#cx=(c-0.7,c+0.7,0.01)
#cy=[rbf._basisfunc(([cx_]),([c]))forcx_incx]
#(cx,cy,'-',color='black',linewidth=0.2)
#(-1.2,1.2)
()