【问题标题】:Gradient Descent to solve for Empirical Equation with 2 knowns and 2 unkowns梯度下降求解具有 2 个未知数和 2 个未知数的经验方程
【发布时间】:2021-08-06 02:14:28
【问题描述】:

我有以下经验方程(工程):

Y = A + (X  - B) * (0.3026506 * (A/B))^0.3895556 * (0.2444663 * (A/B))^1.226 + 0.00000560643 * A^(0.00125 * B + 0.3026)

我不知道 A 和 B 的值(但知道在一些物理边界之间存在)并且以表格格式给出了 Y 和 X 的值:

X Y
35 179.92
40 181.46
50 184.53
60 187.61
70 190.69
90 196.84
100 199.92
110 203
120 206.08
130 209.16
140 212.23
150 215.31

我的目标是调整 AB 的值,以使 RHS 上的方程具有与 Y 相似的值表中给出了方程中给出的所有常数。我的假设之一是使用梯度下降进行多元回归。我想我应该把 Y 作为我的成本函数,但是如果我不知道 A 和 B 应该有什么样的值,我该如何创建梯度下降图?可能需要其他方法吗?基本上,它是一个有两个已知和两个未知的方程。

提前致谢

【问题讨论】:

    标签: python python-3.x regression gradient-descent


    【解决方案1】:

    在python中你可以这样做:

    def error(par, X, Y):
        A = par[0]
        B = par[1]
        V = A + (X  - B) * (0.3026506 * (A/B))**0.3895556 * (0.2444663 * (A/B))**1.226 + 0.00000560643 * A**(0.00125 * B + 0.3026)
        return ((Y-V)**2).sum()
    
    from scipy.optimize import minimize
    
    
    X = [ 35,  40,  50,  60,  70,  90, 100, 110, 120, 130, 140, 150]
    Y = [179.92, 181.46, 184.53, 187.61, 190.69, 196.84, 199.92, 203.  ,
           206.08, 209.16, 212.23, 215.31]
    
    minimize(error, [1,2], (X, Y))['x']
    array([202.39468192, 108.03429635])
    

    【讨论】:

    • 感谢您的帮助;) 在误差函数中,我们定义了 Y 和等式右侧之间的 R 平方误差,对吗?另外,在 scipy.optimize 库中使用了什么样的算法?我去了函数网站,但是有几种算法,不知道你选择了哪一种
    • @Beginn_noo 你可以使用任何定义的方法。我没有选择方法,因此您可以决定要使用哪种方法。例如,只需包含参数method='BFGS'。请注意,如果未给出,则选择为 BFGS、L-BFGS-B、SLSQP 之一,具体取决于问题是否有约束或界限。
    【解决方案2】:

    这是使用线性回归的另一种方法。

    那么这不再是回归问题,而是求解两个未知 A 和 B 的两个方程组的问题。

    问题被简化为只需要求解一个非线性方程来求解 B。

    使用 Newton-Raphson 方法,结果为 B=108.0343

    A=1.873431*108.0343=202.3947

    请注意,非线性方程是准线性的(第二项可以忽略不计 = 0.0000573)。因此,如果您接受稍低的准确度,则更简单地使用 B=169.14586/1.565669=108.03424,这非常接近 Newton-Raphson 结果。

    这意味着您可以使用更简单的等式获得 A 和 B 的非常接近的近似值:Y = A +(X-B) * 0.1116231 * (A/B)^1.6155556

    【讨论】:

    • 非常感谢您的全面回复,但为什么等式是线性的?我认为这是双变量非线性方程的情况,因为我有两个未知数,并且系数上方有几个不同的指数。再次感谢您的回复
    • 好的。你说的对。我说的是函数 $Y(X)$ 的线性度。当然,对于要优化的参数,该函数不是线性的。所以,我的句子很混乱。为了避免更多讨论,我删除了有问题的部分,这不会改变答案的主要部分。
    • 我明白了,非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2022-06-10
    • 2023-02-03
    • 1970-01-01
    • 2011-09-21
    相关资源
    最近更新 更多