当前位置: 首页 > news >正文

【机器学习笔记Ⅰ】 8 多元梯度下降法

多元线性回归的梯度下降法详解

多元线性回归(Multiple Linear Regression)是多个自变量(特征)与一个因变量(目标)之间的线性关系建模,梯度下降法用于优化模型参数(权重和偏置),最小化预测误差(如均方误差)。


1. 模型定义

(1) 假设函数(Hypothesis)

对于 ( n ) 个特征 ( x_1, x_2, \dots, x_n ) 和参数 ( w_1, w_2, \dots, w_n, b ),预测值 ( \hat{y} ) 为:
在这里插入图片描述

(2) 代价函数(Cost Function)

使用**均方误差(MSE)**衡量预测值与真实值的差距:
在这里插入图片描述


2. 梯度下降法

(1) 参数更新公式

对每个参数 ( w_j ) 和偏置 ( b ),沿梯度反方向更新:
在这里插入图片描述
在这里插入图片描述


3. 算法步骤

  1. 初始化参数

    • 权重 ( \mathbf{w} ) 和偏置 ( b ) 初始化为0或随机小值。
  2. 迭代更新

    • 计算当前参数下的预测值 ( \hat{y} )。
    • 计算梯度 ( \nabla_{\mathbf{w}} J ) 和 ( \frac{\partial J}{\partial b} )。
    • 更新参数:
      在这里插入图片描述
  3. 终止条件

    • 达到最大迭代次数,或梯度变化小于阈值。

4. 代码实现(Python)

import numpy as npdef gradient_descent(X, y, learning_rate=0.01, epochs=1000):m, n = X.shape  # m:样本数, n:特征数w = np.zeros(n)  # 初始化权重b = 0            # 初始化偏置history = []     # 记录损失变化for epoch in range(epochs):# 计算预测值y_pred = np.dot(X, w) + b# 计算梯度dw = (1/m) * np.dot(X.T, (y_pred - y))  # X.T是X的转置db = (1/m) * np.sum(y_pred - y)# 更新参数w -= learning_rate * dwb -= learning_rate * db# 记录损失(可选)loss = np.mean((y_pred - y)**2)history.append(loss)return w, b, history# 示例数据(添加偏置列)
X = np.array([[1, 2], [2, 3], [3, 4]])  # 2个特征
y = np.array([5, 8, 11])                 # y = 1*x1 + 2*x2 + 0# 运行梯度下降
w, b, history = gradient_descent(X, y, learning_rate=0.01, epochs=1000)
print("权重 w:", w)  # 应接近 [1., 2.]
print("偏置 b:", b)  # 应接近 0.

5. 关键细节

(1) 特征缩放(Feature Scaling)

  • 如果特征量纲差异大(如 ( x_1 \in [0,1] ), ( x_2 \in [100,1000] )),需先归一化:
    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    X_scaled = scaler.fit_transform(X)
    
  • 原因:梯度下降在不同方向上的步长一致,量纲不均会导致收敛缓慢。

(2) 学习率选择

  • 太大(如 ( \alpha=1 )):可能发散(损失震荡上升)。
  • 太小(如 ( \alpha=10^{-6} )):收敛过慢。
  • 建议:尝试 ( \alpha=0.01, 0.001 ),观察损失曲线调整。

(3) 收敛判断

  • 监控损失函数 ( J(\mathbf{w}, b) ) 的变化,若连续几轮下降幅度小于阈值(如 ( 10^{-6} )),可提前终止。

6. 与解析解对比

  • 梯度下降:迭代逼近最优解,适合大规模数据(( m > 10^4 ))。
  • 解析解(正规方程):直接求闭式解 ( \mathbf{w} = (\mathbf{X}^T \mathbf{X})^{-1} \mathbf{X}^T \mathbf{y} ),但计算复杂度高(( O(n^3) )),仅适用于小规模数据。

7. 总结


|

核心公式

梯度下降是机器学习优化的基石,理解它才能掌握更复杂的模型(如逻辑回归、神经网络)!


http://www.dtcms.com/a/268448.html

相关文章:

  • mysql的JDBC和连接池
  • 单片机总复习
  • 升级AGP(Android Gradle plugin)和gradle的版本可以提高kapt的执行速度吗
  • CentOS-6与CentOS-7的网络配置IP设置方式对比 笔记250706
  • RSTP 拓扑收敛机制
  • 【人工智能】AI Agent 技术与应用场景解析
  • 【机器学习笔记Ⅰ】9 特征缩放
  • 零基础 “入坑” Java--- 八、类和对象(一)
  • 【HarmonyOS】鸿蒙6 CodeGenie AI辅助编程工具详解
  • Vue2 重写了数组的 7 个变更方法(原理)
  • PanoSAM:使用 Meta Segment Anything 模型对全景图像中的点云数据进行无监督分割
  • 模型训练、部署遇到的问题
  • 鼓式制动器的设计+(说明书和CAD【6张】 - 副本➕降重
  • jenkins安装
  • contain:paint和overflow:hidden的区别
  • C++高频知识点(二)
  • 9. 【Vue实战--孢子记账--Web 版开发】-- 账户账本管理(二)
  • 2025.7.6总结
  • android 获取手机配对的蓝牙耳机的电量
  • Flutter 项目开启 UI 层级虚线(UI Guides)
  • 【C++】string类(二)相关接口介绍及其使用
  • 植物大战僵尸杂交重制版1.0,经典焕新,重燃策略塔防之火
  • Altium Designer使用入门(非精通)教程 第三章(PCB绘制)
  • 前端开发深度剖析:核心痛点、隐藏陷阱与系统解决方案
  • 【MySQL进阶】MySQL架构
  • 【HarmonyOS】鸿蒙应用开发Text控件常见错误
  • AI+Web3:从自动化工具到自主经济体的范式革命
  • 爬虫-协议基础
  • 1865.找出和为指定值得下标对
  • Java笔记-下