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

【漫话机器学习系列】061.线性回归参数计算(Finding Linear Regression Parameters)

线性回归参数计算(Finding Linear Regression Parameters)

1. 简介

线性回归是一种基础的回归模型,用于通过一个或多个特征预测目标变量。其模型形式为:

其中:

  • y:目标变量(因变量)。
  • X:特征矩阵(自变量)。
  • β:待求解的回归参数(权重)。
  • ϵ:误差项。

线性回归的目标是找到回归参数 β,使预测值 Xβ 与目标 y 的差距最小。


2. 参数求解公式

通过最小化残差平方和(RSS,Residual Sum of Squares)来确定最佳参数。RSS 定义为:

展开后:

2.1 最小化 RSS 的闭式解

对 RSS 关于 β 求导并令其为 0:

解得:

2.2 特殊情况

  • 不可逆(如特征之间高度相关),可以使用伪逆 () 计算参数:


3. 梯度下降法

如果特征数量较大或数据量较多,使用梯度下降法是一种更高效的选择。

  1. 目标函数

    其中 m 是样本数量。

  2. 梯度计算

  3. 更新规则

    其中:

    • α:学习率。

4. 示例代码

4.1 使用闭式解求解参数

import numpy as np

# 示例数据
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])  # 特征矩阵
y = np.array([1, 2, 2, 3])  # 目标变量

# 添加截距项
X = np.hstack([np.ones((X.shape[0], 1)), X])

# 计算参数
beta = np.linalg.inv(X.T @ X) @ X.T @ y
print("闭式解计算的参数:", beta)

运行结果 

闭式解计算的参数: [0. 0. 1.]

 

4.2 使用梯度下降法求解参数

import numpy as np

# 示例数据
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])  # 特征矩阵
y = np.array([1, 2, 2, 3])  # 目标变量

# 初始化参数
beta = np.zeros(X.shape[1])
learning_rate = 0.01
epochs = 1000

# 梯度下降
for epoch in range(epochs):
    gradient = -1 / len(y) * X.T @ (y - X @ beta)
    beta -= learning_rate * gradient

print("梯度下降计算的参数:", beta)

 运行结果

梯度下降计算的参数: [0.17636561 0.86974083]

 


5. 参数解释

    • 截距项,表示当所有特征值为 0 时的预测值。
    • 每个特征的系数,表示该特征对目标变量的线性影响。值越大,影响越显著。

6. 优化方法

  1. 正则化

    • 为了避免过拟合,可加入正则化项:
      • 岭回归(L2正则化):
      • Lasso回归(L1正则化):
  2. 标准化

    • 特征标准化(零均值和单位方差)可提升求解效率。

7. 总结

线性回归参数的求解有两种主要方法:

  1. 闭式解:适用于中小规模数据,但计算复杂度较高。
  2. 梯度下降:适用于大规模数据,通过迭代优化找到参数。

线性回归是回归分析中的基础方法,为其他复杂模型(如岭回归、Lasso回归和广义线性模型)提供了理论基础。

 


http://www.kler.cn/a/520784.html

相关文章:

  • HTML-新浪新闻-实现标题-排版
  • 消息队列篇--通信协议篇--MQTT(通配式主题,消息服务质量Qos,EMQX的Broker,MqttClient示例,MQTT报文等)
  • Ansible自动化运维实战--script、unarchive和shell模块(6/8)
  • 【25美赛A题-F题全题目解析】2025年美国大学生数学建模竞赛(MCM/ICM)解题思路|完整代码论文集合
  • Qt监控系统辅屏预览/可以同时打开4个屏幕预览/支持5x64通道预览/onvif和rtsp接入/性能好
  • Redis实战(黑马点评)——涉及session、redis存储验证码,双拦截器处理请求
  • 智能交互革命:论UI-TARS技术突破与未来图景
  • AI刷题-最小化团建熟悉程度和
  • 【java数据结构】HashMapOJ练习题
  • vim的多文件操作
  • 【Rust自学】15.1. 使用Box<T>智能指针来指向堆内存上的数据
  • docker入门——多用户服务器管理(小白)
  • 实战网络安全:渗透测试与防御指南
  • 汽车行业敏捷转型的推动者:ScrumCN的优势与实践
  • GESP2024年3月认证C++六级( 第三部分编程题(1)游戏)
  • 【ES实战】治理项之索引模板相关治理
  • React 前端框架实战教程
  • skynet 源码阅读 -- 「揭秘 Skynet 网络通讯」
  • C语言I/O请使用互斥锁和信号量分别实现5个线程之间的同步
  • java求职学习day17
  • 1.26学习
  • 2025年01月26日Github流行趋势
  • Python3 【正则表达式】:经典示例参考手册
  • 寒假1.25
  • 第04章 15 vtkObjectBase和vtkObject的基本特性及它们在VTK类体系中基础性作用
  • 动手学图神经网络(4):利用图神经网络进行图分类