最近读了几篇论文都用到了径向基函数拟合(RBF Fitting),感觉功能很强大,因此学习一下。

一、径向基函数

径向基函数跟高斯分布的概率密度函数类似,因此也叫高斯核函数,一般定义为:
φ(x)=e−(x−c)22σ2(1)\varphi(x)=e^{-\frac{(x-c)^2}{2\sigma^2}} \tag1φ(x)=e−2σ2(x−c)2​(1)
对于给定的σ\sigmaσ, 径向基函数的取值仅仅跟 xxx 离中心点ccc的距离相关,当c=0c=0c=0时,图像如下所示:

二、径向基函数拟合

给定二维平面上的点集:P={(x1,y1),(x2,y2),...(xn,yn)}P =\{(x_1,y_1),(x_2,y_2),...(x_n,y_n)\}P={(x1​,y1​),(x2​,y2​),...(xn​,yn​)}, 我们期望拟合一个函数:
f(x)=∑i=1nwiφ(∣∣x−xi∣∣)(2)f(x) = \sum^n_{i=1}w_i\varphi(||x-x_i||)\tag2f(x)=i=1∑n​wi​φ(∣∣x−xi​∣∣)(2)
也就是说,针对PPP中每一个点(xi,yi)(x_i,y_i)(xi​,yi​),构造一个以xix_ixi​为中心的径向基函数。给定任意横坐标 xxx, 其 yyy 值可以通过上式预测.

那么,如何计算这里的插值权重wiw_iwi​呢?

针对拟合任务,首先要保证拟合的值跟真实值尽可能接近。因此,针对任意点 Pj(xj,yj)P_j(x_j,y_j)Pj​(xj​,yj​), 我们期望完美拟合:

f(xj)=∑i=1nwiφ(∣∣xj−xi∣∣)=yjf(x_j) = \sum^n_{i=1}w_i\varphi(||x_j-x_i||)=y_jf(xj​)=i=1∑n​wi​φ(∣∣xj​−xi​∣∣)=yj​
将PPP中所有点代入公式(2), 并进一步写成矩阵乘法的形式:
[φ11φ12...φ1nφ21φ22...φ2n....φn1φn2...φnn][w1w2.wn]=[y1y2.yn](3)\begin{bmatrix} \varphi_{11} & \varphi_{12}&... & \varphi_{1n}\\ \varphi_{21} & \varphi_{22}&... & \varphi_{2n}\\ . & .& . & .\\ \varphi_{n1} & \varphi_{n2}&... & \varphi_{nn} \end{bmatrix} \begin{bmatrix} w_1 \\ w_2 \\ . \\ w_n \end{bmatrix}= \begin{bmatrix} y_1 \\ y_2 \\ . \\ y_n \end{bmatrix}\tag3 ⎣⎡​φ11​φ21​.φn1​​φ12​φ22​.φn2​​..........​φ1n​φ2n​.φnn​​⎦⎤​⎣⎡​w1​w2​.wn​​⎦⎤​=⎣⎡​y1​y2​.yn​​⎦⎤​(3)
其中,φij=φ(∣∣xj−xi∣∣)=φji\varphi_{ij} = \varphi(||x_j-x_i||)=\varphi_{ji}φij​=φ(∣∣xj​−xi​∣∣)=φji​. 为此,权重参数可直接求解:
[w1w2.wn]=[φ11φ12...φ1nφ21φ22...φ2n....φn1φn2...φnn]−1[y1y2.yn](4)\begin{bmatrix} w_1 \\ w_2 \\ . \\ w_n \end{bmatrix}= \begin{bmatrix} \varphi_{11} & \varphi_{12}&... & \varphi_{1n}\\ \varphi_{21} & \varphi_{22}&... & \varphi_{2n}\\ . & .& . & .\\ \varphi_{n1} & \varphi_{n2}&... & \varphi_{nn} \end{bmatrix}^{-1} \begin{bmatrix} y_1 \\ y_2 \\ . \\ y_n \end{bmatrix}\tag4 ⎣⎡​w1​w2​.wn​​⎦⎤​=⎣⎡​φ11​φ21​.φn1​​φ12​φ22​.φn2​​..........​φ1n​φ2n​.φnn​​⎦⎤​−1⎣⎡​y1​y2​.yn​​⎦⎤​(4)

