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

news/2025/1/31 15:00:01/

线性回归参数计算(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 * gradientprint("梯度下降计算的参数:", beta)

 运行结果

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

 


5. 参数解释

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

6. 优化方法

  1. 正则化

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

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

7. 总结

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

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

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

 


http://www.ppmy.cn/news/1568177.html

相关文章

tcp/ip协议通俗理解,tcpip协议通俗理解

TCP/IP协议(Transmission Control Protocol/Internet Protocol)的通俗理解可以从以下几个方面入手: 1. 互联网的语言 想象一下,全球有无数台电脑、手机、服务器等设备连接在一起,形成了一个庞大的网络,我…

HTML DOM 对象

HTML DOM 对象 引言 HTML DOM(文档对象模型)是现代网页开发的核心技术之一。DOM 将 HTML 或 XML 文档结构化,使其成为可编程的对象。通过 DOM,开发者可以轻松地操作网页内容、样式和结构。本文将详细介绍 HTML DOM 对象的相关知识,包括其概念、结构、操作方法以及在实际…

solidity基础 -- 可视范围

在 Solidity 编程语言中,可视范围(Visibility)用于控制合约中变量和函数的访问权限。这对于确保合约的安全性、模块化以及代码的可维护性至关重要。Solidity 提供了四种可视范围修饰符:public、private、external 和 internal。以…

万字长文总结前端开发知识---JavaScriptVue3Axios

JavaScript学习目录 一、JavaScript1. 引入方式1.1 内部脚本 (Inline Script)1.2 外部脚本 (External Script) 2. 基础语法2.1 声明变量2.2 声明常量2.3 输出信息 3. 数据类型3.1 基本数据类型3.2 模板字符串 4. 函数4.1 具名函数 (Named Function)4.2 匿名函数 (Anonymous Fun…

全面评测 DOCA 开发环境下的 DPU:性能表现、机器学习与金融高频交易下的计算能力分析

本文介绍了我在 DOCA 开发环境下对 DPU 进行测评和计算能力测试的一些真实体验和记录。在测评过程中,我主要关注了 DPU 在高并发数据传输和深度学习场景下的表现,以及基本的系统性能指标,包括 CPU 计算、内存带宽、多线程/多进程能力和 I/O 性…

六、深入了解DI

依赖注入是⼀个过程,是指IoC容器在创建Bean时,去提供运⾏时所依赖的资源,⽽资源指的就是对象. 在上⾯程序案例中,我们使⽤了 Autowired 这个注解,完成了依赖注⼊的操作. 简单来说,就是把对象取出来放到某个类的属性中。 关于依赖注…

第 10 课 Python 内置函数 (增补)

1.enumerate enumerate() 接受一个可迭代对象作为输入,并返回一个枚举对象这个枚举对象包含了原始可迭代对象中的每个元素以及对应的索引它允许在循环中同时获取索引和值,这对于需要索引的情况非常方便 作用:在循环中需要同时访问索引和值时非…

C语言连接Mysql

目录 C语言连接Mysql下载 mysql 开发库 方法介绍mysql_init()mysql_real_connect()mysql_query()mysql_store_result()mysql_num_fields()mysql_fetch_fields()mysql_fetch_row()mysql_free_result()mysql_close() 完整代码 C语言连接Mysql 下载 mysql 开发库 方法一&#xf…