热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

【svm学习笔记】svm_理论学习图谱_上

这两天,因为工作需要,断断续续在看svm的一些资料。因为之前也看过其他的一些机器学习模型,并动手实现过相关代码,如:最大墒模型等,所以最初以为学习svm的过程应该与上述经历类似。事实证明

这两天,因为工作需要,断断续续在看svm的一些资料。因为之前也看过其他的一些机器学习模型,并动手实现过相关代码,如:最大墒模型等,所以最初以为学习svm的过程应该与上述经历类似。事实证明,svm是个坑,进去容易,爬上来难。难的主要在于,svm本身是由多个不同方面的理论拼接而成,而每个理论问题,还都挺难;而且这些理论,对于最终的代码实现,也不见得有多大帮助。不过了解这些理论,也能更加深入地感受svm这个模型的特点,对他的长处和不足,也能有正确的预期。


这篇博客,主要想从思路上回顾一下svm的理论,不会涉及具体公式,而只是展现:在什么时候,遇到了什么问题,而由什么样的伟大理论解决了这个问题。“理论学习图谱”这个题目有点大,其实就是讲我这两天学习的过程,把思路整理出来,备忘。


svm,先别管它的名字,也别管他那些耳熟能详的名字,如:vc维、支持向量、结构风险最小化、凸二次规划问题等等。我们先想想,他是干什么的?


有监督的学习问题是机器学习的经典问题,而学习的结果通常以分类器来体现,即,将一堆样本,正确的划分为若干个类别。这里面,最简单的就是二类问题。在二类问题里面,最简单的就是线性分类。也就是说,在一个二维平面上,样本就是平面上的点,而有一条直线,将这些点正确的分为两个类别。如何学习这条直线?很久以前,就有人提出了感知器模型和训练算法,并取得了不错的结果。但是,现实生活中的问题毕竟不是真么简单,很多复杂的分类问题不是感知器能够解决的。在这之后,感知器在两个方面发展。一方面,将感知器组合在一起,从拓扑结构上进行扩展,形成神经网络,获得更加强大的描述能力。另一方面的扩展,就是svm了。


对于上面的问题,svm很直接,不是扩展模型拓扑,而是扩展问题空间。例如,在现实生活中,我们把样本投影到二维平面上,无法用一条直线进行划分;那么投影到三维空间呢?进一步,n维空间呢?前段时间有个很火的科幻小说,刘慈欣的《三体》三部曲。在《三体2》的开头,16世纪的君士坦丁堡中有个女巫,能够从封闭的空间中拿出东西。其实,我们生活在三维空间中,一些区域在三维空间中是封闭的,但是在更高位的空间中,如四维空间中,并不是封闭的。那个女巫能够进入四维空间,当然就能够从三维空间中封闭的区域里面拿东西。svm也是一样。样本在低位空间中不可分。但当空间逐渐升高,在某个高维空间中,样本就能够线性可分了。svm还是用的线性分类器,还是用的直线,只不过是在高维空间中,是高维空间中的一个——嗯,专业名词似乎叫——超平面。那么,如何将低维空间的样本投影到高维空间呢?这就是核函数的作用。确切地说,核函数不是做简单的映射,而是更加直接——他用低维空间的量直接算出了映射到高维空间做相应内积计算后的值。就是说,他不映射,但能算出映射后再计算,的值。


好,svm的思路挺高明,用高维空间。那么,这也带来了问题,就是维数灾难的问题。我从前做过语言模型,一阶模型的参数空间是n(n是词表大小),二阶模型的参数空间是n^2,三阶模型就是n^3。参数空间呈指数级递增,而样本只能呈线性速度递增。在某种程度上,样本的数量远远不够估计参数空间(甚至样本的数量都少于参数的数量,而一般训练过程采用最大似然估计,这个是建立在大数定律上的方法)。这时候,我们就说发生了维数灾难。导致的后果就是参数无法估计。其实还有一个后果,即便是参数能够估计出来,这么高的维度,模型的复杂度也很高,这就导致模型的泛化能力越来越低。这怎么办?这就是“泛化性理论”所解决的问题。泛化理论告诉我们,对于特定分布,其模型的复杂程度与输入空间的维度无关,而只与模型的VC维有关。VC维是啥?两个人名字首字母的合体。总之,是一种表示模型复杂度的度量。这就带来两个结论:1. 我们不用担心维数灾难,在泛化理论的保驾护航下,svm能够训练出来(我是说理论上哈);2. 要想提高模型的泛化能力,就要降低模型复杂度,具体地说,就要降低模型的VC维。在这两个结论的基础上,我们就得到了——终于得到了——svm的优化目标函数。为什么说“终于得到了”?因为我们工程问题,如果想要解决的话,最终都要转化成为最优化问题(通常是带有条件的最优化问题);反过来说,如果转化不成这样的问题,想要解决,嗯,有点难。通常,我们优化目标函数定义为模型在Held-out corpus上的错误率,这被称为经验风险最小化;而svm的目标函数,因为包含了VC维,平衡了模型复杂度和泛化能力,就被称为结构风险最小化。嗯,有越来越多大家熟悉的名词冒出来了,我这个博文的目的就是把这些名词用汉字(而不是用公式)来串联起来。题外话,svm有很多优点,泛化能力强绝对是其中一个。但我们看到,这个是在解决问题的时候,自然而然产生的一个bonus,似乎碰巧就把它给解决了。svm最初的发明过程我不得而知,不过在我这两天的学习过程中,看到了好多这样“碰巧”的例子。


