实战:用线性函数、梯度下降解决线性回归问题

文章目录

  • 线性回归
  • 线性函数
  • 梯度下降
  • 实现代码

线性回归是机器学习中最简单的模型之一,在许多应用中都有广泛的应用。本篇文章将介绍如何用线性函数、梯度下降来解决线性回归问题。

线性回归

线性回归是一种用来预测连续输出变量(也叫做响应变量)与一个或多个自变量(也叫做解释变量)之间关系的模型。它的基本形式是:

y = β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β n x n + ϵ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_n x_n + \epsilon y=β0+β1x1+β2x2++βnxn+ϵ

其中, y y y是目标变量, x i x_i xi是自变量, β i \beta_i βi 是每个自变量对应的权重, ϵ \epsilon ϵ 是随机误差。该方程表明,目标变量 y y y 与自变量 x i x_i xi 的关系是线性的。

线性回归的目标是找到一组权重 β i \beta_i βi,使得通过 β i \beta_i βi 和自变量 x i x_i xi 求得的 y y y 值与实际目标变量 y y y 值的差别最小。这个差别通常使用平方误差(Mean Squared Error,MSE)来表示:

M S E = 1 n ∑ i = 1 n ( y i − y i ^ ) 2 MSE=\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y_i})^2 MSE=n1i=1n(yiyi^)2

其中 n n n 是训练数据的数量, y i y_i yi 是目标变量的真实值, y i ^ \hat{y_i} yi^ 是通过自变量和权重求得的预测值。

线性函数

为了使用线性函数来估计权重 β i \beta_i βi,我们首先需要定义一个线性函数,它的形式是:

y ^ = f ( x ; w ) = w 0 + w 1 x 1 + w 2 x 2 + ⋯ + w p x p \hat{y} = f(x; w) = w_0 + w_1 x_1 + w_2 x_2 + \cdots + w_p x_p y^=f(x;w)=w0+w1x1+w2x2++wpxp

其中, w i w_i wi 是权重向量, x i x_i xi 是输入向量。我们还可以将输入向量 x i x_i xi 表示为 [ 1 , x 1 , x 2 , ⋯ , x p ] [1, x_1, x_2, \cdots, x_p] [1,x1,x2,,xp],这样就可以用一个向量 w w w 来表示所有的权重。这个线性函数也可以写成矩阵乘法的形式:

y ^ = X w \hat{y} = Xw y^=Xw

其中, X X X 是输入矩阵,它的每一行表示一个样本,每一列表示一个特征(也就是输入向量中的 x i x_i xi)。权重向量 w w w 是一个列向量,它的长度等于输入向量的长度加一(因为我们增加了一个截距项 w 0 w_0 w0)。

我们可以使用线性函数来估计训练数据中的目标变量 y y y 的值,也就是将输入向量 x i x_i xi 代入线性函数中得到 y i ^ \hat{y_i} yi^。然后,我们可以使用 MSE 函数来计算估计值 y i ^ \hat{y_i} yi^ 和真实值 y i y_i yi 之间的平方误差,如下所示:

M S E = 1 n ∑ i = 1 n ( y i − y i ^ ) 2 MSE=\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y_i})^2 MSE=n1i=1n(yiyi^)2

我们的目标是使 M S E MSE MSE 最小化。我们可以通过最小化 M S E MSE MSE 来找到最优的权重向量 w w w,使得基于该向量的线性函数可以最好地拟合数据。

梯度下降

现在我们已经定义了线性函数和目标函数,我们需要找到一种方法来最小化目标函数。一种常用的方法是使用梯度下降。

梯度下降是一种数值优化算法,用于寻找一个函数的最小值。梯度下降的基本思想是,沿着函数的梯度(也称导数)的反方向进行移动,直到达到函数的最小值。梯度下降的算法包括以下几个步骤:

  1. 随机初始化权重向量 w w w 的值。
  2. 计算目标函数 M S E MSE MSE 的梯度。
  3. 更新权重向量 w w w 的值。
  4. 重复步骤 2-3,直到达到收敛条件。

