elsiwaveQI 2023-03-29 11:27 采纳率: 64%
浏览 171
已结题

需要加权最小二乘Python代码

遇到问题现象描述
我利用五元一次方程(拟合一个曲线)正演了一组数据,这组数据拟合曲线非常好,然后利用目标曲线数据基于最小二乘法求解超定方程的解(5个未知数),求解结果与答案误差太大,我仔细检查了求解过程,方程系数矩阵等都没有问题,其它也没有找到错误原因。

问题相关代码片、运行结果、报错内容


x1,x2,x3,x4,x5 = np.linalg.lstsq(a,b,rcond=None)[0]

x3_err = 100*abs(x3_pre -x3_true)/abs(x3_true)

运行结果: x3_err = 400%
a是系数矩阵,b是正演的数据

我的初步解决思路
我想使用加权最小二乘重新求解,以后再实际应用中也要使用加权最小二乘算法,请求各位提供一个加权最小二乘的python代码(求解超定线性问题的解)。

操作环境、软件版本等相关信息
使用的python3.10版本

  • 写回答

9条回答 默认 最新

  • 小逸2023 2023-03-29 11:35
    关注
    该回答引用ChatGPT
    加权最小二乘法是一种常用的线性回归方法,它可以通过给每个数据点赋予不同的权重,来更好地拟合数据。下面是一个简单的加权最小二乘Python代码示例,可以用于求解超定线性问题的解:
    python
    import numpy as np
    # 定义加权最小二乘函数
    def weighted_least_squares(A, b, w):
    # 计算加权系数矩阵
    W = np.diag(np.sqrt(w))
    # 构造加权系数矩阵
    A_tilde = np.dot(W, A)
    b_tilde = np.dot(W, b)
    # 求解加权最小二乘问题
    x = np.linalg.lstsq(A_tilde, b_tilde, rcond=None)[0]
    # 返回解
    return x
    # 示例数据
    A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]])
    b = np.array([1, 2, 3, 4, 5])
    w = np.array([1, 2, 3, 4, 5])
    # 调用加权最小二乘函数
    x = weighted_least_squares(A, b, w)
    # 输出结果
    print(x)

    在上面的代码中,我们首先定义了一个加权最小二乘函数`weighted_least_squares`,它接受三个参数:系数矩阵`A`、数据向量`b`和权重向量`w`。在函数内部,我们首先计算了加权系数矩阵`W`,然后构造了加权系数矩阵`A_tilde`和数据向量`b_tilde`,最后调用`np.linalg.lstsq`函数求解加权最小二乘问题,并返回解`x`。
    在示例数据中,我们构造了一个5x3的系数矩阵`A`,一个长度为5的数据向量`b`和一个长度为5的权重向量`w`。我们调用`weighted_least_squares`函数求解加权最小二乘问题,并输出结果。
    你可以将上面的代码应用到你的问题中,将正演数据的权重作为参数传递给`weighted_least_squares`函数,重新求解超定线性问题的解。
    评论

报告相同问题?

问题事件

  • 系统已结题 4月6日
  • 创建了问题 3月29日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表