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