学习贯彻党的二十届三中全会精神

支持向量机

支持向量机(Support 向量 Machine,SVM)是一类有监督学习方式,是对数据进行二元分类的广义线性分类器,其决策边界是对学习样本求解的最大边距超平面。SVM也可以应用于多元分类问题和回归问题。

SVM的工作原理是将数据映射到高维特征空间,在特征空间里利用算法求出一个超平面实现数据的分类,这样即使数据不是线性可分,也可以对该数据点进行分类。其数学模型包含最优决策边界、支持向量和超平面等。其中,最优决策边界是指能够最大化分类间隔的边界,而支持向量则是决定这个边界的关键样本点。超平面则是作为SVM分类的决策边界,将数据分为不同的类别。SVM的起源可追溯到1936年,Ronald Fisher(罗纳德·费雪)首次提出的线性判别分析模式识别奠定了基石。随着对最大边距决策边界的理论研究的深入,以及基于松弛变量的规划问题求解技术的出现和VC维概念的提出,SVM的理论基础逐渐得以确立。这一理论基础主要是在1960年代到1970年代由弗拉基米尔·瓦普尼克(Vladimir Vapnik)和阿列克谢·切尔沃涅基(Alexey·Chervonenkis)等人提出的。

SVM包含多种类型,其中基本算法主要分为线性SVM和非线性SVM。此外,SVM的训练算法也多种多样,包括块算法、分解算法和增量算法等。在模型选择和验证方面,可以使用单一验证估计、留一法、k遍交叉验证法以及基于样本相似度的方法来进行评估。由于其出色的分类和回归性能,SVM在多个领域都有广泛的应用,包括化工生产、数据挖掘模式识别人工智能等。

历史沿革

萌芽

SVM的起源可以追溯到1936年,罗纳德·费雪(Ronald Fisher)首次提出的线性判别分析为模式识别领域的发展奠定了坚实基础。这一开创性的工作不仅引发了研究者们对分类问题的深入研究,还为后续的技术发展提供了重要指导。随后,在1950年,阿伦萨因(Aronszajn)提出了“核再现理论”,为支持向量机中的核方法提供了理论基础,使得SVM能够处理非线性问题,从而极大地扩展了其应用范围。到了1957年时,弗兰克·罗森布拉特(Frank Rosenblatt)发明了一种名为感知器的线性分类器,这成为了SVM的前身之一。感知器的出现为SVM处理线性分类问题提供了重要的思路和方法。1963年,弗拉基米尔·万普尼克和雷纳(Lerner)提出了更一般的肖像算法(Portrait Algorithm),这一研究为SVM的出现做了进一步的铺垫。到了1964年,艾泽曼(Aizerman)等人将内核视为特征空间点积的几何解释,这为SVM中的核函数提供了直观的理解。这一系列的研究和理论发展逐步构建了SVM的理论框架。

统计学领域内的发展

1968年,史密斯(Smith)引入了松弛变量,这一创新增强了SVM处理含噪声和不可分数据的能力,提高了其在实际问题中的适用性。1973年,杜达(Duda)和H·L·A·哈特(Hart)提出了宽边界超平面思想,为SVM的进一步发展提供了新方向,并展示了其在模式识别领域的广阔应用前景。次年,拉基米尔·瓦普尼克和阿列克谢·切尔沃涅基的作品则催生了“统计学习理论”这一新领域,而SVM逐渐成为其核心组成部分。1979年,他们德语译本《模式识别中的统计学习理论》的出版,有力的推动了SVM和统计学习理论在国际上的传播和接纳。

进入80年代后,哈松(Hassoun)的博士论文为SVM研究提供了重要的参考资源。与此同时,统计力学与SVM开始交叉融合,例如安劳夫(Anlauf)和别赫(Biehl)提出的宽边界超平面观点,就为SVM提供了新的理论支撑。

随着对模式识别中最大边距决策边界和松弛变量规划问题的深入研究,以及VC维概念的提出,SVM逐渐完善并理论化。这些理论成果为SVM在各领域的应用奠定了坚实基础,使其成为现代机器学习领域的重要工具之一。

正式提出

