径向基(RBF)神经网络

RBF网络能够逼近任意非线性的函数。可以处理系统内难以解析的规律性,具有很好的泛化能力,并且具有较快的学

习速度。当网络的一个或多个可调参数(权值或阈值)对任何一个输出都有影响时,这样的网络称为全局逼近网络

由于对于每次输入,网络上的每一个权值都要调整,从而导致全局逼近网络的学习速度很慢,比如BP网络。如果对于

输入空间的某个局部区域只有少数几个连接权值影响输出,则该网络称为局部逼近网络,比如RBF网络。接下来重点

先介绍RBF网络的原理,然后给出其实现。先看如下图

正则化的RBF网络参考这里。下面是网上找的一个比较好的Python的RBF网络实现。

代码:

from scipy import *
from scipy.linalg import norm, pinv

from matplotlib import pyplot as plt

class RBF:

    def __init__(self, indim, numCenters, outdim):
        self.indim = indim
        self.outdim = outdim
        self.numCenters = numCenters
        self.centers = [random.uniform(-1, 1, indim) for i in xrange(numCenters)]
        self.beta = 8
        self.W = random.random((self.numCenters, self.outdim))

    def _basisfunc(self, c, d):
        assert len(d) == self.indim
        return exp(-self.beta * norm(c-d)**2)

    def _calcAct(self, X):
        # calculate activations of RBFs
        G = zeros((X.shape[0], self.numCenters), 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):
        """ X: matrix of dimensions n x indim
            y: column vector of dimension n x 1 """

        # choose random center vectors from training set
        rnd_idx = random.permutation(X.shape[0])[:self.numCenters]
        self.centers = [X[i,:] for i in rnd_idx]

        print "center", self.centers
        # calculate activations of RBFs
        G = self._calcAct(X)
        print G

        # calculate output weights (pseudoinverse)
        self.W = dot(pinv(G), Y)

    def test(self, X):
        """ X: matrix of dimensions n x indim """

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

if __name__ == '__main__':
    n = 100
    x = mgrid[-1:1:complex(0,n)].reshape(n, 1)
    # set y and add random noise
    y = sin(3*(x+0.5)**3 - 1)
    # y += random.normal(0, 0.1, y.shape)

    # rbf regression
    rbf = RBF(1, 10, 1)
    rbf.train(x, y)
    z = rbf.test(x)

    # plot original data
    plt.figure(figsize=(12, 8))
    plt.plot(x, y, 'k-')

    # plot learned model
    plt.plot(x, z, 'r-', linewidth=2)

    # plot rbfs
    plt.plot(rbf.centers, zeros(rbf.numCenters), 'gs')

    for c in rbf.centers:
        # RF prediction lines
        cx = arange(c-0.7, c+0.7, 0.01)
        cy = [rbf._basisfunc(array([cx_]), array([c])) for cx_ in cx]
        plt.plot(cx, cy, '-', color='gray', linewidth=0.2)

    plt.xlim(-1.2, 1.2)
    plt.show()

最后提供Github上的一个C++实现的RBF,供日后参考。

时间: 2024-10-07 06:33:09

径向基(RBF)神经网络的相关文章

RBF高斯径向基核函数【转】

XVec表示X向量.||XVec||表示向量长度.r表示两点距离.r^2表示r的平方.k(XVec,YVec) = exp(-1/(2*sigma^2)*(r^2))= exp(-gamma*r^2)...... 公式-1这里, gamma=1/(2*sigma^2)是参数, r=||XVec-YVec||实际上,可看作是计算2个点X与Y的相似性.很多参考书上,把YVec写作XVec',即 k(XVec, XVec'),也是一样的含义:两点相似性.由于Matlab上面XVec'代表XVec的转置

机器学习之径向基神经网络(RBF NN)

本文基于台大机器学习技法系列课程进行的笔记总结. 主要内容如下图所示: 首先介绍一下径向基函数网络的Hypothesis和网络的结构,然后介绍径向基神经网络学习算法,以及利用K-means进行的学习,最后通过一个实例加深对RBF神经网络认识和理解. RBF神经网络的Hypothesis和网络结构 我们从基于Gaussian kernel的support vector machine中在无限维度中进行特征转换来获取一个large margin的边界,这个Gaussian kernel就是一个Rad

径向基网络(RBF network)

