什么是支持向量机 - MATLAB & Simulink

支持向量机 (SVM)

什么是支持向量机

支持向量机 (SVM) 是一种有监督机器学习算法,它能找到分离两个类的数据点的最佳超平面。

支持向量机的工作原理

支持向量机是一种有监督机器学习算法,常用于信号处理、自然语言处理 (NLP)、语音和图像识别等应用中的分类和回归问题。SVM 算法的目标是找到一个超平面,该超平面以可能的最佳效果将一个类的数据点与另一个类的数据点分离。此超平面在二维空间中是一条直线,在 n 维空间中是一个平面,其中 n 是数据集中每个观测值的特征数量。数据中可能存在多个可用于分离类的超平面。SVM 算法推断出的最佳超平面是使两个类之间边距最大化的超平面。

边距是指平行于超平面的内部不含数据点的平板的最大宽度。标记此平行平板的边界且最接近分离超平面的数据点就是支持向量。支持向量指用于确定分离超平面的位置的训练观测值的子集。

支持向量机确定的超平面示意图:显示支持向量、边距以及分成两个类的数据点。

使用 SVM 算法最大化两个类之间的边距宽度,这两个类分别用加号和减号表示并由超平面分离。

SVM 建模的工作流

构建支持向量机模型的典型工作流包括以下步骤:

预处理数据

使用原始数据训练 SVM 模型通常效果不佳,因为存在缺失值、离群值以及信息冗余。您可以执行数据清洗来处理缺失值或离群值,并执行特征提取从数据中选择合适的特征集。

特征提取将原始数据变换为可以处理的数值特征,同时保留原始数据集中的信息。降维方法,如主成分分析 (PCA),可以减少特征数量,同时保留最重要的信息。这种方法使支持向量机模型更稳健,能够处理复杂数据集。

在数据处理完成后,将数据拆分为训练集和测试集。使用交叉验证以最佳方式拆分数据。SVM 模型基于训练数据集进行训练,测试数据集用于评估模型在陌生数据上的性能。

选择核函数

根据数据分布,选择合适的核函数(线性、多项式、RBF 等)。当无法线性分离时,核函数将数据变换为更高维空间,使类更容易分离。

为 SVM 选择合适的核函数
SVM 的类型 Mercer 核 描述
高斯或径向基函数 (RBF) K(x1,x2)=exp(x1x222σ2) 一类学习。σ 是核的宽度。
线性 K(x1,x2)=x1Tx2 二类学习。
多项式 K(x1,x2)=(x1Tx2+1)ρ ρ 是多项式的阶。
Sigmoid K(x1,x2)=tanh(β0x1Tx2+β1) 该函数仅当 β0β1 取特定值时才是一个 Mercer 核。

训练 SVM 模型

构建 SVM 模型并使用训练数据集对其进行训练。训练支持向量机 (SVM) 相当于求解一个二次优化问题,其目标是找到一个能够最大化类别之间边距的超平面。支持向量机算法识别支持向量并确定最佳超平面。使用经过训练的模型基于最佳超平面对新数据和陌生数据点进行分类。

评估 SVM 模型

使用测试数据集测试模型。使用准确度、混淆矩阵、精确率、F1 分数或召回率等度量评估模型性能。

调节超参数

调整超参数以提高模型性能。使用贝叶斯优化等搜索方法,通过概率模型找到最佳超参数。

SVM 分类器的类型

线性支持向量机

线性 SVM 用于有且只有两个类的线性可分数据。这种类型的支持向量机算法使用线性决策边界来分离这两个类的所有数据点。

该 SVM 算法只能为线性可分问题找到这样的超平面。对于大多数复杂任务(其中数据不可分),支持向量机可以使用软边距,获得一个可分离许多(但并非所有)数据点的超平面。算法最大化软边距,允许少量误分类。

MATLAB 绘图:展示一个支持向量机,它使用软边距以在允许一个误分类的前提下分离类。

软边距 SVM 允许 class -1(蓝色)中存在一个数据点误分类。(参阅 MATLAB 文档。)

非线性支持向量机

SVM 也用于非线性分类和回归任务。对于非线性可分数据,非线性支持向量机使用核函数来变换特征。变换后特征的数量由支持向量的数量确定。

核函数将数据映射到一个不同的(通常是更高维的)空间。这种变换可以将复杂的非线性决策边界简化为更高维映射特征空间中的线性边界,从而使类更容易分离。在此过程(通常称为核方法)中,不必对数据进行显式变换,否则计算成本会很高。非线性数据的核函数包括多项式、径向基函数(高斯)和多层感知器机或 Sigmoid(神经网络)。

MATLAB 散点图:展示支持向量机用超平面将数据点分离为两个类。

在 MATLAB 中使用高斯核函数训练的非线性 SVM 分类器。(请参阅代码。)

支持向量回归

SVM 主要用于分类任务,但也可经过调整用于回归。SVM 回归被视为一种非参数化方法,因为它依赖核函数。在线性回归中,响应变量(输出)和预测变量(输入)之间的关系已知。与之不同,支持向量回归 (SVR) 的目标是找到这种关系。SVR 通过识别在指定的容差边距(简称为边距)内能够最优拟合数据的超平面来实现这一点,同时保持预测误差为最小。

SVR 的工作原理与支持向量机分类器相同,只是 SVR 旨在预测连续值而非离散类。SVR 可以通过使用不同的核类型处理线性和非线性数据。使用核方法,您可以通过将数据映射到高维空间来执行非线性回归。

为什么支持向量机很重要

SVM 的优点