1992年的COLT会议是SVM发展史上的一个重要里程碑,会议上首次介绍了接近现代形式的SVM算法,引起了学术界的广泛关注。同年,伯恩哈德·博泽尔(Bernhard E. Boser)、伊莎贝尔·盖翁(Isabelle M. Guyon)和弗拉基米尔·万普尼克通过使用核方法实现了非线性SVM,这为处理更复杂的数据集提供了可能性。

1995年,科琳娜·科尔特斯等人正式提出了SVM算法,该算法在小样本、非线性及高维模式识别任务中展现出了卓越的性能,并成功应用于函数拟合等机器学习问题。同年,科琳娜·科尔特斯和弗拉基米尔·瓦普尼克提出了软间隔SVM,这是一个基于统计学习的二类分类模型。通过最大化分类间隔来最小化结构风险,软间隔SVM有效增强了模型的稳定性和泛化能力,也使得SVM模型得到了进一步的完善和推广,逐渐形成了现在广泛使用的标准模型。SVM作为一种用于识别和映射相似数据的系统,SVM在多个领域都有广泛的应用,例如文本分类、手写字符识别、图像分类等。

1998年,巴特利特(Bartlett)等人为硬边界SVM提供了严格的统计上界,为SVM的性能评估提供了明确指导。随后,肖·泰勒(Shawe-Taylor)和克里斯蒂亚尼进一步探讨了软边界算法的泛化情况,并为回归问题提供了统计上界。这些理论突破和应用研究不仅深化了人们对SVM的理解,也为其在机器学习领域的广泛应用奠定了坚实基础。

与深度学习结合

随着1999年计算机处理数据速度的飞速提升,GPU(图形处理单元)的出现极大地推动了人工智能领域的发展。这一时期,神经网络与支持向量机(SVM)在多个领域开始展开激烈竞争。支持向量机,作为一种有监督的学习模型,通过寻找一个最优超平面来将不同类别的样本分开,具有出色的分类和回归能力。

然而,随着数据量的激增和计算能力的提升,神经网络开始在许多任务上展现出比支持向量机更强大的性能。特别是在2006年,多伦多大学计算机系教授杰弗里·辛顿提出了深度学习的概念,为神经网络的发展注入了新的活力。深度学习通过构建深度神经网络,能够自动提取数据的复杂特征,从而在图像识别、语音识别等领域取得了突破性的进展。

2009年,ImageNet数据集的问世为机器学习领域带来了海量的训练数据。这个包含超过1400万张人工标注图像的数据集,为神经网络的训练提供了丰富的资源,进一步推动了神经网络的发展和应用。在这一背景下,支持向量机也开始与神经网络相结合,形成了支持向量回归(SVR)等新的模型,以更好地应对复杂的数据分析问题。

多角度协同发展

随着深度学习的发展,SVM并未停滞不前,而是寻求与深度学习结合,利用各自的优势来提升性能。深度学习在处理海量数据提取复杂特征方面表现出色,而SVM在特征空间中进行精确分类。结合使用时,深度学习的特征提取能力与SVM稳定的分类性能相互补充,形成有效的分类策略。此外,两者在理论和实践层面相互促进,深度学习的进展为SVM提供新思路和方法,SVM的理论基础也为深度学习提供有益的借鉴。

基本原理

相关概念

分类

SVM的分类是它通过找到一个超平面来划分两类样本点,并最大化该超平面与两侧样本点之间的间隔。在数据线性可分的情况下,SVM通过优化算法找到这个最大间隔超平面,以实现最优分类。

回归

SVM最初是为分类问题设计的,通过寻找最大间隔超平面来分隔不同的数据点,以实现分类的目的。然而随着研究的深入,SVM的应用已经扩展到了回归问题,例如SVM回归(SVR),SVR利用SVM的原理来解决回归问题,为数据分析提供了新的视角。SVR问题可形式化为,

其中为正则化常数,为不敏感损失()函数。

核技巧

核技巧是SVM解决线性不可分问题的关键所在。当遇到线性不可分的数据集时,核技巧通过特征映射将数据从原始空间转换到更高维的特征空间,从而使原本非线性可分的数据在新空间中变得线性可分。核函数作为核技巧的核心,接受两个样本作为参数,并返回实数值,这个实数值代表了两个样本在高维空间中的相似度或点积。通过使用核函数,无需显式计算高维空间的内积,这大大降低了计算复杂度。这种映射使得SVM能够充分发挥其强大的分类能力。具体的核函数表达式为:

