在机器学习中支持向量机(SVM)

支持向量机是最受欢迎的机器学习算法之一。它高效且可以在有限数据集上进行训练。但是它是什么呢?

支持向量机(SVM)是什么?

支持向量机是一种使用监督学习创建用于二元分类的算法。这听起来有点复杂。本文将解释SVM及其与自然语言处理的关系。但首先,让我们分析一下支持向量机的工作原理。

SVM如何工作?

考虑一个简单的分类问题,我们有一个具有两个特征x和y以及一个输出(分类为红色或蓝色)的数据。我们可以绘制一个虚拟的数据集,看起来像这样:

在给定这样的数据的情况下,任务是创建一个决策边界。决策边界是一个将数据点的两个类别分开的线。这是相同的数据集,但加上了决策边界:

有了这个决策边界,我们就可以根据数据点相对于决策边界的位置对其所属类别进行预测。支持向量机算法创建了最佳的决策边界,用于分类数据点。

但是,什么是最佳的决策边界呢?

可以说,最佳的决策边界是使其与支持向量之一的距离最大化的决策边界。支持向量是与相反类别最接近的数据点。由于其接近其他类别,这些数据点因其最易被错误分类而造成最大的风险。

因此,支持向量机的训练涉及试图找到最大化支持向量之间间隔的线。

还需要注意的是,由于决策边界的位置是相对于支持向量而定的,它们是决策边界位置的唯一确定因素。其他数据点因此是多余的。因此,训练只需要支持向量。

在这个例子中,形成的决策边界是一条直线。这仅因为数据集只有两个特征。当数据集具有三个特征时,形成的决策边界是一个平面而不是一条直线。当数据集具有四个或更多特征时,决策边界被称为超平面。

非线性可分数据

上面的例子考虑了非常简单的数据,当绘制出来时,可以通过一条线性决策边界分离。考虑另一种情况,其中数据如下所示:

在这种情况下,使用一条线分离数据是不可能的。但是我们可以创建另一个特征z。这个特征可以由方程z = x^2 + y^2定义。我们可以将z添加为三维空间中的第三个轴。

当我们从一个角度观察这个3D图,使得x轴水平,z轴垂直,我们会得到这样的视图:

z值表示一个点相对于旧的XY平面中其他点离原点有多远。因此,靠近原点的蓝点具有较低的z值。

而远离原点的红点具有较高的z值,将它们与它们的z值一起绘制,我们可以得到一个可以用线性决策边界划分的清晰分类,如所示。

这是支持向量机中使用的一个强大的思想。更一般地说,它是通过将维度映射到更高维度的思想,以便数据点可以通过线性边界分离。负责这一点的函数是核函数。核函数有许多种,例如sigmoid、线性、非线性和RBF。

为了更高效地映射这些特征,SVM使用了一个kernel trick

机器学习中的SVM

支持向量机(Support Vector Machine)是机器学习中使用的许多算法之一,与流行的其他算法如Decision Trees和神经网络一起使用。它因为能在较少的数据上表现良好而受到青睐。它常用于以下几个方面:

  • 文本分类:将文本数据(如评论和评价)分类到一个或多个类别中
  • 人脸检测:分析图像以检测人脸,以便添加滤镜等功能
  • 图像分类:与其他方法相比,支持向量机能高效地对图像进行分类。

文本分类问题

互联网上充斥着大量的文本数据。然而,其中很多数据都是非结构化和未标记的。为了更好地利用这些文本数据并更好地理解它,我们需要进行分类。文本分类的例子包括:

  • 将推文分类为不同主题,以便人们可以关注他们想要的主题
  • 将电子邮件分类为社交、促销或垃圾邮件
  • 将评论分类为公共论坛中的恶意或淫秽言论

SVM如何进行自然语言分类

支持向量机用于将文本分类为属于特定主题的文本和不属于该主题的文本。要做到这一点,首先需要将文本数据转换和表示为具有多个特征的数据集。

一种方法是为数据集中的每个单词创建特征。然后,对于每个文本数据点,记录每个单词出现的次数。因此,假设数据集中有n个唯一单词,你将在数据集中有n个特征。

此外,你还将为这些数据点提供分类。尽管这些分类是文本标签,但大多数支持向量机实现期望使用数字标签。

因此,在训练之前,你需要将这些标签转换为数字。一旦数据集准备好,你就可以使用这些特征作为坐标,使用支持向量机模型对文本进行分类。

在Python中创建SVM

