十六、【机器学习】【监督学习】- 支持向量回归 (SVR)

系列文章目录

第一章 【机器学习】初识机器学习

第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression)

第三章 【机器学习】【监督学习】- 支持向量机 (SVM)

第四章【机器学习】【监督学习】- K-近邻算法 (K-NN)

第五章【机器学习】【监督学习】- 决策树 (Decision Trees)

第六章【机器学习】【监督学习】- 梯度提升机 (Gradient Boosting Machine, GBM)

第七章 【机器学习】【监督学习】-神经网络 (Neural Networks)

第八章【机器学习】【监督学习】-卷积神经网络 (CNN)

第九章【机器学习】【监督学习】-循环神经网络 (RNN)

第十章【机器学习】【监督学习】-线性回归

第十一章【机器学习】【监督学习】-局部加权线性回归 (Locally Weighted Linear Regression, LWLR)

第十二章【机器学习】【监督学习】- 岭回归 (Ridge Regression)

十三、【机器学习】【监督学习】- Lasso回归 (Least Absolute Shrinkage and Selection Operator)

十四、【机器学习】【监督学习】- 弹性网回归 (Elastic Net Regression)

十五、【机器学习】【监督学习】- 神经网络回归 


目录

系列文章目录

前言

一、基本定义

(一)、监督学习

(二)、监督学习的基本流程

(三)、监督学习分类算法(Classification)

二、 神经网络回归

(一)、定义

(二)、基本概念

(三)、训练过程

(四)、特点

(五)、适用场景

(六)、扩展

三、总结


前言

    在先前的文章系列中,我们深入探讨了机器学习的基础框架和算法分类,为读者构建了关于这一领域的坚实理论基础。本章节我们将焦点转向监督学习领域中的一个核心算法—— 神经网络回归,旨在详尽解析其内在逻辑、应用实践及重要参数调整策略。


一、基本定义

(一)、监督学习

        监督学习(Supervised Learning)是机器学习中的一种主要方法,其核心思想是通过已知的输入-输出对(即带有标签的数据集)来训练模型,从而使模型能够泛化到未见的新数据上,做出正确的预测或分类。在监督学习过程中,算法“学习”的依据是这些已标记的例子,目标是找到输入特征与预期输出之间的映射关系。

(二)、监督学习的基本流程

        数据收集:获取包含输入特征和对应正确输出标签的训练数据集。
        数据预处理:清洗数据,处理缺失值,特征选择与转换,标准化或归一化数据等,以便于模型学习。
        模型选择:选择合适的算法,如决策树、支持向量机、神经网络等。
        训练:使用训练数据集调整模型参数,最小化预测输出与实际标签之间的差距(损失函数)。
        验证与调优:使用验证集评估模型性能,调整超参数以优化模型。
        测试:最后使用独立的测试集评估模型的泛化能力,确保模型不仅在训练数据上表现良好,也能在未见过的新数据上做出准确预测。

(三)、监督学习分类算法(Classification)

        定义:分类任务的目标是学习一个模型,该模型能够将输入数据分配到预定义的几个类别中的一个。这是一个监督学习问题,需要有一组已经标记好类别的训练数据,模型会根据这些数据学习如何区分不同类别。
        例子:垃圾邮件检测(垃圾邮件 vs. 非垃圾邮件)、图像识别(猫 vs. 狗)。


二、 神经网络回归

(一)、定义

   支持向量回归(Support Vector Regression, SVR)是支持向量机(Support Vector Machine, SVM)在回归分析中的应用。SVR是一种监督学习算法,用于预测连续值输出。它基于结构风险最小化原则,旨在找到一个函数,使得该函数与训练数据的偏差在一个预设的界限内尽可能小,同时保持模型的复杂度尽可能低。

(二)、基本概念

  • 间隔 (Margin) 和容忍偏差 (Epsilon, ε):SVR试图找到一个间隔,即一个界限区域,在这个区域内的任何数据点都被认为是预测正确的,即使它们与真实值有轻微偏差。这个界限通常由一个参数ε来控制,ε定义了模型预测值与实际值之间的最大允许偏差。
  • 支持向量 (Support Vectors):训练数据中那些落在间隔边界上的点被称为支持向量。它们是唯一决定SVR模型形状的点,而远离间隔边界的数据点对模型的影响较小。
  • 核函数 (Kernel Function):SVR可以使用不同的核函数,如线性、多项式、径向基函数(RBF)等,来将数据映射到更高维空间,以便在非线性数据上进行回归分析。