这里的函数即为核函数(kernel 函数),通过训练样本的核函数展开,可以显示出模型的最优解。这种展开方式也被称为支持向量展式(support vector expansion)。除此以外常见的核函数还有线性核、多项式核、径向基函数核等。

拉格朗日乘子法

约瑟夫·拉格朗日乘子法(Lagrange 乘法器s)是一种在多元函数的一组约束条件下寻找极值的方法。通过引入拉格朗日乘子,该方法将原本含有个变量和个约束条件的最优化问题转化为一个包含个变量的无约束优化问题,从而极大地简化了求解过程。假设是一个维向量,目标是找到的值,使得目标函数达到最小,同时满足的约束条件。其最优化问题可表达为:

其中称为拉格朗日乘子,称为最优点。可以定义拉格朗日函数为:

工作原理

SVM是一种机器学习算法,它通过找到一个能够最好地分隔不同类别数据点的决策边界来工作。这个边界的选择标准在于最大化其与最近数据点之间的距离,这些特定的数据点被称为支持向量。在面对数据不是完美线性可分时,SVM采用松弛变量来允许一些数据点落在边界的错误一侧。此外,SVM利用核函数将数据映射到高维空间,以找到在这个新空间中的最佳决策边界,这对于原始空间中线性不可分的数据集较为有效。其超平面的分类函数表达式为:

, (1)

其中,式(1)中表示向量与向量的点积,为偏差差项。令时定义数据点落在超平面上,对于回归类问题,目标函数可修正为:

, (2)

式(2)中表示向量范数,c为惩罚参数,约束条件为:

, (3)

式(3)中为表征误差大小的松弛变量,通过特定的核目函数,就能够计算出低维空间向量经过映射后在高维空间的向量点积值,核函数定义式为:

。 (4)

数学模型

最优决策边界

SVM的目标就是找到一个最大间隔决策边界(Maximum Margin Hyperplane),这个决策边界能够将不同类别的样本分隔开,并且使得两侧的间隔最大化。间隔指的是超平面到最近样本点的距离,也就是支持向量的距离。最大间隔决策边界就是通过这些性质形成的。由于间隔最大化,它对于数据就具有更好的泛化表现,从而能够保持较好的分类性能。再通过核函数(内核 函数)的引入,SVM就可以处理非线性可分的数据,并且能够在高维空间中有效地找到最优决策边界。

其中,由距离公式可知,支持向量到决策边界的距离为,又因为在上,所以有,所以支持向量到决策边界的间隔为,所以,要满足,使决策边界与离其最近的样本点之间的间隔最大,也就是要令的值最小,才能找到最优决策边界。

超平面

超平面是在维欧氏空间中余维度等于一的线性子空间,即超平面具有维度。它是平面中的直线和空间中的平面的推广,仅在时被称为“超平面”,其本质是自由度比空间维度小1。

对于SVM而言,超平面是最适合将两类数据分开的决策边界。判定“最适合”的标准在于寻找一个超平面,使得离该超平面最近的点之间的间隔最大化(这个间隔指的是超平面与最近样本点之间的距离,也称为支持向量的距离)。通过这样做,SVM能够降低泛化误差,提高分类的准确性。简而言之,SVM并不要求所有的点都远离超平面,而是追求超平面能够让离它最近的点具有最大的间隔。其中维超平面可特征化表示为:,其中和到都是标量参数。

支持向量

支持向量集是指在训练集中,对分类提供最多信息的点的集合。例如,上图中A、B、C三点组成的集合就是一个支持向量集。支持向量是由描述超平面的参数组成的向量,它们是与分类边界距离最近的训练点。因此,SVM的分类边界完全由支持向量决定,与其他点无关。假设超平面能将训练样本正确分类,即对于,若,则有;若,则有,即:

距离超平面最近的这几个训练样本点使式的等号成立,则被称为“支持向量”(support vector)。

算法

基本算法

SVM的基本算法主要包括线性SVM和非线性SVM。其核心思想都是寻找一个最优超平面,以最大化不同类别样本之间的间隔,从而实现分类。

