【问题标题】:How to best use Numpy/Scipy to find optimal common coefficients for a set different linear equations?如何最好地使用 Numpy/Scipy 为一组不同的线性方程找到最佳公共系数?
【发布时间】:2019-12-18 03:00:18
【问题描述】:

我有 n(大约 500 万)组特定的 (k,m,v,z)* 参数来描述一些线性关系。我想找到最佳的正 a、b 和 c 系数,使它们的绝对值相加最小化,如下所示:

我事先知道每个 a、b 和 c 的范围,所以我可以用它来加快速度。但是,我不知道如何正确实施这个问题以最好地利用 Numpy(或 Scipy/等)。

我正在考虑使用不同的 a、b 和 c 系数(基于一个步骤)迭代地进行检查,并最终保持能够提供最小总和的组合。但在 Numpy 中正确实现这一点是另一回事。

* (k,m,v 要么是 0 要么是正数,实际上是 k,m,v,i,j,p) (z也可以是负数)

欢迎任何提示!

【问题讨论】:

    标签: numpy scipy numpy-ndarray scipy-optimize


    【解决方案1】:

    要么我遗漏了什么,要么a == b == c == 0 是最佳选择。因此,一般不存在(a,b,c) 的积极解决方案。您可以通过将最小化问题作为0(k, m, v) 上的分位数回归来明确验证这一点,并将分位数设置为0.5

    import numpy as np
    from statsmodels.regression.quantile_regression import QuantReg
    
    x = np.random.rand(1000, 3)
    a, b, c = QuantReg(np.zeros(x.shape[0]), x).fit(0.5).params
    
    assert np.allclose([a, b, c], 0)
    

    【讨论】:

    • 是的,你是对的,我过于简单化了。我更改了描述,添加了作为残差的 Z 值(没有附加系数),可以是正数也可以是负数。
    • 在这种情况下,QuantReg(residuals, x).fit(0.5).params 应该可以工作,其中x=(k,m,c)。可能有更快的方法专门用于最小绝对差异回归,这听起来像你想要的。
    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 2015-05-19
    相关资源
    最近更新 更多