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

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,182元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
云原生网关 MSE Higress,422元/月
简介: 实战:用线性函数、梯度下降解决线性回归问题

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

线性回归

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

y=β0+β1x1+β2x2++βnxn+ϵ

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

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

MSE=n1i=1n(yiyi^)2

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

线性函数

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

y^=f(x;w)=w0+w1x1+w2x2++wpxp

其中,wi 是权重向量,xi 是输入向量。我们还可以将输入向量 x i x_ixi 表示为 [1,x1,x2,,xp],这样就可以用一个向量 w 来表示所有的权重。这个线性函数也可以写成矩阵乘法的形式:y^=Xw

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

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

MSE=n1i=1n(yiyi^)2

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

梯度下降

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

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

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

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

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

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

实现代码

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

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


相关文章
|
机器学习/深度学习 数据可视化 数据处理
OpenAI Gym 高级教程——可解释性和可视化
OpenAI Gym 高级教程——可解释性和可视化
548 1
|
11月前
|
人工智能 Kubernetes API
应用网关的演进历程和分类
唯一不变的是变化,在现代复杂的商业环境中,企业的业务形态与规模往往处于不断变化和扩大之中。这种动态发展对企业的信息系统提出了更高的要求,特别是在软件架构方面。为了应对不断变化的市场需求和业务扩展,软件架构必须进行相应的演进和优化。网关作为互联网流量的入口,其形态也在跟随软件架构持续演进迭代中。我们下面就聊一聊网关的演进历程以及在时下火热的 AI 浪潮下,网关又会迸发怎样新的形态。
739 166
|
11月前
|
安全 数据可视化 编译器
AST 的应用
【10月更文挑战第23天】抽象语法树在软件开发的各个领域都有着广泛而重要的应用。它为代码的分析、优化、生成、转换等提供了基础和支持,是提升代码质量和开发效率的重要工具。随着技术的不断发展,AST 的应用还将不断扩展和深化,为软件开发带来更多的创新和便利。
|
12月前
|
机器学习/深度学习 算法 搜索推荐
深度学习之差分隐私
基于深度学习的差分隐私是一种在保护用户隐私的同时使用数据进行模型训练的技术。它的核心理念是通过加入随机噪声来隐藏个体数据的影响,防止在分析或模型训练过程中泄露个人信息。
1138 1
|
11月前
|
运维 监控 安全
盘点Linux服务器运维管理面板
随着云计算和大数据技术的迅猛发展,Linux服务器在运维管理中扮演着越来越重要的角色。传统的Linux服务器管理方式已经无法满足现代企业的需求,因此,高效、安全、易用的运维管理面板应运而生。
|
缓存 关系型数据库 MySQL
Java 实现实时监听MySQL数据库变更MySQLBinListener
Java 实现实时监听MySQL数据库变更MySQLBinListener
|
机器学习/深度学习 算法 调度
多元线性回归梯度下降法
梯度下降法是一种通用的优化算法,尤其适用于机器学习中找到最优解。与解析解法不同,它不局限于特定情况,能在数据规模较大时依然有效。该方法通过迭代逐步接近最优解,每次迭代利用损失函数的梯度信息调整参数。学习率是控制参数更新幅度的关键因素,太大会导致发散,太小则收敛慢。全量梯度下降每次使用所有样本更新,收敛稳定但速度慢;随机梯度下降每次仅用一个样本,速度快但可能产生较大波动;小批量梯度下降取两者之间,以一定的样本批量进行更新,兼顾速度和稳定性。
296 1
|
缓存 关系型数据库 MySQL
MySQL数据库性能优化实战
【4月更文挑战第30天】本文探讨了MySQL性能优化实战技巧,包括硬件与配置优化(如使用SSD、增加内存和调整配置参数)、索引优化(创建合适索引、使用复合索引及定期维护)、查询优化(避免全表扫描、减少JOIN和使用LIMIT)、分区与分片(表分区和数据库分片),以及使用缓存、定期清理数据库和监控诊断。通过这些方法,可以提升数据库性能和响应速度。
|
Ubuntu 安全 Linux
Grub2启动项的修改和相关操作命令
**GRUB2**是Linux的主要引导加载程序,用于启动时显示菜单。要修改启动项,应编辑`/etc/default/grub`,然后运行`grub-mkconfig -o /boot/grub/grub.cfg`更新配置,最后确保`grub.cfg`只读。若需修复引导问题,可启动到Ubuntu Live CD/DVD,挂载根和boot分区,重新安装GRUB2,并根据需要修复`grub.cfg`或Windows引导项。遵循此指南,能安全管理GRUB2并解决引导问题。