线性SVM

线性SVM是SVM算法的一种特殊形式,适用于数据集在高维空间中是线性可分的情况。在线性SVM中,求解过程通常被转化为一个二次规划问题。这个问题涉及到最小化一个包含权重向量和偏置项的目标函数,同时满足一系列约束条件。这些约束条件确保了分类超平面能够正确地将不同类别的样本分隔开。为了求解这个二次规划问题,可以采用多种算法,如拉格朗日乘数法(Lagrange Multiplier Method)和序列最小优化(Sequential Minimal Optimization,SMO)等。拉格朗日乘子法通过引入拉格朗日乘子,将原始问题转化为对偶问题,从而简化求解过程。而SMO则是一种针对SVM的高效优化算法,它通过迭代地选择两个样本进行优化,逐步逼近最优解。

硬间隔SVM:是一种二分类算法,其主要任务是将两个类别的样本完全分开,同时确保所有样本点都远离分类平面,以此保证分类的准确性和鲁棒性。其数学形式可以表述为

其中代表间隔,和为硬间隔支持向量机的参数,为样本数据。

软间隔SVM:允许一些样本点不满足原有的硬间隔约束条件,即允许一些样本被错误分类,从而提高了模型的泛化能力。可用来表达。在最大化间隔时,不满足约束的样本较少,于是优化目标可写为:

非线性SVM

非线性SVM(Non-linear SVM)是SVM算法的一个重要分支,特别适用于处理在原始输入空间非线性可分的数据集。当面对这样的数据集时,非线性SVM通过引入“核函数”(Kernel 函数)来将数据映射到更高维的特征空间,以寻找数据的线性可分性。核函数是一种强大的工具,它能够将原始数据点映射到高维空间,使得原本在低维空间中难以划分的非线性模式在新空间中变得线性可分。引入核函数不仅扩展了SVM的应用范围,还增强了其处理复杂数据的能力。

训练算法

块算法

块算法是基于SVM方法提出的一种训练算法。它将样本集分成工作样本集和测试样本集,每次使用二项规划求解最优解,并剔除非支持向量。然后,根据训练结果检验剩余样本,将不符合结果的样本与支持向量合并成为新的工作样本集。重复这个过程直到获得最优结果。块算法只适用于支持向量数量较少的情况,如果支持向量数目较多,算法无法实施。

分解算法

分解算法是根据模型的特点将一个大问题分解为若干个小问题。单独解决这些小问题的难度远低于直接处理原始的大模型。这些小问题之间需要相互协作,以确保分解后的模型能够收敛到原始模型的最优解,从而确保分解方法的全局最优性。

增量算法

增量算法是指每次仅选择一小批可以通过常规二次算法处理的数据作为增量。在训练过程中,保留原样本中的支持向量与新增样本进行混合训练。这个过程持续进行,直到所有的训练样本都被使用完毕。增量算法的一个显著特征是,支持向量机的学习过程并非一次性离线完成,而是随着数据的逐个加入进行反复优化。通过这种方法,可以在保持模型性能的同时,有效地处理大量的新增数据。

固定工作样本集算法

固定工作样本集算法,简称Osuna算法,它将问题拆分成固定数目的子问题。在迭代过程中,只替换部分最具价值的样本,维持工作集大小不变。算法的核心在于建立一个固定大小的工作集,每次解决子问题时,移出一个样本并加入一个不满足KKT条件的样本,然后进行优化。

分类算法

分解法

分解法将多类问题转换为多个两类分类问题,并使用标准的两类SVM处理。在识别阶段,通过投票确定所属类别。有两种主要方法:“一对一”(OAO)和“一对多”(OAA)。

一对一

一对一方法巧妙地将多类别问题转化为二分类问题。只需为k个类别构建C个二分类支持向量机模型,每个模型专门区分一类与其他类。预测时,样本经过所有分类器,获得C个预测结果。通过投票机制,最终答案即为出现次数最多的类别。当类别众多且样本分布均衡时,OAO方法尤为适用。尽管需要构建众多二元分类器,但它们相互独立,易于并行处理。然而,当类别数量激增时,会大幅增加二元分类器的数量,可能导致训练和测试的计算成本上升。

