在机器学习领域,支持向量机(SVM)曾被认为是最强大的算法之一。尽管与神经网络相比,SVM在计算上更为友好,并且在工业界得到了广泛的应用。本文将讨论SVM中最重要的问题,这些问题将帮助清晰地理解SVM,并为数据科学面试做准备,内容涵盖从基础到复杂的概念。
SVM是一种监督型机器学习算法,它可以处理分类和回归问题。在分类问题中,SVM试图通过找到一个最大化训练数据中不同类别数据点之间间隔的超平面来区分不同类别的数据点。简而言之,SVM试图选择一个尽可能广泛地分隔数据点的超平面,因为这种间隔最大化可以提高模型在测试或未见过的数据上的准确性。
支持向量是位于间隔本身上的那些实例。对于SVM来说,决策边界完全由使用支持向量来确定。任何不是支持向量(不在间隔边界上)的实例都不会有任何影响;可以移除它们,添加更多实例,或者移动它们的位置,只要它们保持在间隔之外,就不会影响决策边界。在计算预测时,只涉及支持向量,而不是整个训练集。
SVM的目标是找到一个线性可分的最优超平面,对于直接线性不可分的数据集,它通过将原始数据转换到新空间来扩展其公式,这也被称为核技巧。
硬间隔SVM仅在数据线性可分时有效,这类SVM对异常值非常敏感。但主要目标是在保持尽可能大的间隔和限制间隔违规(即实例最终落在间隔中间或错误一侧)之间找到良好的平衡,这种方法被称为软间隔SVM。
由max(0, 1 - t)
定义的函数称为Hinge损失函数。当t >= 1
时,即t
的值大于或等于1时,Hinge损失函数等于0。如果t < 1
,其导数(斜率)等于-1;如果t > 1
,则为0。它在t = 1
处不可微分。Hinge损失函数对错误分类的实例进行惩罚,并且随着实例被分类得离正确区域越远,惩罚越大。
核是一个能够在高维空间中计算实例映射的点积的函数,而不需要实际将所有实例转换到高维特征空间并计算点积。这种技巧使得整个过程比实际转换计算点积要计算成本低廉得多,这就是核技巧的精髓。
C参数控制着保持尽可能大的间隔和限制间隔违规之间的平衡:C值较小会导致间隔更宽但间隔违规更多,而C值较高会减少间隔违规,但最终导致间隔更小并过拟合。这里的事情变得有点复杂,因为有两个相互冲突的目标:尽可能减少松弛变量以减少间隔违规,以及尽可能减小W(权重矩阵)以增加间隔。这就是C超参数的作用,它允许定义这两个目标之间的权衡。
如果存在一个函数ϕ
将a和b映射到另一个空间,使得K(a, b) = ϕ(a)^T · ϕ(b)
,则函数被称为核函数。因此,可以使用K作为核,因为只知道存在一个映射ϕ
,即使不知道ϕ
函数是什么。这些是核的非常好的事情。以下是一些核函数:
将SVM制定为回归问题时,需要反转目标:不是试图适应两个类别之间最大的可能间隔,同时限制间隔违规,而是现在对于SVM回归,它试图适应尽可能多的实例在间隔之间,同时限制间隔违规。
在超平面的间隔之外添加更多实例不会影响决策边界,决策边界完全由位于间隔边缘的实例决定,这些实例被称为支持向量。
为了满足软间隔目标,需要为每个样本引入松弛变量ε>=0;它测量任何特定实例被允许违反间隔的程度。这里的事情变得有点复杂,因为有两个相互冲突的目标:尽可能减少松弛变量以减少间隔违规,以及尽可能减小w(权重矩阵)以增加间隔。这就是C超参数的作用,它允许定义这两个目标之间的权衡。
给定一个受约束的优化问题,称为原始问题,可以表达一个不同但密切相关的问题,称为其对偶问题。对偶问题的解决方案通常为原始问题的解决方案提供下界,但在某些条件下,它甚至可能与原始问题有相同的解决方案。幸运的是,SVM问题满足这些条件,所以可以选择解决原始问题或对偶问题;它们都将有相同的解决方案。
SVM分类器可以给出测试实例与决策边界之间的距离作为输出,因此可以使用它作为置信度分数,但不能直接将这个分数转换为类别概率。但是,如果在构建SVM模型时设置probability=True,那么在训练后它将使用逻辑回归对SVM的分数进行校准。通过使用这种技术,可以为SVM模型添加predict_proba()和predict_log_proba()方法。