簡體   English   中英

如何在 Python 中計算平方和?

[英]How to calculate sums of squares in Python?

首先,公式TSS = ESS + RSS總是正確的嗎? 即使是指數模型? 如果是這樣,我只是不明白我錯在哪里。

我有 2 個 x 和 y 值數組,其中 y 取決於 x。

x = np.array([1.5, 2.1, 2.4, 2.7, 3.2, 3.4, 3.6, 3.7, 4.0, 4.5, 5.1, 5.6])
y = np.array([0.6, 1.2, 1.3, 1.4, 1.45, 1.5, 1.6, 1.8, 1.9, 1.95, 2.1, 2.2])

我有一個函數可以確定系數 a 和 b 並返回一個線性回歸方程(如果需要,也可以只返回 a 和 b)

def Linear(x, y, getAB = False):
    AVG_X = np.average(x)
    AVG_Y = np.average(y)
    DISP_X = np.var(x)
    DISP_Y = np.var(y)
    STD_X = np.std(x)
    STD_Y = np.std(y)

    AVG_prod = np.average(x*y)
    cov = AVG_prod - (AVG_X*AVG_Y)

    b = cov/DISP_X
    a = AVG_Y - b*AVG_X

    if getAB:
        return a, b

    return lambda X: a + b*X

我有一個確定系數 a 和 b 並返回指數回歸方程的函數

def Exponential(x, y, getAB = False):
    LOG_Y_array = [math.log(value) for value in y]

    A, B = Linear(x, LOG_Y_array, getAB = True)

    a = math.exp(A)
    b = math.exp(B)

    if getAB:
        return a, b

    return lambda X: a * (b**X)

我創建了基於指數模型的計算 y 值數組

Exponential_Prediction = Exponential(x, y)
Exponential_Prediction_y = [Exponential_Prediction(value) for value in x]

最后,這就是我計算 TSS、ESS 和 RSS 的方式

TSS = np.sum((y - np.average(y))**2)
ESS_Exp = np.sum((Exponential_Prediction_y - np.average(y))**2)
RSS_Exp = np.sum((y-Exponential_Prediction_y)**2)

這一切都非常清楚,除了這個的輸出

print(str(TSS) + " = " + str(ESS_Exp) + " + " + str(RSS_Exp))

是 2.18166666667 = 2.75523753042 + 0.432362713806

我不明白 ESS 怎么可能超過 TSS

當您使用線性回歸時,您會遺漏一個為零的項,因為您不是,您必須添加它。 在文斯評論的鏈接中,您可以看到 TSS = ESS + RSS + 2*sum((y - yhat)*(yhat - ybar))。

您需要包含該額外術語才能將其加起來:

extra_term = 2 * np.sum((y - Exponential_Prediction_y) * (Exponential_Prediction_y - y.mean())) 
print(str(TSS) + " = " + str(ESS_Exp) + " + " + str(RSS_Exp) + " + " + str(extra_term))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM