最小二乘法例子

最小二乘法是一種數學最佳化技術,用於找到數據集的最佳函式擬合。它通過最小化函式的平方誤差來找到最佳的函式參數。下面是一個簡單的例子,展示了如何使用最小二乘法來擬合一條直線到一些數據點。

假設我們有一組數據點,我們想要找到一條直線,使得所有數據點到這條直線的距離和最小。我們可以用以下步驟來找到這條直線:

  1. 定義模型:我們假設直線可以用方程 y = mx + b 來表示,其中 m 是斜率,b 是截距。

  2. 定義誤差:對於每個數據點 (x_i, y_i),我們計算它與直線模型的誤差。誤差可以用 (y_i - mx_i - b)^2 來表示。

  3. 最小化誤差:我們想要找到最佳的斜率 m 和截距 b,使得所有數據點的誤差和最小。這可以通過最小化誤差函式來完成。

  4. 使用梯度下降或矩陣求逆等方法來找到最佳的 m 和 b。

下面是一個簡單的Python代碼示例,使用numpy庫來擬合一條直線到一些數據點:

import numpy as np

# 假設我們有一些數據點
x_data = [1, 2, 3, 4, 5]  # 假設x_data是我們的數據點
y_data = [2, 4, 3, 5, 7]  # 假設y_data是我們的數據點

# 定義模型
def linear_model(x, m, b):
    return m * x + b

# 計算最佳的斜率和截距
def least_squares(x_data, y_data):
    X = np.array([x_data, np.ones(len(x_data))]).T
    Y = np.array(y_data)

    # 使用numpy的linalg.lstsq函式來找到最佳的m和b
    m, b = np.linalg.lstsq(X, Y, rcond=None)[0]
    return m, b

# 計算最佳的斜率和截距
m, b = least_squares(x_data, y_data)

# 列印最佳的直線方程
print("最佳直線方程為 y = {}x + {}".format(m, b))

這個代碼示例使用了numpy的linalg.lstsq函式來找到最佳的斜率和截距。linalg.lstsq函式執行了最小二乘法的計算,並返回最佳的參數。

請注意,這個例子是一個簡單的線性回歸的例子。最小二乘法也可以用於更複雜的模型,如多元線性回歸、二次回歸等。