在第 2 步中,我们需要计算目标函数 M S E MSE MSE 对权重向量 w w w 的梯度。梯度是一组偏导数,它表示函数在每个方向上的变化率。对于目标函数 M S E MSE MSE,其对权重向量 w w w 的梯度为:

∇ w M S E = 2 n X T ( X w − y ) \nabla_w MSE = \frac{2}{n} X^T (Xw - y) wMSE=n2XT(Xwy)

其中, ∇ w \nabla_w w 表示对 w w w 向量取偏导数。这个式子可以用来计算梯度向量,它包含了每个权重向量 w w w M S E MSE MSE 的影响程度。因此,我们可以使用梯度向量来更新权重向量,使得权重向量向最小化 M S E MSE MSE 的方向移动。更新权重向量的公式如下所示:

w = w − α ∇ w M S E w = w - \alpha \nabla_w MSE w=wαwMSE

其中, α \alpha α 是学习率,它是用来控制每次迭代中的权重调整量大小的参数。我们可以根据经验来设定学习率,通常取值范围在 0.01 到 0.0001 之间。

实现代码

下面是一个 Python 实现的线性回归模型,使用了梯度下降法来最小化目标函数。该模型包括以下几个部分:

  • 计算 MSE 函数和梯度向量。
  • 实现梯度下降算法,并在每次迭代中更新权重向量。
  • 计算训练数据和测试数据的 MSE。
  • 绘制训练数据和测试数据的预测结果。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解Transformer中的Encoder

一.Transformer架构 左半边是Encoder,右半边是Decoder。 二.Vision Transformer Vision Transformer取了Transformer的左半边。包含 Input EmbeddingPositional Encoding多头注意力机制 Add & Norm(前馈网络)Feed Forward Add & Norm 2.1 Input Embe…

python 学习笔记

python 学习笔记 学习思路Hoshinobot踩坑命名规范路径 gocqhttprequestsseleninum 借鉴 学习思路 Hoshinobot Hoshinobot是一个机器人模板,在里面可以添加自定义的多个功能,通过和gocqhttp联调可以制作简单的qq机器人 踩坑 命名规范 service里的名字不能和你在config里的b…

企业架构LNMP学习笔记4

企业服务器LNMP环境搭建: 常见的软件架构: 1)C/S: client/server 2)B/S: browser/server 不管是C还是B,都是属于客户端属于前端。那么运维人员主要是负责和管理的Server端,也统称为服务器端。为了快速的…

RetroArch 接入两个同款手柄只能识别到一个导致无法双打的问题

测试平台 设备:StationPC M3 RetroArch: 1.1.5(当前官方最新) 手柄:北通蝙蝠BD2F(XBOX360键位) 问题说明 RetroArch插入两个同款手柄/摇杆时只能识别到一个,此时两个手柄都是可以控制模拟器,但是进入游戏也都是p1,无法实现双打 解决办法 …

Window安装虚拟机+给虚拟机安装Linux

一、虚拟机下载 这里使用Virtualbox虚拟机。可以直接从官网下载:Downloads – Oracle VM VirtualBox 点击进行下载,选择window版本的。直接双击,一直下一步 进行安装 PS:安装需要开启CPU虚拟化,一般电脑都已经开启了…

最新社区团购电商小程序源码 无bug完美运营版+详细搭建部署教程

分享一个开源社区团购电商小程序源码,无bug完美运营版,含完整前后端详细搭建部署教程。 系统运营模式:整合线下社区资源,由各快递代收点、社区便利店、社区物业、业主等发起的社区微信群,推送商品信息,消费…

【数据恢复】.360勒索病毒|金蝶、用友、OA、ERP等软件数据库恢复

引言: 在当今数字化的时代,网络犯罪已经演变成了一场全球性的威胁,而 360 勒索病毒则是其中最为可怕和具有破坏性的威胁之一。这种恶意软件以其危害深远、难以防范的特点而令人震惊。本文91数据恢复将深入探讨 360 勒索病毒的可怕性&#xff…

python中try-except常见错误(exception)

