支持向量机 (SVM) 是一种有监督机器学习算法,它能找到分离两个类的数据点的最佳超平面。
支持向量机是一种有监督机器学习算法,常用于信号处理、自然语言处理 (NLP)、语音和图像识别等应用中的分类和回归问题。SVM 算法的目标是找到一个超平面,该超平面以可能的最佳效果将一个类的数据点与另一个类的数据点分离。此超平面在二维空间中是一条直线,在 n 维空间中是一个平面,其中 n 是数据集中每个观测值的特征数量。数据中可能存在多个可用于分离类的超平面。SVM 算法推断出的最佳超平面是使两个类之间边距最大化的超平面。
边距是指平行于超平面的内部不含数据点的平板的最大宽度。标记此平行平板的边界且最接近分离超平面的数据点就是支持向量。支持向量指用于确定分离超平面的位置的训练观测值的子集。
SVM 建模的工作流
构建支持向量机模型的典型工作流包括以下步骤:
预处理数据
特征提取将原始数据变换为可以处理的数值特征,同时保留原始数据集中的信息。降维方法,如主成分分析 (PCA),可以减少特征数量,同时保留最重要的信息。这种方法使支持向量机模型更稳健,能够处理复杂数据集。
在数据处理完成后,将数据拆分为训练集和测试集。使用交叉验证以最佳方式拆分数据。SVM 模型基于训练数据集进行训练,测试数据集用于评估模型在陌生数据上的性能。
选择核函数
根据数据分布,选择合适的核函数(线性、多项式、RBF 等)。当无法线性分离时,核函数将数据变换为更高维空间,使类更容易分离。
SVM 的类型 | Mercer 核 | 描述 |
高斯或径向基函数 (RBF) | 一类学习。 |
|
线性 | 二类学习。 | |
多项式 | ||
Sigmoid | 该函数仅当 |
训练 SVM 模型
构建 SVM 模型并使用训练数据集对其进行训练。训练支持向量机 (SVM) 相当于求解一个二次优化问题,其目标是找到一个能够最大化类别之间边距的超平面。支持向量机算法识别支持向量并确定最佳超平面。使用经过训练的模型基于最佳超平面对新数据和陌生数据点进行分类。
评估 SVM 模型
使用测试数据集测试模型。使用准确度、混淆矩阵、精确率、F1 分数或召回率等度量评估模型性能。
调节超参数
调整超参数以提高模型性能。使用贝叶斯优化等搜索方法,通过概率模型找到最佳超参数。
SVM 分类器的类型
线性支持向量机
线性 SVM 用于有且只有两个类的线性可分数据。这种类型的支持向量机算法使用线性决策边界来分离这两个类的所有数据点。
该 SVM 算法只能为线性可分问题找到这样的超平面。对于大多数复杂任务(其中数据不可分),支持向量机可以使用软边距,获得一个可分离许多(但并非所有)数据点的超平面。算法最大化软边距,允许少量误分类。

软边距 SVM 允许 class -1(蓝色)中存在一个数据点误分类。(参阅 MATLAB 文档。)
非线性支持向量机
SVM 也用于非线性分类和回归任务。对于非线性可分数据,非线性支持向量机使用核函数来变换特征。变换后特征的数量由支持向量的数量确定。
核函数将数据映射到一个不同的(通常是更高维的)空间。这种变换可以将复杂的非线性决策边界简化为更高维映射特征空间中的线性边界,从而使类更容易分离。在此过程(通常称为核方法)中,不必对数据进行显式变换,否则计算成本会很高。非线性数据的核函数包括多项式、径向基函数(高斯)和多层感知器机或 Sigmoid(神经网络)。

