直线拟合中的最小二乘

曲线中最常用的是直线拟合,面对y=kx+b


这里主要是讲一下如何通过一下点去拟合直线,拟合的条件是使得目标函数在某一个最佳参数条件下达到最小的数值。同时这个问题也有两面性:现有的点来找出来点的规律,利用找到的规律来做预测。

1,我们获得点集。(Xi,Yi) i表示集合中的第i个点。
2,建立目标函数 :
两个Y 分别是观测数值和估计数值。
两个beta就是上我们需要估计出来的K和b.
3.在目标函数中参数是K和b,我们分别对K和b,求偏导数,来求极值点
简单推导可得:


4,最后用代码实现即可。

### 使用最小二乘法对点云数据进行直线拟合 #### 算法简介 最小二乘法是一种常用的参数估计方法,在点云数据处理中用于找到一条能够最好地表示这些离散点分布趋势的直线。对于二维情况下的点云数据,可以通过计算质心以及协方差矩阵的第一特征向量来获得最优拟合直线的方向[^1]。 #### 算法实现 为了实现这一目标,可以按照如下方式编写Python代码: ```python import numpy as np def fit_line_least_squares(points): """ 对给定的2D点集应用最小二乘法进行直线拟合 参数: points (list of tuples): [(x1, y1), (x2, y2)...], 表示一系列坐标点 返回: tuple: ((xc, yc), theta),其中(xc,yc)为中心点位置,theta为角度方向 """ # 将输入转换成NumPy数组以便后续操作更加方便高效 data = np.array(points) # 计算所有点坐标的平均值作为中心点的位置 centroid = np.mean(data, axis=0) # 构建协方差矩阵并求解其最大特征值对应的单位特征向量v=[vx vy]^T, # 这个向量就代表了所要找寻的最佳拟合直线的方向。 cov_matrix = np.cov((data - centroid).T) eigenvalues, eigenvectors = np.linalg.eig(cov_matrix) max_eigenvalue_index = np.argmax(eigenvalues) direction_vector = eigenvectors[:,max_eigenvalue_index] angle = np.arctan2(direction_vector[1], direction_vector[0]) return (centroid, angle) if __name__ == "__main__": test_points = [ (-1,-1), (+0,+0), (+1,+1), (+2,+2), (+3,+3)] center_point, line_angle = fit_line_least_squares(test_points) print(f"Center Point={center_point}, Line Angle(rad)={line_angle}") ``` 上述程序定义了一个`fit_line_least_squares()`函数接收一组二维平面上的点,并返回描述最佳拟合直线的信息——即该直线通过的数据集中间位置(`centroid`)及其相对于X轴正半轴的角度(`angle`). 此外还提供了一组测试用例以验证此功能的有效性[^2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值