径向基函数拟合(RBF Fitting)
最近读了几篇论文都用到了径向基函数拟合(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∑nwiφ(∣∣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∑nwiφ(∣∣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⎦⎤⎣⎡w1w2.wn⎦⎤=⎣⎡y1y2.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 ⎣⎡w1w2.wn⎦⎤=⎣⎡φ11φ21.φn1φ12φ22.φn2..........φ1nφ2n.φnn⎦⎤−1⎣⎡y1y2.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)相关推荐
- 径向基函数(RBF)神经网络
Data Mining 径向基函数(RBF)神经网络 RBF网络能够逼近任意的非线性函数,可以处理系统内的难以解析的规律性,具有良好的泛化能力,并有很快的学习收敛速度,已成功应用于非线性函数逼近.时间 ...
- matlab rbf函数_基于径向基函数(RBF)的无网格伪谱法与程序实现(2)——微分矩阵...
参考资料 Gregory E. Fasshauer. Meshfree Approximation Methods with MATLAB. P.387 P401 数值实现 Matlab 2019a ...
- 径向基函数(RBF Radial Basis Function)神经网络
径向基函数(RBF Radial Basis Function)神经网络是由J.Moody和C.Darken在20世纪80年代末提出的一种神经网络,它是具有单隐层的三层前馈网络.由于它模拟了人脑中局部 ...
- 【深度学习入门系列】径向基函数(RBF)神经网络原理介绍及pytorch实现(内含分类、回归任务实例)
文章目录 1 RBF神经网络 1.1 简介 1.2 步骤 输入 rbf层 核函数 中心点求解方法 输出 1.3 几个问题 2 分类 2.0 数据集 2.1 网络架构 2.2 代码 2.3 结果 3 回 ...
- 径向基函数及RBF网络
径向基函数 (RBF) 是多变量插值方法. 径向基函数的取值仅仅依赖于离原点距离的实值函数,Φ(x) = Φ(|x|),或者还可以是到任意一点c的距离,c点称为中心点,Φ(x,c) = Φ(|x-c| ...
- 机器学习——径向基函数(RBF)神经网络
目录 一.什么是基函数 二.什么是径向基函数 三.为什么RBF神经网络使用一个径向基函数作为隐含层的激活函数 四.参数训练 五.RBF网络 vs BP网络和 SVM 一.什么是基函数 著名的傅里叶变换 ...
- python自带rbf函数吗_径向基函数(RBF)神经网络
RBF网络能够逼近任意的非线性函数,可以处理系统内的难以解析的规律性,具有良好的泛化能力,并有很快的学习收敛速度,已成功应用于非线性函数逼近.时间序列分析.数据分类.模式识别.信息处理.图像处理.系统 ...
- 径向基函数(RBF)
径向基函数是某种沿径向对称的标量函数,通常定义为样本到数据中心之间径向距离(通常是欧氏距离)的单调函数(由于距离是径向同性的). 理解RBF网络的工作原理可从两种不同的观点出发: (1)当用RBF网络 ...
- 径向基函数(RBF)插值
RBF函数插值 径向基函数(Radial Basis Function, RBF)插值的基本形式为 F(r)=∑i=1Nwiφ(∥r−ri∥)F(\boldsymbol{r})=\sum_{i=1}^ ...
最新文章
- win10系统mongodDB安装过程
- C语言游戏传递小秘密,C语言的那些小秘密之链表
- Navicat15安装笔记
- 区块链开发公司 注重用户的价值才是企业归宿
- 一篇搞懂MySQL 8.0 Clone技术在线搭建主从复制全过程
- django css,Django表单中的CSS样式
- java spring多数据源配置文件_深入理解spring多数据源配置
- python执行不了elif_浅谈对python中if、elif、else的误解
- Servlet 2.4 规范之第四篇:Servlet上下文
- RedisTemplate 数据结构 使用方法
- 【钉钉杯大学生大数据挑战赛】初赛 A:银行卡电信诈骗危险预测 Baseline
- 纵向数据中抑郁检测与预测的深度多任务学习
- Java中实现十进制数转换为二进制
- 用plink ssh打开wireshark 连接openwrt tcpdump获取抓包数据
- 服务器自动管理系统之连接服务器的方式
- Linux网卡流量监控工具
- 为什么选择软件测试? 作为测试人员,你有什么优点?
- 图片文字修改用什么软件?3个简单实用软件推荐
- 黑客帝国代码雨JS,支持中文
- 【开发工具】【JTAG】JTAG基础【一】