在 MATLAB 中使用高斯核函数训练的非线性 SVM 分类器。(请参阅代码。)
支持向量回归
SVM 主要用于分类任务,但也可经过调整用于回归。SVM 回归被视为一种非参数化方法,因为它依赖核函数。在线性回归中,响应变量(输出)和预测变量(输入)之间的关系已知。与之不同,支持向量回归 (SVR) 的目标是找到这种关系。SVR 通过识别在指定的容差边距(简称为边距)内能够最优拟合数据的超平面来实现这一点,同时保持预测误差为最小。
SVR 的工作原理与支持向量机分类器相同,只是 SVR 旨在预测连续值而非离散类。SVR 可以通过使用不同的核类型处理线性和非线性数据。使用核方法,您可以通过将数据映射到高维空间来执行非线性回归。
SVM 的优点
SVM 应用

使用 SVM 分类器进行分类的高光谱图像。(请参阅 MATLAB 代码。)
SVM 的缺点
与所有机器学习模型一样,支持向量机也有局限性:
- 大型数据集。由于高计算成本和内存要求,SVM 不适合处理大型数据集。虽然核方法使支持向量机能够处理非线性数据,但其计算成本高昂。SVM 需要求解二次优化问题。对于大型数据集,核矩阵也会很大,从而增加了内存要求。
- 含噪数据。SVM 不适合处理含噪数据,因为 SVM 旨在使类之间的边距最大化。
- 可解释性。虽然线性 SVM 可解释,但非线性 SVM 不可解释。非线性 SVM 中涉及的复杂变换使决策边界难以解释。
使用 MATLAB® 和 Statistics and Machine Learning Toolbox™,您可以训练、评估 SVM 模型和使用 SVM 模型进行预测以用于分类和回归。MATLAB 提供了构建高效支持向量机模型的工具,涵盖特征选择和超参数调节以及交叉验证和性能度量等。MATLAB 中的低代码机器学习 App 使您能够以交互方式训练和评估 SVM,生成 C/C++ 代码并部署到 CPU 和微控制器,无需自己编写代码。
预处理数据
为确保结果准确,数据必须无离群值且准备好用于模型训练。使用 MATLAB,您可以执行清洗任务,如处理缺失值和离群值、归一化数据和平滑数据。您可以使用数据预处理实时编辑器任务或数据清洗器以交互方式预处理数据。这些 App 还可以生成代码。
MATLAB 支持各种数据类型,如时间序列数据、文本、图像和音频。专用工具箱,如 Audio Toolbox™ 和 Signal Processing Toolbox™,提供特征提取功能,可用于测量不同领域的独特特征并重用中间计算。
训练 SVM 模型

使用分类学习器创建的验证混淆矩阵。(请参阅 MATLAB 代码。)
这些 App 可以生成 C/C++ 代码并导出 SVM 模型,便于您共享结果并在 App 外进一步研究。例如,您可以从分类学习器或回归学习器导出支持向量机模型,并将其导入试验管理器中以执行其他任务,如更改训练数据、调整超参数搜索范围和运行自定义训练试验。
进行预测
在训练 SVM 模型后,使用 predict 函数预测标签。您可以在 Simulink 中使用 ClassificationSVM Predict 或 RegressionSVM Predict 模块对经过训练的 SVM 模型进行仿真。
评估结果
您可通过编程方式使用 confusionchart
和 rocmetrics
等函数或以交互方式评估 SVM 模型的性能。使用机器学习 App 可以比较不同模型的性能,找到最适合您的数据的模型。
在分类学习器中训练分类器后,您可以基于准确性比较模型,通过绘制类预测可视化分类器结果,以及使用混淆矩阵、ROC 曲线或精确率召回率曲线检查性能。
同样,在回归学习器中,您可以基于模型度量比较模型,在响应图中或通过绘制实际响应对预测响应的图可视化回归结果,以及使用残差图评估模型。

在回归学习器中训练的回归模型的实际响应对预测响应的图。点越接近线,预测效果越好。(请参阅 MATLAB 代码。)
资源
通过文档、示例、视频等拓展您的知识。
30天免费试用
快速入门选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:United States。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)