三、实际案例

给定函数:
y=−x2+sin(3x)+20cos(2x)y = -x^2+sin(3x)+20cos(2x)y=−x2+sin(3x)+20cos(2x)
函数图像大致如下:

下面的圆圈是我们的均匀采样的20个顶点,我们期望通过这些采样点拟合出该函数。

拟合的结果如下所示,可以看出基本恢复了原始函数。

代码 (参考并修改:https://blog.csdn.net/xfijun/article/details/105670892):

import numpy as np
import matplotlib.pyplot as plt# y = -x^2 + sin(3x)+20cos(2x)
def f(x):return -x*x + np.sin(3*x) + 20*np.cos(2*x)# y = e^(-(x-xc)^2/2)
def gaussian(x,xc):return np.exp(-(x-xc)**2/(2*(1**2)))# get w from y' = \sum w_i\phi |x'-xc|
def calculate_weights(x_sample,y_sample):num = len(y_sample)int_matrix = np.asmatrix(np.zeros((num,num)))for i in range(num):int_matrix[i,:] = gaussian(x_sample, x_sample[i])w = int_matrix.I * np.asmatrix(y_sample).T      return w# y' = \sum w_i\phi |x'-xc|
def calculate_rbf_value(w,x_sample,x):num = len(x)y_= np.zeros(num)for i in range(num):for k in range(len(w)):y_[i] = y_[i] + w[k]*gaussian(x[i],x_sample[k])return y_def draw_kernels(x_samples,w):for i in range(len(x_samples)):x = x_samples[i]x_ = np.linspace(x-2,x+2,100)y_ = []for a in x_:y_.append(w[i]*gaussian(a,x))y_ = np.array(y_).reshape(100,-1)plt.plot(x_,y_,'m:')if __name__ == '__main__':sample_cnt = 20x_start, x_end = -8, 8x = np.linspace(x_start,x_end,500)y = f(x)x_sample = np.linspace(x_start,x_end,sample_cnt)y_sample = f(x_sample)w = calculate_weights(x_sample,y_sample)y_fit = calculate_rbf_value(w,x_sample,x)plt.figure(1)plt.plot(x,y_fit,'k')plt.plot(x,y,'r:')plt.ylabel('y')plt.xlabel('x')draw_kernels(x_sample,w)for i in range(len(x_sample)):plt.plot(x_sample[i],y_sample[i],'go',markerfacecolor='none')plt.legend(labels=['fitted','original','sample'],loc='lower left')plt.title('kernel interpolation:$y=sin(\pi x/2)+cos(\pi x/3)$')       plt.show()

下图绘制了这20个带权高斯核函数(径向基函数) wiφ(∣∣xj−xi∣∣)w_i\varphi(||x_j-x_i||)wi​φ(∣∣xj​−xi​∣∣)的图像,需要注意这里的权值可正可负且∑wi≠1\sum w_i \neq 1∑wi​=1. 这跟高斯混合模型,广义重心坐标插值(MVC)等插值方式的显著区别。

y=−x2y = -x^2y=−x2 的拟合结果:

y=xy = xy=x 的拟合结果:

为什么拟合能力这么强呢?其实从某种角度可以认为是高斯混合模型吧.

参考博客:https://blog.csdn.net/xfijun/article/details/105670892

径向基函数拟合(RBF Fitting)相关推荐

  1. 径向基函数(RBF)神经网络

    Data Mining 径向基函数(RBF)神经网络 RBF网络能够逼近任意的非线性函数,可以处理系统内的难以解析的规律性,具有良好的泛化能力,并有很快的学习收敛速度,已成功应用于非线性函数逼近.时间 ...

  2. matlab rbf函数_基于径向基函数(RBF)的无网格伪谱法与程序实现(2)——微分矩阵...

    参考资料 Gregory E. Fasshauer. Meshfree Approximation Methods with MATLAB. P.387 P401 数值实现 Matlab 2019a ...

  3. 径向基函数(RBF Radial Basis Function)神经网络

    径向基函数(RBF Radial Basis Function)神经网络是由J.Moody和C.Darken在20世纪80年代末提出的一种神经网络,它是具有单隐层的三层前馈网络.由于它模拟了人脑中局部 ...

  4. 【深度学习入门系列】径向基函数(RBF)神经网络原理介绍及pytorch实现(内含分类、回归任务实例)

    文章目录 1 RBF神经网络 1.1 简介 1.2 步骤 输入 rbf层 核函数 中心点求解方法 输出 1.3 几个问题 2 分类 2.0 数据集 2.1 网络架构 2.2 代码 2.3 结果 3 回 ...

  5. 径向基函数及RBF网络

    径向基函数 (RBF) 是多变量插值方法. 径向基函数的取值仅仅依赖于离原点距离的实值函数,Φ(x) = Φ(|x|),或者还可以是到任意一点c的距离,c点称为中心点,Φ(x,c) = Φ(|x-c| ...

  6. 机器学习——径向基函数(RBF)神经网络

    目录 一.什么是基函数 二.什么是径向基函数 三.为什么RBF神经网络使用一个径向基函数作为隐含层的激活函数 四.参数训练 五.RBF网络 vs BP网络和 SVM 一.什么是基函数 著名的傅里叶变换 ...

  7. python自带rbf函数吗_径向基函数(RBF)神经网络

    RBF网络能够逼近任意的非线性函数,可以处理系统内的难以解析的规律性,具有良好的泛化能力,并有很快的学习收敛速度,已成功应用于非线性函数逼近.时间序列分析.数据分类.模式识别.信息处理.图像处理.系统 ...

  8. 径向基函数(RBF)

    径向基函数是某种沿径向对称的标量函数,通常定义为样本到数据中心之间径向距离(通常是欧氏距离)的单调函数(由于距离是径向同性的). 理解RBF网络的工作原理可从两种不同的观点出发: (1)当用RBF网络 ...

  9. 径向基函数(RBF)插值

    RBF函数插值 径向基函数(Radial Basis Function, RBF)插值的基本形式为 F(r)=∑i=1Nwiφ(∥r−ri∥)F(\boldsymbol{r})=\sum_{i=1}^ ...

最新文章

  1. win10系统mongodDB安装过程
  2. C语言游戏传递小秘密,C语言的那些小秘密之链表
  3. Navicat15安装笔记
  4. 区块链开发公司 注重用户的价值才是企业归宿
  5. 一篇搞懂MySQL 8.0 Clone技术在线搭建主从复制全过程
  6. django css,Django表单中的CSS样式
  7. java spring多数据源配置文件_深入理解spring多数据源配置
  8. python执行不了elif_浅谈对python中if、elif、else的误解
  9. Servlet 2.4 规范之第四篇:Servlet上下文
  10. RedisTemplate 数据结构 使用方法
  11. 【钉钉杯大学生大数据挑战赛】初赛 A:银行卡电信诈骗危险预测 Baseline
  12. 纵向数据中抑郁检测与预测的深度多任务学习
  13. Java中实现十进制数转换为二进制
  14. 用plink ssh打开wireshark 连接openwrt tcpdump获取抓包数据
  15. 服务器自动管理系统之连接服务器的方式
  16. Linux网卡流量监控工具
  17. 为什么选择软件测试? 作为测试人员,你有什么优点?
  18. 图片文字修改用什么软件?3个简单实用软件推荐
  19. 黑客帝国代码雨JS,支持中文
  20. 【开发工具】【JTAG】JTAG基础【一】

热门文章

  1. 收敛域、收敛区间与收敛半径
  2. 根据SNP的位置从基因组提取上下游序列
  3. UEFI标准应用程序模块--SMBIOS的读写
  4. java里面add报错,java错误
  5. Linux环境搭建基础(二)
  6. 弥散张量成像之DTI简介
  7. MYSQL 从PS说起,但不止于PS , IS 中innodb buffer 分析(5) -- 附加招聘DEVOPS DBA
  8. Paypal 实现自动订阅
  9. Linux 安装qq农场小游戏
  10. 地图对接汇总(百度地图)