机器学习(1)线性回归

ops/2024/11/14 19:05:48/

前言
  线性回归算法是机器学习深度学习入门的必学的算法,其算法原理虽然简单,但是却蕴含着机器学习中的一些重要的基本思想。许多功能更为强大的非线性模型可在线性模型的基础上通过引入层级结构或高维映射而得。同时机器学习深度学习的核心思想就是优化求解,不断寻找最合适的参数,特别是理解了怎么利用梯度下降法去求解参数,对后续的神经网络的学习有着很大的帮助。

线性回归是一种基本且常用的回归算法,用于预测连续数值。它的核心思想是找到一个线性函数,使得输入特征和输出结果之间的关系能够被较好地描述。下面是线性回归的详细介绍。

1. 线性回归的基本概念

  • 线性回归的目标是找到一个线性方程,使得自变量 X和因变量 Y 之间的关系能够以直线的形式表示。

2. 假设函数与损失函数

  •  

3. 模型训练——最小化损失函数

  • 目标:训练的目的是通过调整模型参数(权重 w 和截距 b)来最小化损失函数。
  • 优化方法:常用的方法是梯度下降法(★),通过反复调整参数,使得损失函数逐渐减小,直到达到一个较小的误差。
梯度下降法步骤

4. 线性回归的实现方法

5. 线性回归的假设

线性回归模型有一些基本假设:

  • 线性关系:特征和目标变量之间的关系是线性的。
  • 同方差性:所有特征的误差方差相同。
  • 独立性:观测之间的误差不相关。
  • 正态性:误差呈正态分布,适用于小数据集。

6. 模型评估

  • 均方误差(MSE):用于衡量预测值与真实值的平方误差。
  • 平均绝对误差(MAE):预测误差的绝对值平均,减小对异常值的敏感性。
  • 决定系数(R^2):表示模型拟合优度。R^2 值在0到1之间,1表示完美拟合,0表示无关性。

7. 优缺点

  • 优点
    • 简单易用,可解释性强,特别适合线性关系数据。
    • 训练速度快,适合快速验证数据。
  • 缺点
    • 对异常值敏感,受线性假设限制,难以捕捉复杂的非线性关系。
    • 仅在满足线性关系、同方差性和正态性假设的数据中表现较好。

8. 线性回归的改进

  • 岭回归:引入正则化项,减少模型对多重共线性的敏感性。
  • Lasso回归:使用L1正则化,能够将不重要的特征权重缩小为零,达到特征选择的效果。
  • 弹性网络回归:结合岭回归和Lasso回归,适用于复杂数据集和特征之间存在强相关的情况。

线性回归因其简单、高效和可解释性广泛应用于各种预测任务,是许多更复杂回归模型的基础。

通常是第二个,2n分之一,因为梯度好计算。

随机梯度下降(SGD,Stochastic Gradient Descent)是梯度下降法的一种变体,它通过对单个样本或小批量样本计算梯度来更新参数,而不是计算所有样本的梯度。这使得它比传统的批量梯度下降(Batch Gradient Descent)更快,尤其在处理大规模数据集时。

1. **基本概念:**

在传统的**批量梯度下降法**中,我们使用所有训练数据来计算梯度并更新参数。对于一个损失函数 更新公式如上
但是,批量梯度下降计算成本高,尤其是在数据集非常大的时候,因为每次都需要计算所有样本的梯度。

随机梯度下降(SGD)的核心思想是:
- 每次迭代只使用一个样本来计算梯度,并立即更新参数。
- 因为每次迭代更新的方向是基于一个样本的梯度,所以参数的更新会比较“噪声”且跳跃,但这样做的优点是每次迭代可以非常快速,适用于大数据集。

2. 随机梯度下降的更新公式:

3. 随机梯度下降的步骤:

1. **初始化参数**:初始化模型参数(例如,权重 \( w \) 和偏置 \( b \))。
2. **随机选择样本**:从训练数据中随机选择一个样本 \( (x_i, y_i) \)。
3. **计算梯度**:计算该样本的损失函数的梯度。
4. **更新参数**:根据计算得到的梯度更新参数 \( w \) 和 \( b \)。
5. **重复步骤2到步骤4**:直到达到最大迭代次数或者损失函数收敛。

梯度下降算法伪代码:

输入:- X: 输入数据集(特征矩阵)- Y: 目标值(标签)- α: 学习率 (learning rate)- max_iterations: 最大迭代次数- 初始化 w 和 b (例如,w = 0, b = 0)步骤:
1. 初始化 w 和 b 为 0 或随机值
2. repeat until convergence {a. 计算预测值:y_pred = w * X + bb. 计算损失函数 L(w, b) 对 w 和 b 的梯度:- 对 w 的梯度: ∂L/∂w = (1/n) * Σ (x_i * (y_i - y_pred_i))- 对 b 的梯度: ∂L/∂b = (1/n) * Σ (y_i - y_pred_i)c. 更新参数:w = w - α * ∂L/∂wb = b - α * ∂L/∂bd. 如果损失值不再变化 (或者达到最大迭代次数), 退出循环
}
3. 返回最终的 w 和 b

