基于梯度下降的多元线性回归原理

为了展示多元线性回归的迭代过程,我们可以使用梯度下降算法手动实现多元线性回归。梯度下降是一种迭代优化算法,用于最小化损失函数。

我们将以下步骤进行手动实现:

  1. 初始化回归系数。
  2. 计算预测值和损失函数。
  3. 计算梯度。
  4. 更新回归系数。
  5. 重复步骤2-4,直到损失函数收敛或达到最大迭代次数。

以下是用Python代码实现梯度下降算法进行多元线性回归的过程:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 生成样本数据
np.random.seed(0)
X1 = np.random.rand(100) * 10
X2 = np.random.rand(100) * 10
y = 5 + 2 * X1 - 1 * X2 + np.random.randn(100) * 2

# 创建DataFrame
data = pd.DataFrame({'X1': X1, 'X2': X2, 'y': y})

# 特征矩阵和目标变量
X = data[['X1', 'X2']]
X = np.c_[np.ones(X.shape[0]), X]  # 添加一列1表示截距项
y = data['y'].values

# 初始化回归系数
theta = np.random.randn(3)

# 超参数
learning_rate = 0.01
max_iter = 1000
tolerance = 1e-6

# 梯度下降
for i in range(max_iter):
    # 计算预测值
    y_pred = X.dot(theta)
    
    # 计算损失函数(均方误差)
    loss = np.mean((y_pred - y) ** 2)
    
    # 计算梯度
    gradient = 2 * X.T.dot(y_pred - y) / y.size
    
    # 更新回归系数
    new_theta = theta - learning_rate * gradient
    
    # 判断是否收敛
    if np.max(np.abs(new_theta - theta)) < tolerance:
        print(f"在第{i+1}次迭代后收敛")
        break
    
    theta = new_theta

# 输出结果
print(f"回归系数: {theta}")
print(f"损失函数: {loss}")

# 评价模型
y_pred = X.dot(theta)
mse = np.mean((y_pred - y) ** 2)
r2 = 1 - (np.sum((y - y_pred) ** 2) / np.sum((y - np.mean(y)) ** 2))

print(f"均方误差: {mse}")
print(f"R^2 值: {r2}")

# 绘制真实值与预测值的比较
plt.scatter(y, y_pred)
plt.xlabel('真实值')
plt.ylabel('预测值')
plt.title('真实值 vs 预测值')
plt.plot([y.min(), y.max()], [y.min(), y.max()], color='red') # 画一条对角线
plt.show()

在这个代码中,我们手动实现了多元线性回归的梯度下降过程:

  1. 初始化回归系数 theta
  2. 计算预测值 y_pred
  3. 计算损失函数(均方误差)。
  4. 计算梯度。
  5. 根据梯度更新回归系数 theta
  6. 检查收敛条件,达到收敛条件或最大迭代次数时停止迭代。

通过这种方法,我们能够清楚地看到迭代的过程以及每次迭代中回归系数的更新。

让我们详细解释一下梯度的计算公式。

在多元线性回归中,我们的目标是最小化损失函数,通常是均方误差(Mean Squared Error, MSE),它定义为:

在这里插入图片描述

为了最小化这个损失函数,我们使用梯度下降法。梯度下降法的核心是计算损失函数关于回归系数的梯度,然后沿着梯度的负方向更新回归系数。

梯度计算

在这里插入图片描述

这里乘以2是因为我们在计算均方误差时没有将常数1/2包含在内,所以在梯度计算中需要额外乘以2。

更新回归系数

在这里插入图片描述

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值