使用RBF神经网络完成函数拟合

文章目录

  • 使用RBF网络进行函数拟合
    使RBF网络进行对f(x)函数的拟合功能,其中输入为x,输出为预测的f(x)
  • RBF网络简介
    RBF网络的结构与多层前向网络类似,它是一种三层前向网络。 输入层由信号源结点组成;第二层为隐含层,隐单元数视所描述问题的需要而定,隐单元的变换函数是RBF径向基函数,它是对中心点径向对称且衰减的非负非线性函数;第三层为输出层,它对输入模式的作用作出响应
  • 使用python代码实现
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from scipy.linalg import norm , pinv

class RBF:
    def __init__(self,input_dim=1,num_centers=2,out_dim=1):
        self.input_dim = input_dim
        self.num_centers = num_centers
        self.out_dim = out_dim
        self.beta = 8
        self.centers = [np.random.uniform(-1,1,input_dim) for i in  range(num_centers)]
        self.W = np.random.random((self.num_centers,self.out_dim))
    
    def _basisfunc(self,c,d):
        return np.exp(-self.beta * norm(c-d)**2)

    def _calcAct(self,X):
        G = np.zeros((X.shape[0],self.num_centers),dtype = np.float)
        for ci , c in enumerate(self.centers):
            for xi , x in enumerate(X):
                G[xi , ci] = self._basisfunc(c,x)
        return G



    def train(self,X,Y):
        rnd_idx = np.random.permutation(X.shape[0])[:self.num_centers]
        self.centers = [X[i] for i in rnd_idx]

        G = self._calcAct(X)
        self.W = np.dot(pinv(G),Y)


    def predict(self,X):
        G = self._calcAct(X)
        Y = np.dot(G,self.W)
        return Y
        pass
  
if __name__ == "__main__":
    x = np.arange(-1,1.1,0.1).reshape(-1,1)
    
    y = np.array([-.09602,-0.5770,-0.0729,0.3771,0.6405,0.6600,0.4609,0.1336,-0.2013,-0.4344,-0.5,-0.3930,-0.1647,0.0988,0.3072,0.3960,0.3449,0.1816,-0.0312,-0.2189,-0.3201])
    y_pred = np.random.rand(21)
    net = RBF(1,15,1)
    net.train(X=x,Y=y)
    y_pred = net.predict(x)
    plt.title("Radial Basis Transfer Function")
    plt.plot(x,y,color="green",label="f(x)")
    plt.plot(x,y_pred,color="blue",label = 'fitted f(x)')
    plt.legend()
    plt.xlabel("x axis")
    plt.ylabel("y axis")
    plt.savefig("RBF.jpg")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值