# 机器学习中的支持向量机

> 原文： [https://machinelearningmastery.com/support-vector-machines-for-machine-learning/](https://machinelearningmastery.com/support-vector-machines-for-machine-learning/)

支持向量机可能是最流行和最受关注的机器学习算法之一。

它们在20世纪90年代开发时非常受欢迎，并且仍然是高表现算法的首选方法，几乎​​没有调整。

在这篇文章中，您将发现支持向量机（SVM）机器学习算法。阅读这篇文章后你会知道：

*   如何解开用于指代支持向量机的许多名称。
*   SVM在模型实际存储在磁盘上时使用的表示形式。
*   如何使用学习的SVM模型表示来预测新数据。
*   如何从训练数据中学习SVM模型。
*   如何最好地为SVM算法准备数据。
*   您可能希望获得有关SVM的更多信息。

SVM是一种令人兴奋的算法，概念相对简单。这篇文章是为那些在统计学和线性代数方面很少或根本没有背景的开发人员编写的。

因此，我们将在此描述中保持高级别，并专注于具体的实现问题。关于为何使用特定方程式或如何使用它们的问题未被涵盖，您可能希望深入了解更多阅读部分。

让我们开始吧。

![Support Vector Machines for Machine Learning](img/d3e69523a5c9c0a9f4c9e5886f637cc8.jpg)

用于机器学习的支持向量机
照片由 [Francisco Barberis](https://www.flickr.com/photos/franbar11/13986168190/) 拍摄，保留一些权利。

## 最大边界分类器

Maximal-Margin分类器是一个假设分类器，可以最好地解释SVM在实践中的工作原理。

数据中的数字输入变量（x）（列）形成n维空间。例如，如果您有两个输入变量，这将形成一个二维空间。

超平面是分割输入变量空间的线。在SVM中，选择超平面以最好地将输入变量空间中的点与它们的类（0级或1级）分开。在二维中，您可以将其视为一条线，并假设我们的所有输入点都可以是完全被这条线隔开。例如：

B0 +（B1 * X1）+（B2 * X2）= 0

其中通过学习算法找到确定线的斜率和截距（B0）的系数（B1和B2），并且X1和X2是两个输入变量。

您可以使用此行进行分类。通过将输入值插入线方程，您可以计算新点是高于还是低于线。

*   在该线上方，等式返回大于0的值，该点属于第一个类（类0）。
*   在该线下方，等式返回小于0的值，该点属于第二类（类1）。
*   接近该行的值返回接近零的值，并且该点可能难以分类。
*   如果值的大小很大，则模型可能对预测更有信心。

线与最近数据点之间的距离称为边距。可以将两个类分开的最佳或最佳线是作为最大边距的线。这称为Maximal-Margin超平面。

边距计算为从直线到最近点的垂直距离。只有这些点与定义线和分类器的构造相关。这些点称为支持向量。它们支持或定义超平面。

使用最大化裕度的优化过程从训练数据中学习超平面。

## 获取免费算法思维导图

![Machine Learning Algorithms Mind Map](img/2ce1275c2a1cac30a9f4eea6edd42d61.jpg)

方便的机器学习算法思维导图的样本。

我已经创建了一个由类型组织的60多种算法的方便思维导图。

下载，打印并使用它。

## 软边距分类器

在实践中，真实数据是混乱的，并且不能与超平面完美分离。

必须放宽最大化分隔类的线的余量的约束。这通常称为软边际分类器。此更改允许训练数据中的某些点违反分隔线。

引入了一组额外的系数，使每个维度的余量摆动空间。这些系数有时称为松弛变量。这增加了模型的复杂性，因为模型有更多参数适合数据以提供这种复杂性。

引入了一个调整参数，简称为C，它定义了所有维度允许的摆动幅度。 C参数定义允许的保证金违规金额。 C = 0没有违规，我们回到上面描述的不灵活的最大边界分类器。 C的值越大，允许越多违反超平面。

在从数据学习超平面期间，位于边缘距离内的所有训练实例将影响超平面的放置并且被称为支持向量。并且由于C影响允许落入边距内的实例数，因此C会影响模型使用的支持向量的数量。

*   C值越小，算法对训练数据越敏感（方差越大，偏差越小）。
*   C值越大，算法对训练数据的敏感度越低（方差越小，偏差越大）。

## 支持向量机（内核）

SVM算法在实践中使用内核实现。

在线性SVM中学习超平面是通过使用一些线性代数转换问题来完成的，这超出了SVM介绍的范围。

一个强有力的见解是线性SVM可以使用任何两个给定观察的内积而不是观察本身来重新描述。两个向量之间的内积是每对输入值的乘积之和。

例如，载体[2,3]和[5,6]的内积是2 * 5 + 3 * 6或28。

使用输入（x）和每个支持向量（xi）之间的点积来预测新输入的等式计算如下：

f（x）= B0 + sum（ai *（x，xi））

这是一个方程，涉及使用训练数据中的所有支持向量计算新输入向量（x）的内积。必须通过学习算法从训练数据估计系数B0和ai（对于每个输入）。

### 线性核SVM

点积称为内核，可以重写为：

K（x，xi）= sum（x * xi）

内核定义新数据和支持向量之间的相似性或距离度量。点积是用于线性SVM或线性核的相似性度量，因为距离是输入的线性组合。

可以使用其他内核将输入空间转换为更高维度，例如多项式内核和径向内核。这被称为 [Kernel Trick](https://en.wikipedia.org/wiki/Kernel_method) 。

期望使用更复杂的内核，因为它允许行分离弯曲或甚至更复杂的类。这反过来可以导致更准确的分类器。

### 多项式核SVM

我们可以使用多项式内核代替点积，例如：

K（x，xi）= 1 + sum（x * xi）^ d

必须手动指定多项式的次数到学习算法。当d = 1时，这与线性内核相同。多项式核允许输入空间中的曲线。

### 径向核SVM

最后，我们还可以有一个更复杂的径向内核。例如：

K（x，xi）= exp（-gamma * sum（（x-xi ^ 2））

其中gamma是必须为学习算法指定的参数。伽玛的良好默认值是0.1，其中γ通常为0 &lt;1。伽马＆lt; 1.径向核非常局部，可以在特征空间内创建复杂区域，如二维空间中的闭合多边形。

## 如何学习SVM模型

需要使用优化过程来解决SVM模型。

您可以使用数值优化过程来搜索超平面的系数。这是低效的，并不是像 [LIBSVM](https://en.wikipedia.org/wiki/LIBSVM) 那样广泛使用的SVM实现中使用的方法。如果将算法实现为练习，则可以使用[随机梯度下降](https://en.wikipedia.org/wiki/Subgradient_method)。

有一些专门的优化程序可以将优化问题重新制定为二次规划问题。最常用的拟合SVM的方法是[顺序最小优化](https://en.wikipedia.org/wiki/Sequential_minimal_optimization)（SMO）方法非常有效。它将问题分解为可以通过分析（通过计算）而不是数字（通过搜索或优化）解决的子问题。

## SVM的数据准备

本节列出了在学习SVM模型时如何最好地准备训练数据的一些建议。

*   **数字输入**：SVM假设您的输入是数字。如果您有分类输入，则可能需要将它们转换为二进制虚拟变量（每个类别一个变量）。
*   **二分类**：本文中描述的基本SVM用于二进制（两类）分类问题。虽然已经开发了用于回归和多分类的扩展。

## 进一步阅读

支持向量机是一个巨大的研究领域。关于这个主题有很多书籍和论文。如果您希望深入了解该技术的背景和理论，本节列出了一些开创性和最有用的结果。

[弗拉基米尔·瓦普尼克（HTG1），这项技术的发明者之一有两本被认为是关于该主题的开创性的书籍。它们非常数学，也很严谨。](https://en.wikipedia.org/wiki/Vladimir_Vapnik)

*   [统计学习理论的本质](http://www.amazon.com/dp/0387987800?tag=inspiredalgor-20)，Vapnik，1995
*   [统计学习理论](http://www.amazon.com/dp/8126528923?tag=inspiredalgor-20)，Vapnik，1998

任何关于机器学习的好书都将涵盖SVM，下面是我最喜欢的一些。

*   [统计学习简介：在R](http://www.amazon.com/dp/1461471370?tag=inspiredalgor-20) 中的应用，第8章
*   [Applied Predictive Modeling](http://www.amazon.com/dp/1461468485?tag=inspiredalgor-20) ，第13章
*   [统计学习要素：数据挖掘，推理和预测](http://www.amazon.com/dp/0387848576?tag=inspiredalgor-20)第12章

有关SVM的无数教程和期刊文章。以下是Cortes和Vapnik关于SVM的开创性论文的链接，以及另一篇精彩的入门教程。

*   [支持 - 向量网络](http://link.springer.com/article/10.1007%2FBF00994018) [PDF]作者：Cortes和Vapnik 1995
*   [用于模式识别的支持向量机教程](http://research.microsoft.com/en-us/um/people/cburges/papers/svmtutorial.pdf) [PDF] 1998

维基百科提供了一些关于该主题的良好（尽管密集）信息：

*   维基百科上的[支持向量机](https://en.wikipedia.org/wiki/Support_vector_machine)
*   [Wikibook on Support Vector Machines](https://en.wikibooks.org/wiki/Support_Vector_Machines)

最后，Q＆amp; A网站上有很多帖子要求简单解释SVM，下面是两个你可能会觉得有用的选择。

*   [支持向量机（SVM）在外行人的意义上是什么意思？](https://www.quora.com/What-does-support-vector-machine-SVM-mean-in-laymans-terms)
*   [请解释支持向量机（SVM），就像我5岁](https://www.reddit.com/r/MachineLearning/comments/15zrpp/please_explain_support_vector_machines_svm_like_i)

## 摘要

在这篇文章中，您发现了用于机器学习的支持向量机算法。你了解到：

*   Maximal-Margin分类器，为理解SVM提供了一个简单的理论模型。
*   软边界分类器，它是Maximal-Margin分类器的修改，用于放宽边距以处理实际数据中的噪声类边界。
*   支持向量机以及如何将学习算法重新配置为点积内核以及如何使用其他内核（如多项式和径向）。
*   如何使用数值优化来学习超平面，并且有效实现使用称为顺序最小优化的备用优化方案。

您对SVM或这篇文章有任何疑问吗？
在评论中提问，我会尽力回答。