最小平方法程式

最小平方法(Least Squares Method)是一種數學最佳化技術,用於找到數據點最佳擬合的一條直線(對於線性回歸)或一個方程(對於多元線性回歸)。最小平方法的目標是找到係數,使得因變數的觀測值和預測值之間的誤差平方和最小。

在Python中,我們可以使用NumPy和Scipy庫來實現最小平方法。以下是一個簡單的例子,展示了如何使用NumPy的linalg.lstsq函式來找到線性回歸方程的係數。

import numpy as np

# 假設我們有一組數據點(x, y),我們想要找到最佳擬合的直線 y = ax + b
# x和y是numpy數組
x = np.array([1, 2, 3, 4, 5])  # 假設的x值
y = np.array([2, 4, 3, 5, 6])  # 假設的y值

# 使用numpy的lstsq函式來找到係數a和b
a, b = np.linalg.lstsq(x, y, rcond=1e-5)[0]  # rcond參數用於設定條件數閾值

# 現在我們可以使用a和b來預測y值
predicted_y = a * x + b

# 我們可以計算誤差平方和(RSS)
rss = np.sum((y - predicted_y)**2)

# 列印結果
print("a =", a)
print("b =", b)
print("RSS =", rss)

在這個例子中,linalg.lstsq函式返回一個包含係數向量的數組,我們可以從中提取出ab。然後我們計算了誤差平方和(RSS)來評估擬合的質量。

對於多元線性回歸,我們可以使用相同的函式,但是我們需要將自變數(x)和因變數(y)作為矩陣輸入。自變數矩陣X應該是n行(樣本數)乘以p列(特徵數),因變數y應該是n行。然後,linalg.lstsq函式將返回一個包含係數向量的數組。

import numpy as np
from sklearn.linear_model import LinearRegression

# 假設我們有一組數據點(x, y),我們想要找到最佳擬合的多元線性回歸方程
# 數據集是隨機生成的,以演示多元線性回歸
np.random.seed(0)
n_samples, n_features = 100, 5
X = np.random.randn(n_samples, n_features)
y = np.matmul(X, np.array([1.0, 1.5, 2.0, 2.5, 3.0])) + np.random.randn(n_samples, 1)

# 使用sklearn的LinearRegression類來找到係數
regressor = LinearRegression()
regressor.fit(X, y)

# 列印結果
print("Coefficients:", regressor.coef_)
print("Intercept:", regressor.intercept_)

在這個例子中,我們使用了scikit-learn的LinearRegression類,它內部使用了最小二乘法來找到最佳擬合的多元線性回歸方程的係數。