python実現機械学習(周志華)参考解答第五章ニューラルネットワーク5.7 RBFニューラルネットワーク
5201 ワード
#-*- coding:utf-8 -*-
import re
import xlrd
import xdrlib,sys
import xlwt
import datetime
import time
import numpy as np
def rand(a, b): # a n (0,1)
A=np.zeros((a,b))
from random import random
for h in range(a):
for l in range(b):
A[h][l]=random()
return A
if __name__=="__main__":
#
data=np.array([[0,0],[0,1],[1,0],[1,1]])
y=np.array([0,1,1,0])
t=10 # ,
p=rand(4,t) #
ty=rand(4,1) #
w=rand(1,t) # i
b=rand(1,t) # i
tk=0.5
# [id, c] = kmeans(x, 2);
c = rand(t, 2) # i
kn=0 #
sn=0 #
old_ey=0 #
print((np.array(data[0]) - np.array(c[0])).T)
while 1:
kn=kn+1
#
for i in range(4):
for j in range(t):
ij=(data[i]-c[j])
ij=ij.dot(ij.T) #
p[i][j]=np.exp(-1*b[0][j]*ij)
ty[i]=w.dot(p[i].T)
print(p)
#
ey=(ty.T-y).dot((ty.T-y).T)
ey=ey[0][0]
print('ey:',ey)
#g w,b
dw=np.zeros((1,t))
db=np.zeros((1,t))
for i in range(4):
for j in range(t):
dw[0][j]=dw[0][j]+(ty[i]-y[i])*p[i][j]
ij = (data[i] - c[j])
ij = ij.dot(ij.T) #
db[0][j]=db[0][j]-(ty[i]-y[i])*w[0][j]*ij*p[i][j]
print("dw:", dw)
w=w-tk*dw/4
b=b-tk*db/4
#
if(abs(old_ey-ey)<0.0001):
sn=sn+1
if(sn==10):
break
else:
old_ey=ey
sn=0
githubアドレス:https://github.com/wu-yy/RBF/tree/master