多元線性回歸演算法梯度下降法python
數碼 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程序的過程。我們在準備數據集、定義成本函數、訓練模型、預測結果等方面作了詳細的闡述。希望對讀者有所幫助。