python常见错误(exception) 在Python中,有许多常见的错误类型,其中一些包括: SyntaxError:语法错误,通常是由于代码中的拼写错误、缺少括号或其他语法问题引起的。这些错误会在代码解析时立即触…

sql:SQL优化知识点记录(九)

(1)小表驱动大表 对sql调优的分析: 排序优化: 数据库的连接方式,里面的数据尽量这样连接,尽量选择第一个方式,因为两个表的连接一共建立5次连接,第二个建立1000次连接,从…

CNI、CSI 和 CRI在 Docker 中的角色和作用

摘要 CNI(Container Network Interface): CNI 是用于容器网络的接口标准,它定义了容器和网络插件之间的通信协议。CNI 的主要作用是为容器创建和管理网络接口。当创建一个容器时,CNI 插件会被调用来为容器创建一个网络…

使用spring自带的发布订阅机制来实现消息发布订阅

背景 公司的项目以前代码里面有存在使用spring自带发布订阅的代码,因此稍微学习一下如何使用,并了解一下这种实现方式的优缺点。 优点 实现方便,代码方面基本只需要定义消息体和消费者,适用于小型应用程序。不依赖外部中间件&a…

h5微传单制作教程:快速轻松制作

在当今社交媒体充斥的时代,微传单作为一种新型的宣传推广方式,成为了企业和个人在传播信息时的重要工具。h5微传单相比传统的纸质传单更加灵活多样,并且能够通过手机、平板等设备随时随地进行浏览和分享,具有很高的传播效果。下面…

SpringMVC_SSM整合

一、回顾SpringMVC访问接口流程 1.容器加载分析 容器分析 手动注册WebApplicationContext public class ServletConfig extends AbstractDispatcherServletInitializer {Overrideprotected WebApplicationContext createServletApplicationContext() {//获取SpringMVC容器An…

编译c++代码时,报错:No such file or directory #include “opencv2/opencv_modules.hpp“

在rk板子上编译了opencv库,然后opencv安装在/usr/local/include/opencv4/opencv2下, 安装路径上有一个opencv4这个目录,这个情况很多人都会遇到,因此在编写的c代码中引用的头文件也需要加入opencv4这一级目录,但是我在…

【Linux】Buffer和Cache区别和用途

buffer 缓冲区 用于存储速度不同的设备之间的数据传输。通过buffer可以减少进程间的等待 当存储速度快的设备与存储速度慢的设备进行通信时,存储慢的数据先把数据存放到 buffer,达到一定程度存储快的设备再读取buffer的数据,在此期间存储快…

Python实现猎人猎物优化算法(HPO)优化卷积神经网络回归模型(CNN回归算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 猎人猎物优化搜索算法(Hunter–prey optimizer, HPO)是由Naruei& Keynia于2022年提出的一种最新的…

OpenCV(二十八):连通域分割

目录 1.介绍连通域分割 2.像素领域介绍 3.两遍法分割连通域 4.连通域分割函数 1.介绍连通域分割 连通域分割是一种图像处理技术,用于将图像中的相邻像素组成的区域划分为不同的连通域。这些像素具有相似的特性,如相近的灰度值或颜色。连通域分割可以…

ue5 物理场的应用

cable mat wpo particle 流体粒子 choas 破损 刚体 布料 cloud abp blueprint riggedbody 体积雾 毛发 全局的 局部的 非均匀的 连续变化的 也可以多个叠加 从全局 到 范围 除了vector还有scalar的值也就是0--1的黑白灰的值 但是最终输出的值的类型还是取决于这个 一…

链动2+1天天秒商城商业模式

链动21天天秒商城商业模式 在当今市场,一种名为链动21天天的秒杀商城商业模式正在引发广泛关注。这种创新的商业模式具有快速拓展市场的强大能力,让许多用户和商家都感到非常惊讶。那么,这种模式究竟是什么,它又为何具有如此大的…

【前端打怪升级日志之CSS篇】position定位

学习链接:阮一峰CSS定位详解 学习总结: 学习应用:待补充。。。