(三)、训练过程

    SVR的训练过程涉及解决一个优化问题,目的是找到一个最佳的超平面(对于线性SVR)或决策边界(对于非线性SVR),该边界能够以最小的误差预测目标值。以下是一个详细的训练过程概述:

  1. 数据准备

    • 数据预处理:清洗数据,处理缺失值,进行特征缩放(如标准化或归一化),编码分类特征。
    • 数据划分:将数据集分为训练集和测试集(有时还包括验证集)。
  2. 模型初始化

    • 设定参数:选择损失函数(如ε-insensitive loss),设定惩罚参数C,选择核函数(如线性、多项式、RBF等),并设定核函数的参数(如γ)。
    • 初始化权重向量w和偏置b(对于线性SVR),虽然它们在求解过程中会被更新。
  3. 构建优化问题

    • SVR的目标是找到一个函数f(x),使得对于所有训练样本(x_i, y_i),|f(x_i) - y_i| <= ε 或者 |f(x_i) - y_i| <= ε + ξ_i,其中ξ_i是松弛变量,用于允许一定的偏差,而ε是预先设定的误差容忍度。
    • 目标是最小化损失函数(通常是对松弛变量的惩罚)和模型复杂度的加权和,以防止过拟合。
  4. 求解优化问题

    • 使用拉格朗日乘数法将原始问题转化为对偶问题,这通常涉及到二次规划问题的求解。
    • 应用二次规划求解器来找到最优的拉格朗日乘数α_i,这一步可能涉及到内点法、梯度下降或其他优化算法。
  5. 确定支持向量

    • 只有那些与间隔边界相接触的点(即非零拉格朗日乘数α_i对应的点)被认为是支持向量。
    • 支持向量决定了超平面的位置和方向。
  6. 构建回归函数

    • 根据求解的拉格朗日乘数α_i和相应的支持向量,构建回归函数f(x) = ∑[α_i * y_i * K(x, x_i)] + b,其中K(x, x_i)是核函数。
  7. 模型评估与调整

    • 在测试集上评估模型的性能,使用如均方误差(MSE)、平均绝对误差(MAE)等指标。
    • 根据测试结果调整参数,如C、ε、核函数参数,可能通过网格搜索或随机搜索等超参数优化方法。
  8. 模型部署

    • 最终确定模型后,可以将其部署到生产环境,用于预测未知数据。

(四)、特点

  1. 鲁棒性:SVR对异常值不敏感,因为只有落在间隔边界外的数据点才会影响优化目标。
  2. 非线性处理能力:通过使用非线性核函数,SVR能够处理非常复杂的非线性关系。
  3. 参数调整:SVR具有多个参数,如C、ε和核函数参数,这为模型的调整提供了灵活性。
  4. 稀疏解决方案:SVR通常只需要支持向量来构建模型,这使得模型更加简洁高效。
  5. 避免过拟合:通过控制模型复杂度和惩罚参数C,SVR能够在训练数据拟合和泛化能力之间找到平衡。
  6. 计算复杂度:尽管SVR在处理小到中等规模数据集时表现良好,但在大规模数据集上,训练过程可能会变得非常计算密集。

      SVR在处理具有复杂非线性模式的数据集时尤其有用,尤其是在数据量适中、特征维度较高的情况下。它广泛应用于金融、生物信息学、工程和其他领域,用于预测和建模。

(五)、适用场景

   SVR适用于多种场景,特别是当数据具有非线性特性时,包括但不限于:

  • 经济预测:如预测股市指数、汇率变动。
  • 能源预测:预测电力需求、石油价格。
  • 生物医学应用:如预测药物反应、蛋白质结构。
  • 环境科学:预测天气变化、污染物浓度。
  • 工程技术:如预测设备故障时间、材料强度。

(六)、扩展

   除了基本的SVR,还有几种变种和扩展,包括:

  • ε-SVR:最常见的SVR形式,使用ε-insensitive loss函数。
  • ν-SVR:通过参数ν直接控制支持向量的数量和容许的误差率。
  • 线性SVR:使用线性核函数,适用于大规模数据集。
  • 多输出SVR:可以同时预测多个连续输出变量。

三、总结

    SVR 作为一种成熟的机器学习技术,不仅在现有领域发挥重要作用,而且随着技术进步和需求变化,其应用前景将更加广阔。未来,SVR 将在算法优化、数据处理能力和跨领域应用方面取得显著进展,成为解决复杂预测问题的关键工具。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 06:08:01       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 06:08:01       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 06:08:01       57 阅读
  4. Python语言-面向对象

    2024-07-19 06:08:01       68 阅读

热门阅读

  1. 【乐吾乐2D可视化组态编辑器】生命周期

    2024-07-19 06:08:01       18 阅读
  2. SQLite 事务

    2024-07-19 06:08:01       19 阅读
  3. C++ STL partition用法

    2024-07-19 06:08:01       19 阅读
  4. Vue 3路由详解:从基础配置到高级技巧

    2024-07-19 06:08:01       19 阅读
  5. MQTT 固定报头中的剩余长度介绍

    2024-07-19 06:08:01       21 阅读