一对多

一对多方法是将某个类别的样本视为一类,其他所有类别归为另一类,形成两类问题。通过选择分类器输出最大的类别进行预测,即最大值策略。适用于类别较少或某一类别样本较多的情况。此法减少了二元分类器数量,降低了计算成本。但当某类别样本过多时,分类器可能偏向该类别从而导致偏置。

决策树分类法

决策树分类法通常与二叉决策树结合使用,是多类别识别的常用手段。此法全面处理样本与类别,信息无遗漏。在支持向量少、训练集可分时,表现良好。但面对不可分情况,错误分类的样本会被多次惩罚,导致分类结果有偏差。

直推法

直推法是由Weston等人提出的一种解决多类别学习问题的策略。它采用优化方式处理多值分类,与完全多类支持向量机相似。但实际应用中,此法受到复杂QP问题的制约。在t类模式识别问题中,给定训练数据集合,包含N维特征的模式x和类别标签y。目标是找到分类函数f,对新样本进行准确识别,即f(x)=y。新样本的概率分布应与训练样本一致。

优化算法

SMO算法

SMO(Sequential Minimal 最优化)算法是SVM的优化算法。其核心思想是将多变量优化问题分解为一系列单变量子问题,从而简化计算过程。该算法通过迭代选择两个变量进行优化,每次迭代只更新这两个变量的值,直到所有变量都满足优化条件。

模型选择和验证

SVM是一种模式识别方法,需要选择一个核函数来求解问题。不同的核函数会导致不同的分类器性能。同时,即使选择了某一类核函数,其参数的选择也很重要。核函数的类别和参数的选择统称为模型选择。有四种主要的方法来估计样本的识别误差并确定核函数的参数。

单一验证估计

单一验证估计是在样本数量足够大时,将一部分样本作为训练样本,另一部分作为测试样本。此时,测试集的错误率可以用以下公式计算:,其中,为样本数;为样本实际所属的类别;为对训练样本预测出的类别。

这种方法直观且比较简单。在样本数量足够大时,可以证明该估计结果是无偏的。然而,在实际应用中,样本数量总是有限的。而且,SVM方法通常用于小样本的分类与识别问题,这在一定程度上限制了该方法的应用。

留一法

留一法是一种确定核函数参数的方法。它的基本思想是将可用样本分为N份,其中(N-1)份用于训练,剩下的1份用于测试。重复N次,让所有样本都参与测试。留一法被证明是无偏估计,因此是目前最好的参数确定方法。然而,在固定参数的情况下,确定错误率需要进行N次训练,计算量很大。为了减小计算量,当前主流方法是通过估计经验风险的上界来确定核函数和参数。只要上界估计较小,得到的分类器的泛化能力就较强。

k遍交叉验证法

k遍交叉验证法就是把样本分成几个子集,然后每次训练用其中一个子集作为测试,其余子集作为训练。反复多次,直到所有子集都参与了测试。这样可以减少训练次数,但是划分方式会影响结果。这种方法简单易行,是最常用的方法。

基于样本相似度的方法

基于样本相似度的方法是基于样本相似度的核函数参数选择方法。其思想是好的核函数能够准确地反映样本间的远近关系。这种方法的特点是计算较简单,不需要解决QP问题,评估核函数性能只需计算向量之间的内积。

优缺点

优点

缺点

软件工具和库

LIBSVM

LIBSVM(Library for Support 向量 Machines)是一个由台湾大学的林智仁(C.J. Lin)等人开发的软件包,专注于SVM算法的实现。它提供了简单而强大的工具,用于分类、回归以及其他机器学习任务。LIBSVM的特点是其高效的算法实现和易于使用的接口,这使得它成为了SVM领域的流行选择。

Libsvm实现了五种不同类型的SVM,每种类型都适用于不同的场景和问题:

LIBSVM的优势在于其高效性、易用性和广泛的应用场景。它内置了各种核函数选项,包括线性核、多项式核、径向基函数(RBF)核等,以支持不同的数据分布和特征空间。此外,LIBSVM还提供了参数选择和模型评估的工具,帮助用户优化SVM模型的性能。

Scikit-learn

