前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >RBF神经网络及Python实现(附源码)

RBF神经网络及Python实现(附源码)

作者头像
昱良
发布于 2018-04-08 07:04:57
发布于 2018-04-08 07:04:57
7.7K13
代码可运行
举报
运行总次数:3
代码可运行

作者:ACdreamers

http://blog.csdn.net/acdreamers/article/details/46327761

RBF网络能够逼近任意非线性的函数。可以处理系统内难以解析的规律性,具有很好的泛化能力,并且具有较快的学习速度。当网络的一个或多个可调参数(权值或阈值)对任何一个输出都有影响时,这样的网络称为全局逼近网络。

由于对于每次输入,网络上的每一个权值都要调整,从而导致全局逼近网络的学习速度很慢,比如BP网络。如果对于输入空间的某个局部区域只有少数几个连接权值影响输出,则该网络称为局部逼近网络,比如RBF网络。接下来重点先介绍RBF网络的原理,然后给出其实现。先看如下图

正则化的RBF神经网路请参照博客园的文章(链接:http://www.cnblogs.com/zhangchaoyang/articles/2591663.html)。下面是一个比较好的Python的RBF网络实现。最后提供Github上的一个C++实现的RBF,供日后参考(点击阅读原文查看)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()  
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习算法与Python学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
你好,运行rbf = RBF(1, 10, 1) 的时候报错,说“xrange”没有定义,请问怎么定义呢
你好,运行rbf = RBF(1, 10, 1) 的时候报错,说“xrange”没有定义,请问怎么定义呢
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
深度学习(5)——RBF算法简介
前言:rbf算法用的不多,但他的思想引用到局部逼近,能够更快求解参数,在未来的发展应该不错 简介 RBF网络能够逼近任意非线性的函数。 可以处理系统内难以解析的规律性,具有很好的泛化能力,并且具有较快的学习速度。 有很快的学习收敛速度,已成功应用于非线性函数逼近、时间序列分析、数据分类、 模式识别、信息处理、图像处理、系统建模、控制和故障诊断等。 当网络的一个或多个可调参数(权值或阈值)对任何一个输出都有影响时,这样的网 络称为全局逼近网络。由于对于每次输入,网络上的每一个权值都要调整,从而导致 全局
DC童生
2018/07/06
2.1K0
python实现线性回归之简单回归
代码来源:https://github.com/eriklindernoren/ML-From-Scratch
西西嘛呦
2020/08/26
5620
python实现线性回归之简单回归
小姐姐带你一起学:如何用Python实现7种机器学习算法(附代码)
2018 区块链技术及应用峰会(BTA)·中国 倒计时 1 天 2018,想要follow最火的区块链技术?你还差一场严谨纯粹的技术交流会——2018区块链技术及应用峰会(BTA)·中国将于2018年3月30-31日登陆北京喜来登长城饭店。追求专业性?你要的这里全都有:当超强嘉宾阵容遇上业界同好的脑洞大联欢,1+1=无限可能,目前门票预购火热进行中。 活动详情: http://dwz.cn/7FI1Ch 编译 | 林椿眄 出品 | 人工智能头条(公众号ID:AI_Thinker) 【AI科技大本营导读】P
用户1737318
2018/06/05
1.7K0
手撸机器学习算法 - 线性回归
如果说感知机是最最最简单的分类算法,那么线性回归就是最最最简单的回归算法,所以这一篇我们就一起来快活的用两种姿势手撸线性回归吧;
HoLoong
2021/06/17
1.2K0
手撸机器学习算法 - 线性回归
神经网络python实现
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details/81158209
bear_fish
2018/09/14
6260
神经网络python实现
使用Pytorch实现Kmeans聚类
Kmeans是一种简单易用的聚类算法,是少有的会出现在深度学习项目中的传统算法,比如人脸搜索项目、物体检测项目(yolov3中用到了Kmeans进行anchors聚类)等。
带萝卜
2020/10/26
4.4K0
使用Pytorch实现Kmeans聚类
python实现线性回归之弹性网回归
恰好为岭回归罚函数和Lasso罚函数的一个凸线性组合.当α=0时,弹性网回归即为岭回归;当 α=1时,弹性网回归即为Lasso回归.因此,弹性网回归兼有Lasso回归和岭回归的优点,既能达到变量选择的目的,又具有很好的群组效应。
西西嘛呦
2020/08/26
1.8K0
python实现线性回归之弹性网回归
Python机器学习(1)-- 自己设计一个感知机(Perceptron)分类算法
红色石头
2017/12/28
2.1K0
Python机器学习(1)-- 自己设计一个感知机(Perceptron)分类算法
神经网络-感知器(二):Python代码实现
之前介绍过神经网络中单层感知器的原理,不清楚的小伙伴可点击?神经网络-感知器进行回顾,本次来通过一个简单的小例子进行感知器的代码实现。 1 训练问题 题目:有正样本(3,3)(4,3),和负样本(1
三猫
2020/08/18
1.1K0
python实现线性回归之岭回归
上述式子中w为长度为n的向量,不包括偏置项的系数 θ0,θ是长度为n+1的向量,包括偏置项系数θ0;m为样本数,n为特征数。
西西嘛呦
2020/08/26
1.7K0
python实现线性回归之岭回归
python实现线性回归之lasso回归
Lasso回归于岭回归非常相似,它们的差别在于使用了不同的正则化项。最终都实现了约束参数从而防止过拟合的效果。但是Lasso之所以重要,还有另一个原因是:Lasso能够将一些作用比较小的特征的参数训练为0,从而获得稀疏解。也就是说用这种方法,在训练模型的过程中实现了降维(特征筛选)的目的。
西西嘛呦
2020/08/26
3.7K0
python实现线性回归之lasso回归
9种神经网络优化算法详解
在深度学习中,有一个“损失loss”的概念,它告诉我们:模型在训练数据中表现的“多差”。
皮大大
2025/02/07
6120
LDA有标签数据降维
之前无标签数据降维PCA,那么像下图带有标签数据,如果用PCA降维将会投影到v轴上,这个投影方差最大,数据将变成不可分状态,LDA将把数据投影加上已有分类这个变量,将数据投影到u轴上 假设原数据分成n
用户1733462
2018/06/01
1.1K0
基于卷积神经网络的手写数字识别系统_python 卷积神经网络
前面讲解了使用纯numpy实现数值微分和误差反向传播法的手写数字识别,这两种网络都是使用全连接层的结构。全连接层存在什么问题呢?那就是数据的形状被“忽视”了。比如,输入数据是图像时,图像通常是高、长、通道方向上的3维形状。但是,向全连接层输入时,需要将3维数据拉平为1维数据。实际上,前面提到的使用了MNIST数据集的例子中,输入图像就是1通道、高28像素、长28像素的(1, 28, 28)形状,但却被排成1列,以784个数据的形式输入到最开始的Affine层。 图像是3维形状,这个形状中应该含有重要的空间信息。比如空间上邻近的像素为相似的值、RBG的各个通道之间分别有密切的关联性、相距较远的像素之间没有什么关联等,3维形状中可能隐藏有值得提取的本质模式。但是,因为全连接层会忽视形状,将全部的输入数据作为相同的神经元(同一维度的神经元)处理,所以无法利用与形状相关的信息。而卷积层可以保持形状不变。当输入数据是图像时,卷积层会以3维数据的形式接收输入数据,并同样以3维数据的形式输出至下一层。因此,在CNN中,可以(有可能)正确理解图像等具有形状的数据。 在全连接神经网络中,除了权重参数,还存在偏置。CNN中,滤波器的参数就对应之前的权重,并且,CNN中也存在偏置。
全栈程序员站长
2022/10/05
7290
基于卷积神经网络的手写数字识别系统_python 卷积神经网络
python实现多层感知机
多层感知机(MLP,Multilayer Perceptron)也叫人工神经网络(ANN,Artificial Neural Network),除了输入输出层,它中间可以有多个隐层,最简单的MLP只含一个隐层,即三层的结构,如下图:
西西嘛呦
2020/08/26
2.5K0
python实现多层感知机
神经网络-BP神经网络
BP神经网络是一种通过误差反向传播算法进行误差校正的多层前馈神经网络,其最核心的特点就是:信号是前向传播,而误差是反向传播。前向传播过程中,输入信号经由输入层、隐藏层逐层处理,到输出层时,如果结果未到达期望要求,则进入反向传播过程,将误差信号原路返回,修改各层权重。
三猫
2021/03/04
1.8K0
RBF神经网络实验原理_神经网络多元拟合
径向基函数(Radial Basis Function, RBF)神经网络是一种单隐含层的三层前馈神经网络,网络结构如下图所示
全栈程序员站长
2022/11/16
1.3K0
RBF神经网络实验原理_神经网络多元拟合
python实现Lasso回归
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/133562.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/27
3840
python实现Lasso回归
基于Python3 神经网络的实现
摘要总结:本篇文章主要介绍了如何使用神经网络进行二分类问题,并针对不同的隐藏层大小进行了实验和分析。结果表明,较小的隐藏层大小可以更好地捕捉数据的趋势,但过小的隐藏层大小可能导致过拟合,而较大的隐藏层大小则可能导致欠拟合。因此,选择适当的隐藏层大小非常重要,需要根据具体问题进行分析和实验。
王小雷
2018/01/02
9660
基于Python3 神经网络的实现
快速入门Python机器学习(35)
这个转换器的输入应该是一个类似整数或字符串的数组,表示由分类(离散)特征获取的值。这些特征使用one-hot(也称为'one-of-K'或'dummy')编码方案进行编码。这将为每个类别创建一个二进制列,并返回稀疏矩阵或密集数组(取决于稀疏参数)
顾翔
2022/09/23
6280
快速入门Python机器学习(35)
相关推荐
深度学习(5)——RBF算法简介
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档