写累了,下一篇继续写。




推荐阅读
  • 机器学习核心概念与技术
    本文系统梳理了机器学习的关键知识点,涵盖模型评估、正则化、线性模型、支持向量机、决策树及集成学习等内容,并深入探讨了各算法的原理和应用场景。 ... [详细]
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • Python中HOG图像特征提取与应用
    本文介绍如何在Python中使用HOG(Histogram of Oriented Gradients)算法进行图像特征提取,探讨其在目标检测中的应用,并详细解释实现步骤。 ... [详细]
  • 大数据时代的机器学习:人工特征工程与线性模型的局限
    本文探讨了在大数据背景下,人工特征工程与线性模型的应用及其局限性。随着数据量的激增和技术的进步,传统的特征工程方法面临挑战,文章提出了未来发展的可能方向。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 分隔超平面:将数据集分割开来的直线叫做分隔超平面。超平面:如果数据集是N维的,那么就需要N-1维的某对象来对数据进行分割。该对象叫做超平面,也就是分类的决策边界。间隔:一个点 ... [详细]
  •   上一篇博客中我们说到线性回归和逻辑回归之间隐隐约约好像有什么关系,到底是什么关系呢?我们就来探讨一下吧。(这一篇数学推导占了大多数,可能看起来会略有枯燥,但这本身就是一个把之前算法 ... [详细]
  • 支持向量机(SVM)算法综述
    支持向量机(Support Vector Machine, SVM)是由Cortes和Vapnik于1995年首次提出的一种机器学习算法。SVM在处理小样本、非线性及高维模式识别问题上表现出显著的优势,并广泛应用于函数拟合等其他机器学习任务中。 ... [详细]
  • AI炼金术:KNN分类器的构建与应用
    本文介绍了如何使用Python及其相关库(如NumPy、scikit-learn和matplotlib)构建KNN分类器模型。通过详细的数据准备、模型训练及新样本预测的过程,展示KNN算法的实际操作步骤。 ... [详细]
  • 机器学习算法:SVM(支持向量机)
    SVM算法(SupportVectorMachine,支持向量机)的核心思想有2点:1、如果数据线性可分,那么基于最大间隔的方式来确定超平面,以确保全局最优, ... [详细]
  • 本文介绍如何使用OpenCV和线性支持向量机(SVM)模型来开发一个简单的人脸识别系统,特别关注在只有一个用户数据集时的处理方法。 ... [详细]
  • 支持向量机(SVM)在机器学习中的应用与学习心得
    支持向量机(SVM)是一种高效的二分类模型,其核心目标是通过寻找最优超平面来区分不同类别的数据点。在实际应用中,SVM能够有效地处理高维数据,并通过核技巧扩展到非线性分类问题。当新的数据点输入时,SVM会根据其相对于超平面的位置来判定其所属类别。训练过程中,SVM通过最大化间隔来确定最优超平面,从而提高模型的泛化能力。本文总结了SVM在机器学习中的应用及其学习心得,探讨了其在实际问题中的优势和局限性。 ... [详细]
  •     目标检测是计算机视觉一个非常重要的子任务。目标检测需要发现并准确定位自然图片中的物体。在2012年之前,目标检测主要基于手工设计的特征以及传统分类器。2012年以后,出现了 ... [详细]
  • 深度学习: 目标函数
    Introduction目标函数是深度学习之心,是模型训练的发动机。目标函数(objectfunction)损失函数(lossfunction)代价函数(costfunction) ... [详细]
author-avatar
傅雪莱_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有