GSL中的线性最小二乘拟合
线性最小二乘拟合
本章描述使用线性组合函数对实验数据进行最小二乘拟合的例程。数据可以是加权的,也可以是未加权的,即带有已知的或未知的错误。对于加权数据,函数计算最佳拟合参数及其相关的协方差矩阵。对于未加权数据,由点的离散度估计协方差矩阵,给出一个方差-协方差矩阵。
这些函数分为简单单参数或双参数回归和多参数拟合的版本。
40.1 概述
最小二乘拟合是,通过χ2 (卡方分布)的最小化得出的,卡方分布是模型Y (c, x)的n个实验数据(xi, yi)的残差平方的加权和。
模型的p参数为c = {c0, c1,…}。加权因子wi由wi = 1/σi2给出,其中σi为数据点yi上的实验误差。假设误差为高斯分布且不相关。。对于未加权数据,卡方和的计算没有任何权重因子。
拟合程序返回最佳拟合参数c及其p×p协方差矩阵。协方差矩阵度量由数据上的误差引起的最佳拟合参数上的统计误差σi,定义为
协方差矩阵由数据误差σi通过误差传播计算得到。给出了由数据δyi 的微小变化引起的拟合参数δca 的变化,
当计算协方差矩阵为无权重数据时,即数据与未知错误,和里面的权重因子wi 使用的是单一估计w = 1 /σ2,其中σ2是最佳模型计算残差的方差, 。这被称为方差-协方差矩阵。
最佳拟合参数的标准差由协方差矩阵对应对角元素σca =Caa 的平方根给出。拟合参数ca和cb的相关系数为
40.2 线性回归
本节中的函数用于拟合简单的一或两个参数线性回归模型。这些函数声明在头文件gsl_fit.h中。
本节描述的函数可用于对直线模型Y (c, x) = c0 + c1x执行最小二乘拟合。
int gsl_fit_linear(const double * x, const size_t xstride, const double * y,
const size_t ystride, size_t n, double * c0, double * c1,
double * cov00, double * cov01, double * cov11, double * sumsq)
int gsl_fit_wlinear(const double * x, const size_t xstride, const double * w,
const size_t wstride, const double * y, const size_t ystride,
size_t n, double * c0, double * c1, double * cov00,
double * cov01, double * cov11, double * chisq)
参数(c0, c1)的协方差矩阵使用权重计算,并通过参数(cov00, cov01, cov11)返回。最佳拟合直线的残差的加权平方和χ2 以chisq返回。
int gsl_fit_linear_est(double x, double c0, double c1, double cov00, double cov01,
double cov11, double * y, double * y_err)
本函数使用最佳拟合线性回归系数c0、c1及其协方差cov00、cov01、cov11计算模型Y = c0 + c1X在x点处的拟合函数y及其标准差y_err。
本节描述的函数可用于对没有常数项Y = c1X的直线模型执行最小二乘拟合。
int gsl_fit_mul(const double * x, const size_t xstride, const double * y,
const size_t ystride, size_t n, double * c1, double * cov11,
int gsl_fit_wmul(const double * x, const size_t xstride, const double * w,
const size_t wstride, const double * y, const size_t ystride,
size_t n, double * c1, double * cov11, double * sumsq)
使用权重计算参数c1的方差,并通过参数cov11返回。最佳拟合直线的残差的加权平方和χ2 以chisq返回。
int gsl_fit_mul_est(double x, double c1, double cov11, double * y, double * y_err)
本函数使用最佳拟合线性回归系数c1及其协方差cov11计算模型Y = c1X在x点处的拟合函数y及其标准差y_err。
40.3 多参数回归
本节描述通过最小化成本函数来执行最小二乘拟合线性模型的例程,
其中,y是n个观测值的向量,X是n乘p的预测变量矩阵,c是p个待估计的未知最佳拟合参数的向量,。矩阵W=diag(w1,w2,...,wn)定义了观测向量的权重或不确定性。
通过适当地准备n乘p矩阵X,这个公式可以用于适合任何数量的函数和(或)变量。例如,要拟合x的一个p阶多项式,使用下面的矩阵,
拟合一组固定频率的p正弦函数ω1, ω2, . . ., ωp,使用,
一般线性最小二乘系统的解需要为中间结果提供额外的工作空间,例如矩阵X的奇异值分解。
gsl_multifit_linear_workspace * gsl_multifit_linear_alloc(const size_t n,
本函数分配了一个工作空间,用于拟合一个模型,最大n个观测值,使用最大p个参数。如果需要,用户可以稍后提供一个更小的最小二乘系统。工作空间的大小为O(np + p2)。
void gsl_multifit_linear_free(gsl_multifit_linear_workspace * work)
int gsl_multifit_linear_svd(const gsl_matrix * X,
gsl_multifit_linear_workspace * work)
本函数对矩阵X进行奇异值分解,并在work内部存储SVD因子。
int gsl_multifit_linear_bsvd(const gsl_matrix * X,
gsl_multifit_linear_workspace * work)
本函数对矩阵X进行奇异值分解,并在work内部存储SVD因子。首先利用列比例因子对矩阵X进行平衡,以提高奇异值的精度。
int gsl_multifit_linear(const gsl_matrix * X, const gsl_vector * y, gsl_vector * c,
gsl_matrix * cov, double * chisq,
gsl_multifit_linear_workspace * work)
采用改进的Golub-Reinsch SVD算法对矩阵X进行奇异值分解,获得最佳拟合,并进行列缩放,提高奇异值的精度。任何奇异值为零(机器精度)的部件在拟合中被丢弃。
int gsl_multifit_linear_tsvd(const gsl_matrix * X, const gsl_vector * y,
const double tol, gsl_vector * c, gsl_matrix * cov,
double * chisq, size_t * rank,
gsl_multifit_linear_workspace * work)
int gsl_multifit_wlinear(const gsl_matrix * X, const gsl_vector * w,
const gsl_vector * y, gsl_vector * c, gsl_matrix * cov,
double * chisq, gsl_multifit_linear_workspace * work)
int gsl_multifit_wlinear_tsvd(const gsl_matrix * X, const gsl_vector * w,
const gsl_vector * y, const double tol, gsl_vector * c,
gsl_matrix * cov, double * chisq, size_t * rank,
gsl_multifit_linear_workspace * work)
int gsl_multifit_linear_est(const gsl_vector * x, const gsl_vector * c,
const gsl_matrix * cov, double * y, double * y_err)
本函数使用最佳拟合多元线性回归系数c及其协方差矩阵cov计算模型y = x.c在x点处的拟合函数值y及其标准差y_err。
int gsl_multifit_linear_residuals(const gsl_matrix * X, const gsl_vector * y,
const gsl_vector * c, gsl_vector * r)
本函数用观测值y、系数c和预测变量X的矩阵,计算残差向量r = y−Xc。
size_t gsl_multifit_linear_rank(const double tol,
const gsl_multifit_linear_workspace * work)
本函数返回矩阵X的秩,它必须首先计算其奇异值分解。秩是通过计算满足σj> tol×σ0的奇异值σj的个数来计算的,其中σ0为最大奇异值。
GSL中的线性最小二乘拟合相关推荐
- GSL中的非线性最小二乘拟合
非线性最小二乘拟合 本章描述多维非线性最小二乘拟合的函数.求解非线性最小二乘问题一般有两类算法,即行搜索法和信赖域法.GSL目前只实现信赖域法,并为用户提供对迭代中间步骤的完全访问.用户还能够调优一些 ...
- 使用GSL库实现非线性最小二乘拟合—原理与C代码实现(VS2019)
目录 一.参考 二.非线性最小二乘 三.GSL库中非线性最小二乘拟合部分 1. gsl_multifit_nlinear_parameters结构体 2. gsl_multifit_nlinear_t ...
- 最小二乘拟合,L1、L2正则化约束--转
原文地址:http://blog.csdn.net/u013164528/article/details/45042895 最小二乘法(又称最小平方法)是一种数学优化技术.它通过最小化误差的平方和寻找 ...
- 曲线拟合——最小二乘拟合(附代码)
曲线拟合--最小二乘拟合(附代码) 曲线拟合 1 一元函数的最小二乘拟合 1.1 线性回归(直线的最小二乘拟合) 1.1.1 直线的最佳拟合方法 1.1.2 如何计算 1.1.3 误差量化分析 1.2 ...
- Matlab最小二乘法:线性最小二乘、加权线性最小二乘、稳健最小二乘、非线性最小二乘与剔除异常值效果比较
最近我们被客户要求撰写关于最小二乘法的研究报告,包括一些图形和统计输出.matlab软件在拟合数据时使用最小二乘法.拟合需要一个参数模型,该模型将因变量数据与具有一个或多个系数的预测数据相关联.拟合过 ...
- MATLAB最小二乘拟合
最小二乘拟合 线性最小二乘拟合 非线性最小二乘法 线性最小二乘拟合 1.polyfit 例:a= polyfit(x0,y0,m) 其中,输入参数x0,y0为要拟合的数据,m为拟合多项式的次数(一般不 ...
- python非线性最小二乘拟合_非线性函数的最小二乘拟合——兼论Jupyter notebook中使用公式 [原创]...
突然有个想法,利用机器学习的基本方法--线性回归方法,来学习一阶rc电路的阶跃响应,从而得到rc电路的结构特征--时间常数τ(即r*c).回答无疑是肯定的,但问题是怎样通过最小二乘法.正规方程,以更多 ...
- 使用tensorflow实现机器学习中的线性拟合
使用tensorflow实现机器学习中的线性拟合 这个例子是模拟的单变量线性回归,通过提高单变量的阶数来增加特征数量,例如:4阶相当于分解为四个特征 这种思想同样适用于多变量线性回归 import t ...
- python画抛物线_在python中利用最小二乘拟合二次抛物线函数的方法
1.最小二乘也可以拟合二次函数 我们都知道用最小二乘拟合线性函数没有问题,那么能不能拟合二次函数甚至更高次的函数呢?答案当然是可以的.下面我们就来试试用最小二乘来拟合抛物线形状的的图像. 对于二次函数 ...
最新文章
- 一次性动态绑定多个droplistdown
- 2.异步回调检测线程结束
- en结尾的单词_以en结尾的英语单词
- .NET 6 使用 Obfuscar 进行代码混淆
- The Water Bowls POJ - 3185(开关问题+暴力)
- 关于Pac-Man,你所要了解的 一切
- python如何在exel中编程_如何使用Python以编程方式将行添加到现有Excel表中
- 动态数据的国际化、几种主要的国际化标签
- hexo需要先编辑好html文件吗,教你定制Hexo的landscape打造自己的主题_html/css_WEB-ITnose...
- 10种电脑无法启动故障
- debain服务器系统用什么,建站服务器系统用CentOS还是Debian 适合自己才好
- tcl c语言笔试题,TCL 2019校园招聘备战-求职应聘指南(笔试真题面试经验).pdf
- 数学乐 --- 对数函数(指数函数的反函数)
- Oplayer HDiPad最实用的视频播放器
- Codeforces Round #548 (Div. 2) 1139 D+2021天梯赛l3-3 解题报告(负二项式分布+莫比乌斯容斥+杜教筛(天梯赛))
- 快手开店怎么引流?快手小店自上线以来就吸引众多的商家入驻
- Android 点击换头像(拍照和从相册选择)
- 在StarRocks中建立ClickHouseJDBC外表
- Metaq原理与应用
- 相片打印机原理_喷墨打印机工作原理 喷墨打印机优缺点介绍【详解】