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

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

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

  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。

更新回归系数

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/708057.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WebMvcConfigurer配置不当导致鉴权失败

最近同事说他们有个新需求&#xff0c;需要对接口进行加解密&#xff0c;所以他给项目配置了一个拦截器&#xff0c;但这个拦截器直接导致了每个接口鉴权失败&#xff0c;每次调用接口都是提示没有session信息。 公司内的所有java项目是公用同一套基础依赖&#xff0c;所以我也…

差分个人见解(二)

差分个人见解&#xff08;二&#xff09; 二维差分二维差分数组的用途构造二维差分数组实战演练 如果你还不太熟悉一维差分&#xff0c;那么请先学会一维差分。 二维差分 二维差分数组的用途 在一维差分数组中&#xff0c;它的用途是 快速 使一个区间内加上一个数。 那么二…

【产品经理】订单处理2

本次讲解订单初始化成功到ERP系统过程中的后续环节。 一、根据客服备注更新订单信息 初始化订单过程中&#xff0c;若订单中的客服备注信息对订单进行更新&#xff0c;包括可能改收货信息、改商品、加赠品、指定快递等。 注意&#xff1a;更新订单的过程中要注意订单当前状…

漫步者M125便携式蓝牙音箱首发价169

目录 一、音箱音质方面 二、音箱续航方面 三、音箱外观设计 四、音箱连接方面 五、音效方面 六、总结 在这个快节奏的时代&#xff0c;音乐成为了许多人生活中不可或缺的调味剂&#xff0c;一款优质的便携蓝牙音箱&#xff0c;无疑是旅行、户外或居家休闲的理想伴侣。近日…

基于 Redis 实现分布式缓存

一、单节点 Redis 的问题 1.1 存在的问题 1、数据丢失问题&#xff1a;Redis 是内存存储&#xff0c;服务重启可能会丢失数据。 2、并发能力问题&#xff1a;单节点 Redis 并发能力虽然不错&#xff0c;但也无法满足如 618 这样的高并发场景。 3、故障恢复问题&#xff1a;如果…

【机器学习】机器学习赋能医疗健康:从诊断到治疗的智能化革命

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀目录 &#x1f4d2;1. 引言&#x1f4d9;2. 机器学习在疾病诊断中的应用&#x1f9e9;医学影像分析&#xff1a;从X光到3D成像带代码&#x1…

【B站大神推荐】OBS Studio史上最好用的免费视频录制直播神器,绝无仅有!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 前言 你是不是…

一套轻量、安全的问卷系统基座,提供面向个人和企业的一站式产品级解决方案

大家好&#xff0c;今天给大家分享的是一款轻量、安全的问卷系统基座。 XIAOJUSURVEY是一套轻量、安全的问卷系统基座&#xff0c;提供面向个人和企业的一站式产品级解决方案&#xff0c;快速满足各类线上调研场景。 内部系统已沉淀 40种题型&#xff0c;累积精选模板 100&a…

2024年【公路水运工程施工企业安全生产管理人员】报名考试及公路水运工程施工企业安全生产管理人员考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年公路水运工程施工企业安全生产管理人员报名考试为正在备考公路水运工程施工企业安全生产管理人员操作证的学员准备的理论考试专题&#xff0c;每个月更新的公路水运工程施工企业安全生产管理人员考试试卷祝您顺…

Kettle 数据抽取工具使用教程:从入门到实战

一、简介 Kettle 是 Pentaho Data Integration (PDI) 的一个组成部分&#xff0c;是一个开源的数据集成工具。它被广泛用于数据的抽取、转换和加载 (ETL) 过程。Kettle 提供了一个易于使用的图形界面&#xff0c;可以轻松设计和执行 ETL 流程。 github 源码地址&#xff1a;ht…

LLM 大模型学习:量化技术、QLoRA、量化库

模型的推理过程是一个复杂函数的计算过程&#xff0c;这个计算一般以矩阵乘法为主&#xff0c;也就是涉及到了并行计算。一般来说&#xff0c;单核CPU可以进行的计算种类更多&#xff0c;速度更快&#xff0c;但一般都是单条计算&#xff1b;而显卡能进行的都是基础的并行计算&…

javaweb和Mysql学习

javaweb学习 HTML 结构标签 HTML的结构标签分为 <html>&#xff1a;定义HTML文档的根元素。<head>&#xff1a;包含了文档的元&#xff08;meta&#xff09;、标题&#xff08;title&#xff09;、样式表&#xff08;style&#xff09;和脚本&#xff08;scrip…

nginx 启动报错:Failed to start The nginx HTTP and reverse proxy server.

1&#xff0c;启动 nginx报错 systemctl start nginx[rootlaoban yum.repos.d]# systemctl start nginx Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "jetails. [rootlaoban…

俄罗斯Yandex推广投放如何开户?Yandex广告开户和代运营推广流程详解_俄罗斯_受众_搜索引擎

在俄罗斯进行Yandex广告推广是一种有效的在线营销方式&#xff0c;特别是针对俄罗斯市场。Yandex是俄罗斯最受欢迎的搜索引擎&#xff0c;类似于Google在全球范围内的地位。以下是通过Yandex广告推广的一般步骤&#xff0c;以及如何通过上海上弦进行广告开户和代运营。 1. Yan…

STL-常用容器

3.1.1. string基本概念 本质&#xff1a; string是C风格的字符串&#xff0c;char*是C语言风格的字符串string本质上是一个类 string和char*的区别&#xff1a; char*是一个指针string是一个类&#xff0c;类内部封装并负责管理char*&#xff0c;是一个char*型的容器 特点&a…

django-vue-admin 本地部署

一、项目地址 主分支&#xff1a;master&#xff08;稳定版本&#xff09; 开发分支&#xff1a;develop django-vue3-admin-masterhttps://gitee.com/huge-dream/django-vue3-admin 注意&#xff1a;下载master分支zip代码包&#xff0c;解压后删掉web\src\views\syst…

数据结构笔记补充问题

1、假设线性表L采用单链表存储结构&#xff0c;设计一个算法&#xff0c;在L的数据元素最大值之前插入&#xff08;假设L的各个数据元素值不同&#xff09;数据元素x。 基本思想&#xff0c;先查找到最大元素对应的结点&#xff0c;再在之前插入x对应的结点&#xff1b; 设计算…

Android开发AndroidStudio安装教程

本文图示展示AndroidStudio安装教程。 目录 一、下载安装包 二、安装 一、下载安装包 https://developer.android.google.cn/studio?hlzh-cn 二、安装 双击exe Next Next Next 默认点击Install Next 点击finish进入设置文件界面。 如果本地有设置文件&#xff0c;选择C…

Zabbix 7.0 新增功能亮点(二)——history.push API方法

Zabbix7.0LTS一经发布便吸引了众多运维小伙伴的关注&#xff0c;乐维社区forum.lwops.cn也伴随着不少小伙伴的热议与探讨&#xff0c;话不多说&#xff0c;抓紧上车。 前面我们介绍了zabbix 7.0 新增功能亮点&#xff08;一&#xff09;——T参数&#xff0c;本篇将向大家介绍z…

【掌握C++模板进阶】:高级编程的艺术

&#x1f4c3;博客主页&#xff1a; 小镇敲码人 &#x1f49a;代码仓库&#xff0c;欢迎访问 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f30f; 任尔江湖满血骨&#xff0c;我自踏雪寻梅香。 万千浮云遮碧…