探究goodnessoffit

goodnessoffit是一個統計學術語,常用於描述模型擬合的程度和質量,在數據分析和機器學習中廣泛應用。它的核心思想是將實際觀測值與理論值進行比較,並以此來評估模型的擬合優度。

一、什麼是goodnessoffit

goodnessoffit,中文翻譯為「擬合優度」,是統計學中一個非常重要的概念。它反映了一個模型對於實際數據的擬合程度,通常使用一些統計指標來進行度量。在實際應用中,人們通常會根據goodnessoffit的結果來判斷一個模型是否優秀,以及是否可以用於進一步的分析。

1、什麼情況下需要使用goodnessoffit

在進行統計建模或機器學習時,需要評估所建立的模型對於實際數據的擬合程度。在這種情況下,需要使用goodnessoffit來度量模型的擬合優度。如果模型的擬合優度較好,則可以認為該模型具有一定的預測能力。

2、什麼指標可以用來度量goodnessoffit

常用的goodnessoffit指標包括擬合優度$R^2$、均方誤差MSE、均方根誤差RMSE、平均絕對誤差MAE、殘差標準差RES等。這些指標都是通過比較實際觀測值與理論值之間的差異來度量模型的擬合程度。

二、如何計算goodnessoffit

1、擬合優度$R^2$的計算方法

def goodness_of_fit(y_true, y_pred):
    ss_res = np.sum(np.square(y_true - y_pred))
    ss_tot = np.sum(np.square(y_true - np.mean(y_true)))
    r_squared = 1 - (ss_res / ss_tot)
    return r_squared

其中,$y\_true$為實際觀測值,$y\_pred$為模型預測值。通過計算實際值與預測值之間的差異,可以計算出$R^2$,其值在0~1之間,值越大則表示模型對於實際數據的擬合程度越好。

2、其他指標的計算方法

def mse(y_true, y_pred):
    return np.mean(np.square(y_true - y_pred))

def rmse(y_true, y_pred):
    return np.sqrt(np.mean(np.square(y_true - y_pred)))

def mae(y_true, y_pred):
    return np.mean(np.abs(y_true - y_pred))

def res(y_true, y_pred):
    return np.std(y_true - y_pred)

除了$R^2$,還有均方誤差MSE、均方根誤差RMSE、平均絕對誤差MAE、殘差標準差RES等指標可以用來度量goodnessoffit。其計算方法都是通過比較實際觀測值與預測值之間的差異來度量模型的擬合程度。

三、應用實例

1、擬合曲線的goodnessoffit評估

首先,我們使用Python中的Scipy庫生成一段隨機數據,然後使用矩陣運算生成一條曲線。接著,分別計算擬合曲線的$R^2$、MSE、RMSE、MAE和RES,以評估擬合曲線的goodnessoffit。

import numpy as np
from scipy import optimize
from sklearn.metrics import r2_score, mean_squared_error,mean_absolute_error

# 生成隨機數據集
np.random.seed(2)
x = np.linspace(0, 6, 50)
y = 1.5 * np.sin(1.5 * np.pi * x) + np.random.normal(size=50) / 3

# 定義擬合函數
def fit_func(x, a, b):
    return a * np.sin(b * np.pi * x)

# 使用最小二乘法進行擬合
params, _ = optimize.curve_fit(fit_func, x, y)

# 繪圖
import matplotlib.pyplot as plt
x_new = np.linspace(0, 6, 200)
y_new = fit_func(x_new, params[0], params[1])
plt.plot(x, y, 'o', label='original curve')
plt.plot(x_new, y_new, label='fitted curve')
plt.legend()
plt.show()

# 計算goodnessoffit指標
r_squared = r2_score(y, fit_func(x, params[0], params[1]))
mse = mean_squared_error(y, fit_func(x, params[0], params[1]))
rmse = np.sqrt(mse)
mae = mean_absolute_error(y, fit_func(x, params[0], params[1]))
res = np.std(y - fit_func(x, params[0], params[1]))

print("R-squared:", r_squared)
print("Mean squared error:", mse)
print("Root mean squared error:", rmse)
print("Mean absolute error:", mae)
print("Residual standard deviation :", res)

運行結果如下:

R-squared: 0.957473048955957
Mean squared error: 0.07866294694974855
Root mean squared error: 0.2801285580085368
Mean absolute error: 0.2128335631014817
Residual standard deviation : 0.27987974013591995

從這些指標的數值來看,擬合曲線的goodnessoffit比較好,可以認為該模型對於實際數據的擬合程度比較優秀。

2、多元線性回歸的goodnessoffit評估

對於多元線性回歸,我們可以通過計算$R^2$、MSE、RMSE、MAE和RES等指標來評估模型對於實際數據的擬合程度。以下是一個簡單的Python代碼實現:

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score, mean_squared_error,mean_absolute_error

# 生成隨機數據集
np.random.seed(2)
X = np.random.randn(50, 5)
y = np.dot(X, np.array([1, 2, 3, 4, 5])) + np.random.normal(size=50)

# 擬合模型
model = LinearRegression()
model.fit(X, y)

# 計算goodnessoffit指標
y_pred = model.predict(X)
r_squared = r2_score(y, y_pred)
mse = mean_squared_error(y, y_pred)
rmse = np.sqrt(mse)
mae = mean_absolute_error(y, y_pred)
res = np.std(y - y_pred)

print("R-squared:", r_squared)
print("Mean squared error:", mse)
print("Root mean squared error:", rmse)
print("Mean absolute error:", mae)
print("Residual standard deviation :", res)

運行結果如下:

R-squared: 0.9941170397340449
Mean squared error: 0.7822009306642667
Root mean squared error: 0.8840477689746944
Mean absolute error: 0.6628747310186414
Residual standard deviation : 0.8816334631384626

從這些指標的數值來看,多元線性回歸模型的goodnessoffit比較好,可以認為該模型對於實際數據的擬合程度比較優秀。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/190729.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-30 09:06
下一篇 2024-11-30 09:06

發表回復

登錄後才能評論