# RBF神经网络及Python实现（附源码）

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

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()  ```

0 条评论

• ### 机器学习(7)之感知机python实现

关键字全网搜索最新排名 【机器学习算法】：排名第一 【机器学习】：排名第二 【Python】：排名第三 【算法】：排名第四 感知器PLA是一种最简单，最基本的线...

• ### 实战 | 用Python放一场浪漫的烟花秀！

https://jizhi.im/blog/post/py_make_fireworks

• ### 手把手教你用Python实现“坦克大战”，附详细代码！

今天，我们使用Python以及强大的第三方库来实现一个简单的坦克大战游戏。【文中代码点击阅读原文下载，可直接运行】

• ### vn.py源码解读（三、事件驱动引擎代码分析）

先抛开一切，我们来想一想，如果自己要写一个事件驱动引擎会怎么写？之前也说过，所谓的事情驱动就是你要监听一些事件，当某些事件发生的时候，要分配相对...

• ### 解决强化学习反馈稀疏问题之HER方法原理及代码实现

本文将介绍一种修改目标，使有效回报数量变多的方法。该方法称简称HER (paper地址)：https://arxiv.org/abs/1707.01495v1。

• ### 强化学习反馈稀疏问题-HindSight Experience Replay原理及实现！

在强化学习中，反馈稀疏是一个比较常见同时令人头疼的问题。因为我们大部分情况下都无法得到有效的反馈，模型难以得到有效的学习。为了解决反馈稀疏的问题，一种常用的做法...

• ### 使用关键点进行小目标检测

【GiantPandaCV导语】本文是笔者出于兴趣搞了一个小的库，主要是用于定位红外小目标。由于其具有尺度很小的特点，所以可以尝试用点的方式代表其位置。本文主要...

• ### 项目笔记 LUNA16-DeepLung：（二）肺结节检测

在前面进行了肺结节数据的预处理之后，接下来开始进入肺结节检测环节。首先附上该项目的Github链接：https://github.com/Minerva-J/D...

• ### DWIntrosPage 简单定制引导页

下面摘取部分代码 DWIntrosPageContentViewController