Scikit-learn(简称“sklearn”)是一个为Python开发的广泛使用的开源机器学习库。它提供了简单而高效的工具,用于数据挖掘和数据分析。该库包含了一系列强大的分类、回归和DBSCAN,如SVM、随机森林、梯度提升和k均值算法等。

Scikit-learn建立在其他几个流行的Python科学计算库之上,如numpy(用于数值计算)、SciPy(用于科学和工程计算)和Matplotlib(用于绘图和可视化)。这些库的集成使得scikit-learn能够轻松地进行数据预处理、模型训练、评估以及结果的可视化。

除了提供丰富的算法实现,scikit-learn还附带了一些小型的数据集,这些“玩具”数据集无需额外下载即可直接导入和使用。尽管这些数据集的规模相对较小,与真实世界的数据集相比可能显得不够实用,但它们对于初学者来说非常有用。它们可以帮助学习者熟悉机器学习技术,掌握scikit-learn库的基本用法,以及进行快速的实验和原型开发。

应用

化工生产

SVM模型在化工生产领域中被广泛应用,并且取得了显著的成果。由于SVM模型具有较强的“黑箱性”,能够有效处理复杂的非线性问题。在化工生产中,SVM模型可以利用回归树和支持向量的优势建立决策树模型,从而提取出高效的决策规则,具备较高的决策能力。该模型可以用于预测产品质量、关键参数和优化生产条件等方面,还可以应用于设备故障诊断和维护,提高生产效率和设备可靠性。

数据挖掘

由于SVM通过引入映射将非线性分类问题转化为线性分类问题,解决了传统数据挖掘算法中训练集误差较小但测试集误差较大的问题。因此,SVM成为构建数据挖掘分类器的重要技术之一,在分类和回归模型中广泛应用。SVM的应用不仅提高了算法的效率和精确度,还在解决传统算法中存在的问题上取得了巨大突破。它在数据挖掘领域的应用能够有效处理非线性分类问题,并为数据挖掘研究领域提供了重要的工具和方法。

模式识别

手写数字识别是模式识别领域的一个重要方面,它旨在让计算机能够自动识别纸张上手写的阿拉伯数字。SVM在这一领域具有广泛的应用,其首个现实应用案例就是在手写数字识别上取得了成功。关于SVM方法在手写数字识别方面的研究,主要集中在预处理、特征提取和分类器等方面。预处理技术主要关注二值化准确度,以解决笔画丢失、断开和小内孔等问题。对于自由手写体,由于书写风格多样、上下文无关且识别准确度要求高,因此识别难度较大。然而,一种新算法通过提取手写体数字字符的多种结构特征,如端点、分叉点、横线等,并组合这些特征构造决策树,实现了手写体数字的自动识别。为了解决手写数字识别精度不高的问题,研究人员提出了一种结合空间、旋转、层次和结构特性的特征提取方法。该方法将手写数字的统计和结构特征相结合,并利用LIBSVM算法进行训练和识别,从而有效提高了识别精度。

人工智能

语音识别技术是实现人与计算机顺畅语言交流的关键技术,也是人工智慧领域的重要研究方向。然而,在实际应用中,尤其是在嘈杂环境或不同训练与测试条件下,其效果往往不尽如人意。因此,语音识别技术更适用于清晰、无干扰的语音输入。SVM作为一种强大的机器学习算法,在处理小样本、非线性、高维数和局部极小点等问题上展现出独特的优势。与隐马尔可夫模型(HMM)和人工神经网络相比,SVM具有更好的泛化能力和分类精度。这使得SVM在语音识别领域具有广阔的应用前景。为了进一步提高语音识别技术的性能,研究者们不断探索新的算法和方法。例如,结合SVM与HMM的混合系统、基于HMM的SVM二次识别方法以及利用生境共享机制的并行结构人工鱼群算法优化SVM参数等方法,都在一定程度上提高了语音识别的准确性和鲁棒性。

参考资料

支持向量机的历史.svms.org.2024-03-05

A Brief History of Deep Learning.dataversity.2023-11-23

LIBSVM -- A Library for Support Vector Machines.国立台湾大学.2024-03-05

scikit-learn.scikit-learn.2024-03-05

河南工人日报数字报