来源:http://blog.csdn.net/zouxy09/article/details/13297881 1.径向基函数 径向基函数(Radical Basis Function,RBF)方法是Powell在1985年提出的.所谓径向基函数,其实就是某种沿径向对称的标量函数.通常定义为空间中任一点x到某一中心c之间欧氏距离的单调函数,可记作k(||x-c||),其作用往往是局部的,即当x远离c时函数取值很小.例如高斯径向基函数: 当年径向基函数的诞生主要是为了解决多变量插值的问题.可以看

径向基神经网络初学

[径向基神经网络训练算法及其性能研究 2.1]-RBF定义:假设x,x0属于Rn,以x0为中心,x到x0的径向距离为半径形成的||x-x0||构成的函数系φ(||x-x0||)称为径向基函数.

径向基网络(RBF network)之BP监督训练

径向基网络(RBF network)之BP监督训练 转载:http://blog.csdn.net/zouxy09/article/details/13297881 分类: 机器学习 神经网络 C/C++编程2013-10-28 18:17 3083人阅读 评论(1) 收藏 举报 神经网络机器学习RBF 径向基网络(RBF network)之BP监督训练 [email protected] http://blog.csdn.net/zouxy09 之前看了流行学习的时候,感觉它很神奇,可以将一个

径向基神经网络

预备知识: cover定理: 在复杂的模式分类问题中,将数据映射到高维空间比映射到低维空间更可能线性可分 径向基函数: 空间中的任意点到某一中心之间的欧式距离(也可以是其他的距离函数)的单调函数 径向基神经网络是由一个三层的结构组成,包括输入层,隐含层,输出层,隐含层的激活函数一般是非线性的径向基函数,输出层是线性函数或hardlim函数 普通径向基神经网络中,隐含层神经元的个数是样本的数量,径向基函数的中心是对应的样本,所求插值函数要求通过所有的样本点,即 F(Xp)=dp p表示样本个数,F

RBF神经网络学习算法及与多层感知器的比较

对于RBF神经网络的原理已经在我的博文<机器学习之径向基神经网络(RBF NN)>中介绍过,这里不再重复.今天要介绍的是常用的RBF神经网络学习算法及RBF神经网络与多层感知器网络的对比. 一.RBF神经网络学习算法 广义的RBF神经网络结构如下图所示: N-M-L结构对应着N维输入,M个数据中心点centers,L个输出. RBF 网络常用学习算法 RBF 网络的设计包括结构设计和参数设计.结构设计主要解决如何确定网络隐节点数的问题.参数设计一般需考虑包括3种参数:各基函数的数据中心和扩展常

RBF神经网络——直接看公式,本质上就是非线性变换后的线性变化(RBF神经网络的思想是将低维空间非线性不可分问题转换成高维空间线性可分问题)

Deeplearning Algorithms tutorial 谷歌的人工智能位于全球前列,在图像识别.语音识别.无人驾驶等技术上都已经落地.而百度实质意义上扛起了国内的人工智能的大旗,覆盖无人驾驶.智能助手.图像识别等许多层面.苹果业已开始全面拥抱机器学习,新产品进军家庭智能音箱并打造工作站级别Mac.另外,腾讯的深度学习平台Mariana已支持了微信语音识别的语音输入法.语音开放平台.长按语音消息转文本等产品,在微信图像识别中开始应用.全球前十大科技公司全部发力人工智能理论研究和应用的实现

转:径向基核函数

转:径向基核函数 (2011-05-20 16:53:54) 转载▼   分类: AboutResearch 所谓径向基函数 (Radial Basis Function 简称 RBF), 就是某种沿径向对称的标量函数. 通常定义为空间中任一点x到某一中心xc之间欧氏距离的单调函数 , 可记作 k(||x-xc||), 其作用往往是局部的 , 即当x远离xc时函数取值很小. 最常用的径向基函数是高斯核函数 ,形式为 k(||x-xc||)=exp{- ||x-xc||^2/(2*σ)^2) }

RBF神经网络和BP神经网络的关系

作者:李瞬生链接:https://www.zhihu.com/question/44328472/answer/128973724来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. BP Neural Network - 使用 Automatic Differentiation (Backpropagation) 进行导数计算的层级图模型 (layer-by-layer graphical model) 只要模型是一层一层的,并使用AD/BP算法,就能称作 BP Ne