SVM 是机器学习人工智能中最受欢迎的有监督学习算法之一,主要是因为它们能有效处理高维数据和复杂决策边界。支持向量机的主要优点包括:

  • 数据通用性。SVM 在处理高维和非结构化数据集时特别有效。支持向量机可用于线性和非线性数据,使其广泛适用于许多应用。
  • 稳健性。由于正则化参数控制在训练数据上实现低误差和最小化权重范数之间的权衡,SVM 在高维空间中不易出现过拟合。
  • 可解释性。线性 SVM 分类器创建的决策边界清晰且可解释,有助于理解模型预测并作出明智决策。
  • 准确性。SVM 对于较小数据集非常准确和有效,尤其是在维数超出采样数的情况下。

SVM 应用

上述优点使支持向量机成为多种应用中数据建模的极具吸引力的选择,这些应用有:

  • 自然语言处理。SVM 广泛用于 NLP 任务,如通过将文本分为若干类别来进行垃圾邮件检测和情绪分析。
  • 计算机视觉。SVM 可用于图像分类任务,如手写识别、人脸或目标检测,以及作为医学诊断工具对可能指示存在肿瘤的 MRI 影像进行分类。
  • 信号处理。SVM 也应用于信号数据,用于异常检测、语音识别和生物医学信号分析等任务。
  • 异常检测。SVM 经过训练可以找到将正常数据与异常分离的超平面。
  • 生物信息学。SVM 应用于生物数据分类,如蛋白质分类和基因表达谱分析。
具有真实值图和 SVM 分类图的高光谱 RGB 图像。

使用 SVM 分类器进行分类的高光谱图像。(请参阅 MATLAB 代码。)

SVM 的缺点

与所有机器学习模型一样,支持向量机也有局限性:

  • 大型数据集。由于高计算成本和内存要求,SVM 不适合处理大型数据集。虽然核方法使支持向量机能够处理非线性数据,但其计算成本高昂。SVM 需要求解二次优化问题。对于大型数据集,核矩阵也会很大,从而增加了内存要求。
  • 含噪数据。SVM 不适合处理含噪数据,因为 SVM 旨在使类之间的边距最大化。
  • 可解释性。虽然线性 SVM 可解释,但非线性 SVM 不可解释。非线性 SVM 中涉及的复杂变换使决策边界难以解释。
在显示的机器学习算法绘图中,x 轴表示可解释性,y 轴表示预测能力。SVM 可解释性低,但预测能力强。

常见的机器学习算法的预测能力和可解释性比较。

使用 MATLAB 的支持向量机

使用 MATLAB®Statistics and Machine Learning Toolbox™,您可以训练、评估 SVM 模型和使用 SVM 模型进行预测以用于分类和回归。MATLAB 提供了构建高效支持向量机模型的工具,涵盖特征选择和超参数调节以及交叉验证和性能度量等。MATLAB 中的低代码机器学习 App 使您能够以交互方式训练和评估 SVM,生成 C/C++ 代码并部署到 CPU 和微控制器,无需自己编写代码。

预处理数据

为确保结果准确,数据必须无离群值且准备好用于模型训练。使用 MATLAB,您可以执行清洗任务,如处理缺失值和离群值、归一化数据和平滑数据。您可以使用数据预处理实时编辑器任务或数据清洗器以交互方式预处理数据。这些 App 还可以生成代码。

MATLAB 支持各种数据类型,如时间序列数据、文本、图像和音频。专用工具箱,如 Audio Toolbox™Signal Processing Toolbox™,提供特征提取功能,可用于测量不同领域的独特特征并重用中间计算。

训练 SVM 模型

您可以使用 fitcsvmfitrsvm 函数训练 SVM 模型以执行二类分类或多类分类以及回归任务。对于非线性支持向量机,支持若干核函数(如线性、多项式和 RBF),您也可以创建并指定自定义核函数(如 Sigmoid)。

您还可以使用分类学习器回归学习器以交互方式训练 SVM 模型。通过这些 App,您可以执行从训练到调节的 SVM 模型完整工作流,而无需编写代码。您可以使用这些 App 浏览数据、选择特征、执行自动化训练、优化超参数和评估结果。

截图:多个 SVM 模型的验证准确度,以及由线性 SVM 模型建模的电离层数据的验证混淆矩阵。

使用分类学习器创建的验证混淆矩阵。(请参阅 MATLAB 代码。)

这些 App 可以生成 C/C++ 代码并导出 SVM 模型,便于您共享结果并在 App 外进一步研究。例如,您可以从分类学习器或回归学习器导出支持向量机模型,并将其导入试验管理器中以执行其他任务,如更改训练数据、调整超参数搜索范围和运行自定义训练试验。

进行预测

在训练 SVM 模型后,使用 predict 函数预测标签。您可以在 Simulink 中使用 ClassificationSVM PredictRegressionSVM Predict 模块对经过训练的 SVM 模型进行仿真。

评估结果

您可通过编程方式使用 confusionchartrocmetrics 等函数或以交互方式评估 SVM 模型的性能。使用机器学习 App 可以比较不同模型的性能,找到最适合您的数据的模型。

在分类学习器中训练分类器后,您可以基于准确性比较模型,通过绘制类预测可视化分类器结果,以及使用混淆矩阵、ROC 曲线或精确率召回率曲线检查性能。

同样,在回归学习器中,您可以基于模型度量比较模型,在响应图中或通过绘制实际响应对预测响应的图可视化回归结果,以及使用残差图评估模型。

绘图:支持向量机的预测响应显示为一条线,真实响应点散布在该线附近。

在回归学习器中训练的回归模型的实际响应对预测响应的图。点越接近线,预测效果越好。(请参阅 MATLAB 代码。)