当前位置: 首页 > article >正文

机器学习(1)线性回归

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

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

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 + b
    b. 计算损失函数 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/∂w
        b = b - α * ∂L/∂b
    d. 如果损失值不再变化 (或者达到最大迭代次数), 退出循环
}
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 + b
    c. 计算损失函数 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/∂w
        b = b - α * ∂L/∂b
    e. 如果损失函数变化小于某个阈值,退出循环
}
3. 返回最终的 w 和 b
或者
shuffle(xi,yi);打乱所有输入信息的顺序
repeat until convergence{

}

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


http://www.kler.cn/a/393719.html

相关文章:

  • 力扣104 : 二叉树最大深度
  • 11张思维导图带你快速学习java
  • FatLab:我的编程课程系列
  • 01-Ajax入门与axios使用、URL知识
  • 重构代码之内联临时变量
  • 知识库管理系统:企业数字化转型的加速器
  • 2024年11月12日Github流行趋势
  • ubuntu cmake CPack将第三方库进行打包
  • 机器学习—决定下一步做什么
  • 关于学习炸鸡佬智能手表 应用硬件IIC1来取代原来软件模拟的IIC
  • Java编程优化:深入理解多态和接口中的方法实现
  • 支持向量机 SVM
  • 密码学在网络安全中的应用
  • 基于ABNF语义定义的HTTP消息格式
  • 基于微信小程序的电商平台+LW示例参考
  • html文本元素
  • 第三次作业
  • 浅谈:基于三维场景的视频融合方法
  • 丹摩征文活动 | 丹摩智算平台:服务器虚拟化的璀璨明珠与实战秘籍
  • C++设计模式和编程框架两种设计元素的比较与相互关系
  • Jenkins常见问题
  • 计算机网络(5)
  • Java final关键字
  • ios swift开发--ios远程推送通知配置
  • leetcode83. Remove Duplicates from Sorted List
  • 域名绑定服务器小白教程