多元線性回歸算法梯度下降法python

VPZW8 數碼 3

本文將介紹如何使用多元線性回歸算法梯度下降法實現python程序,具體包括:數據集的準備、模型訓練、預測結果展示等。

多元線性回歸算法梯度下降法需要大量的數據來訓練模型。在開始之前,我們需要準備數據集,該數據集應該包括兩個或以上的自變量和一個因變量,分別存儲在X和y數組中。下面是一個簡單的例子。

import numpy as np

# 準備數據集
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
y = np.array([7, 18, 29, 40])

數據集準備完畢後,我們就可以開始訓練模型了。多元線性回歸算法梯度下降法的主要目標是最小化成本函數(cost function)。因此,我們需要定義一個成本函數來評估模型。

成本函數(或損失函數)是一個度量模型預測值與真實值之間差異的函數。我們使用平均誤差平方和(mean squared error)作為我們的成本函數。下面是我們的成本函數:

def compute_cost(X, y, theta):
    """
    Compute the cost function for linear regression.
    """
    # 統計樣本數量
    m = y.shape[0] 
    # 計算預測結果
    predictions = X.dot(theta)
    # 計算誤差
    error = predictions - y
    # 計算平方誤差和
    cost = np.sum(np.square(error)) / (2 * m)

    return cost

在擁有成本函數之後,我們就可以開始訓練模型了。我們需要尋找最佳參數(即θ1、θ2、…、θn),使得成本函數的值最小。這個任務通常使用梯度下降法來完成。

梯度下降法是一種迭代優化算法,它通過反覆迭代調整模型參數來最小化成本函數。在每一次迭代中,我們都會計算成本函數的梯度,然後按照梯度的方向調整參數。根據梯度下降法的更新規則,每個參數θj的更新公式如下:

theta[j] = theta[j] - alpha * (1/m) * np.sum(error * X[:, j])

其中,α代表學習率,決定了每一步更新的步長。過大的α可能導致算法發散,而過小的α可能導致算法收斂速度慢。

完整的訓練過程如下:

def gradient_descent(X, y, theta, alpha, num_iters):
    """
    Gradient descent algorithm to learn theta.
    """
    # 統計樣本數量
    m = y.shape[0]  
    # 每次迭代更新參數
    for i in range(num_iters):
        # 計算預測結果
        predictions = X.dot(theta)
        # 計算誤差
        error = predictions - y
        # 更新參數
        for j in range(theta.shape[0]):
            theta[j] = theta[j] - alpha * (1/m) * np.sum(error * X[:, j])

    return theta

# 定義模型參數
theta = np.zeros(X.shape[1])
# 定義學習率和迭代次數
alpha = 0.01
num_iters = 1000

# 訓練模型
theta = gradient_descent(X, y, theta, alpha, num_iters)

模型訓練完成後,我們可以進行預測了。下面是一個簡單的預測例子:

# 進行預測
X_new = np.array([13,14,15])
y_pred = X_new.dot(theta)
print(y_pred)

在實際應用中,我們通常會使用測試集來評估模型的性能。下面是一個簡單的測試例子:

# 定義測試集
X_test = np.array([[1,2,3],[4,5,6]])
y_test = np.array([7,18])

# 計算測試誤差
test_error = compute_cost(X_test, y_test, theta)

本文介紹了使用多元線性回歸算法梯度下降法實現python程序的過程。我們在準備數據集、定義成本函數、訓練模型、預測結果等方面作了詳細的闡述。希望對讀者有所幫助。

回復

共1條回復 我來回復
  • 暫無回復內容