要在Python中创建支持向量机(SVM),你可以使用sklearn.svm库中的SVC类。下面是如何在Python中使用SVC类构建SVM模型的示例:

from sklearn.svm import SVC 

# 加载数据集 
X = ... y = ... 

# 将数据分割为训练集和测试集 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=19) 

# 创建SVM模型 
model = SVC(kernel='linear') 

# 在训练数据上训练模型 
model.fit(X_train, y_train) 

# 在测试数据上评估模型 
accuracy = model.score(X_test, y_test) 

print("准确率:", accuracy) 

在这个例子中,我们首先从sklearn.svm库中导入SVC类。然后,我们加载数据集并将其分割为训练集和测试集。

接下来,我们通过实例化一个SVC对象并将kernel参数设置为'linear'来创建一个SVM模型。然后,我们使用fit方法在训练数据上训练模型,并使用score方法在测试数据上评估模型。score方法返回模型的准确率,我们将其打印到控制台。

你还可以为SVC对象指定其他参数,例如控制正则化强度的C参数和控制某些核函数的核系数的gamma参数。

SVM的好处

以下是使用支持向量机(SVM)的一些好处:

  • 高效:SVM在训练时通常很高效,尤其是在样本数量较大时。
  • 对噪声鲁棒:SVM对训练数据中的噪声相对鲁棒,因为它们试图找到最大间隔分类器,这比其他分类器对噪声不敏感。
  • 内存高效:SVM只需要将训练数据的子集存储在内存中,使其比其他算法更加内存高效。
  • 在高维空间中有效:即使特征数量超过样本数量,SVM仍然可以表现出色。
  • 多功能:SVM可用于分类和回归任务,并且可以处理各种类型的数据,包括线性和非线性数据。

现在,让我们来探索一些学习支持向量机(SVM)的最佳资源。

学习资源

支持向量机简介

这本《支持向量机简介》全面而渐进地介绍了基于核的学习方法。

预览 产品 评分 价格


An Introduction to Support Vector Machines and Other Kernel-based Learning Methods $69.00

它为您提供了牢固的支持向量机理论基础。

支持向量机应用

第一本书着重介绍了支持向量机的理论,而这本关于支持向量机应用的书则侧重于其实际应用。

预览 产品 评分 价格


Support Vector Machines Applications $87.46

它探讨了SVM在模式识别、图像处理和计算机视觉中的应用。

支持向量机(信息科学与统计学)

本书介绍了支持向量机(SVMs)在各种应用中的有效原理。

预览 产品 评分 价格


Support Vector Machines (Information Science and Statistics) $152.47

作者强调了几个因素导致SVM的成功,包括其在有限可调参数的情况下表现良好、对各种错误和异常具有抵抗力以及与其他方法相比的高效计算性能。

核函数学习

《核函数学习》是一本介绍支持向量机(SVMs)和相关核技术的书。

预览 产品 评分 价格


Learning with Kernels: Support Vector Machines, Regularization, Optimization, and Beyond (Adaptive… $80.00

它旨在为读者提供数学基础和使用核算法进行机器学习所需的知识。本书旨在全面而易于理解地介绍SVMs和核方法。

使用Sci-Kit Learn的支持向量机

这个在线课程由项目网络提供,教学如何使用流行的机器学习库Sci-Kit Learn实现SVM模型。

此外,您还将学习SVM的理论以及它们的优点和局限性。该课程适合初学者,需要约2.5小时的学习时间。

Python中的支持向量机:概念和代码

优达学城的这门付费在线课程提供多达6小时的基于视频的指导,并附带认证。

它涵盖了支持向量机(SVM)以及如何在Python中坚固地实现它们。此外,它还涵盖了支持向量机在业务应用中的应用。

机器学习和人工智能:Python中的支持向量机

在这门课程中,您将学习如何使用支持向量机(SVM)进行各种实际应用,包括图像识别、垃圾邮件检测、医学诊断和回归分析。

您将使用Python编程语言为这些应用实现机器学习模型。

总结

在本文中,我们简要了解了支持向量机背后的理论。我们了解了它们在机器学习和自然语言处理中的应用。

我们还看到了使用scikit-learn实现它的样子。此外,我们还讨论了支持向量机的实际应用和好处。

虽然本文只是一个简介,但建议您查阅更多详细信息的附加资源,以更深入地了解支持向量机。鉴于它们的多功能和高效性,了解支持向量机对于成长为数据科学家和机器学习工程师是值得的。

接下来,您可以查看顶级machine learning models

类似文章