多元线性回归算法梯度下降法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程序的过程。我们在准备数据集、定义成本函数、训练模型、预测结果等方面作了详细的阐述。希望对读者有所帮助。