随机梯度下降伪代码:

输入:- X: 输入数据集(特征矩阵)- Y: 目标值(标签)- α: 学习率 (learning rate)- max_iterations: 最大迭代次数- 初始化 w 和 b (例如,w = 0, b = 0)步骤:
1. 初始化 w 和 b 为 0 或随机值
2. repeat until convergence {a. 随机选择一个数据点 (x_i, y_i) 从 X 和 Y 中b. 计算预测值:y_pred_i = w * x_i + bc. 计算损失函数 L(w, b) 对 w 和 b 的梯度:- 对 w 的梯度: ∂L/∂w = -x_i * (y_i - y_pred_i)- 对 b 的梯度: ∂L/∂b = -(y_i - y_pred_i)d. 更新参数:w = w - α * ∂L/∂wb = b - α * ∂L/∂be. 如果损失函数变化小于某个阈值,退出循环
}
3. 返回最终的 w 和 b
或者
shuffle(xi,yi);打乱所有输入信息的顺序
repeat until convergence{}

总结
  最后来总结一下梯度下降法和最小二乘法的特点:
  梯度下降法的适用范围比较广泛,在后续的深度学习神经网络的参数求解的时候就是利用梯度下降法对其求解,并且神经网络的参数往往都是几千上万的参数;但是梯度下降法对于较小的数据量来说它的速度并没有优势。
  最小二乘法在数据比较少同时特征比较少的情况下速度往往更快,但是当数量级达到一定的时候,还是梯度下降法更快,因为正规方程中需要对矩阵求逆,而求逆的时间复杂的是n的3次方。
  最后再重申一遍,线性回归是一个很具有代表性的算法,将其学好对于后续的深度学习的学习有着很大的帮助,特别是梯度下降法是后续深度学习的核心所在。


http://www.ppmy.cn/ops/133649.html

相关文章

渗透测试之 -- Linux基础

声明 学习视频来自B站UP主 泷羽sec,如涉及侵泷羽sec权马上删除文章笔记的只是方便各位师傅学习知识,以下网站涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 一、Openssl 1、openssl passwd -1 123 openssl一个开源加密工具包,用于各种解密、加…

宝塔面板中使用Acme SSL.cn申请的免费HTTPS SSL证书安装步骤

目录 1. 申请SSL证书 2. 宝塔面板安装SSL证书 申请免费ssl证书的网站:AcmeSSL.cn - 一个提供免费HTTPS证书申请的ACME自动化工具网站-免费提供申请Lets Encrypt、ZeroSSL、Google Public CA等CA证书-ACME自动化管理工具。 1. 申请SSL证书 按照上述提到的注册登录、…

netcat工具安装和使用

netcat是一个功能强大的网络实用工具,可以从命令⾏跨⽹络读取和写⼊数据。 netcat是为Nmap项⽬编写的,是⽬前分散的Netcat版本系列的经典。 它旨在成为可靠的后端⼯具,可⽴即为其他应⽤程序和⽤户提供⽹络连接。 一,下载安装 1&a…

《实时流计算系统设计与实现》-Part 2-笔记

做不到实时 做不到实时的原因 实时计算很难。通过增量计算的方式来间接获得问题的(伪)实时结果,即使这些结果带有迟滞性和近似性,但只要能够带来尽可能最新的信息,那也是有价值的。 原因可分成3个方面: …

apk反编译修改教程系列-----apk应用反编译中AndroidManifest.xml详细代码释义解析 包含各种权限 代码含义

在反编译apk应用中。需要增加或者减少有些apk功能或者权限类的修改。其中大多都在于 AndroidManifest.xml文件中。了解AndroidManifest.xml其中每串代码代表的含义对修改apk有着至关重要的作用。 通过博文了解💝💝💝💝 1💝💝💝💝----AndroidManifest.xml中代…

力扣104 : 二叉树最大深度

补:二叉树的最大深度 描述: 给定一个二叉树 root ,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 何解? 树一般常用递归:递到叶子节点开始倒着处理

【go从零单排】XML序列化和反序列化

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在 Go 语言中,处理 XML 数据主要使用 encoding/xml 包。这个包提供了…

CSS transform动画

CSS 的 transform 属性允许你对元素进行旋转、缩放、倾斜或移动等操作。以下是一些常见的变换类型: 基本语法 transform: transform-function(value);常用的 transform 函数 translate:移动元素的 X 和 Y 轴位置。 transform: translate(50px, 100px);…