热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

SVM算法(一)(有监督学习)

一、SVM算法简介1.1、什么是SVM算法?  SVM(SupportVectorMachine)算法,即支持向量机算法,它是最优秀的分类算法之一,也是数据挖掘十大算法之一,它

一、SVM算法简介
1.1、什么是SVM算法?
  SVM(Support Vector Machine)算法,即支持向量机算法,它是最优秀的分类算法之一,也是数据挖掘十大算法之一,它以其简单的理论构造了复杂的算法,又以其简单的用法实现了复杂的问题而受到业界的青睐。SVM算法属于有监督学习算法。它是在1995年由Corinna Cortes和Vapnik首先提出的。
  SVM算法是基于统计学习理论的一种机器学习方法,它通过寻求结构化风险最小来提高学习机泛化能力,实现经验风险和置信范围的最小化,从而达到在统计样本量较少的情况下,亦能获得良好统计规律的目的。如今它常用来对小样本、非线性及高维数据进行模式识别、分类以及回归分析,并可以取得很好的效果。
1.2、SVM算法的核心思想
  SVM的核心思想可以归纳为以下两点:
  (1)它是针对线性可分情况进行分析,对于线性不可分的情况,通过使用非线性映射算法将低维输入空间线性不可分的样本转化为高维特征空间使其线性可分,从而使得高维特征空间采用线性算法对样本的非线性特征进行线性分析成为可能。
  (2)它以结构风险最小化理论为基于在特征空间中构建最优分割超平面,使得学习器得到全局最优化,并且在整个样本空间的期望风险以某个概率满足一定上界。
  最后,简单解释一下支持向量机的含义,支持向量的含义是指支持 or 支撑平面上把两类类别划分开来的超平面的向量点,“机”的意思就是算法。在深入讲解SVM实现过程之前我们需先了解简单的线性分类器。

二、线性分类器
2.1、超平面的概念
  以一个二维平面为例来说明分类方法,如下图所示,平面上有两种不同的点,分别用两种不同的颜色表示,一种为红颜色的点,另一种则为蓝颜色的点,我们希望找到一个决策面使得C1和C2两类数据分开。

这里写图片描述

  由上图可知红颜色的直线可以将数据很好的分成两类,它是一个分类函数,我们也把这条直线称之为超平面,在三维空间中超平面就是一个平面。一般的,如果一个线性函数能够将样本完全正确的分开,就称这些数据是线性可分的,否则称为非线性可分的。
2.2、找到最优超平面的目标函数和约束条件(第一步)
  上面我们知道超平面(红颜色的直线)可以将两类数据分开,这个超平面一般表示就是WTX+b=0,现在的问题是找到对应的W和b使得分割最好。

这里写图片描述

  先定义一下离这个线最近的点到这个分界面(线)的距离分别为d1,d2。那么SVM找最优权值的策略就是,先找到最边上的点,再找到这两个距离之和D,然后求解D的最大值。假设找到了这样一个分界面WTX+b=0,那么做离它最近的两类点且平行于分类面,如上面的橙线所示。再假设我们有这两个虚线,那么真实的分界面我们认为正好是这两个分界面的中间线,这样d1就等于d2了。因为真实的分界面为WTX+b=0,那么就把两个橙线分别设置为WTX+b=1和WTX+b=-1。可以看到橙线相对于真实面只是上下移动了1个单位距离,可能会说你怎么知道正好是一个距离?确实不知道,就假设上下是k个距离吧,那么假设上橙线现在为WTX+b=k。两边同时除k可以吧,这样上虚线还是可以变成WT1X+b1=1。同理下虚线也可以这样,然后他们的中线就是W1TX+b1=0。可以看到从k到1,权值无非从w变化到w1,b变到b1,我在让w=w1,b=b1,不是又回到了起点吗,也就是说,这个中间无非是一个倍数关系。所以我们只需要先确定使得上下等于1的距离,再去找这一组权值,这一组权值会自动变化到一定倍数使得距离为1的。
  再看看D=d1+d2怎么求吧,假设分界面为WTX+b=0,再假设X是两维的,那么分界面再细写出来就是:w1x1+w2x2+b=0。上分界线:w1x1+w2x2+b=1,下分界线:w1x1+w2x2+b=-1。所以由距离公式计算得到两条直线之间的距离为:D=d1+d2=2/||W||。
  W=(w1,w2),W是个向量,||W||为向量的距离,||W||2=WTW。所以要求D的最大值等效为求WTW的最小值。因此优化问题就变为min(0.5*WTW),乘一个系数0.5没影响,但是在后面却有用。
  如果一个一次函数分界面为WTX+b=0,那么线上方的x可以使得WTX+b>0,下方的x可以使得WTX+b<0,那么对于上界面以上的点就有WTX+b>1,对于下界面以下的点就有WTX+b<-1。因为上界面以上的点的分类标签为1,下界面以下的点的分类标签为-1,所以可以将数据和标签归纳为一个式子:yi(WTxi+b)≥1。最终的带约束的优化问题转化为:
            min   0.5*WTW
            s.t.   yi(WTxi+b)≥1  同等于 1-yi(WTxi+b)≤0
  注意的是这可不是一个约束条件,而是对所有的每个样本xi都有一个这样的约束条件。 目标函数WT∗W是凸函数,所以满足KKT条件,可以引入拉格朗日乘子法对目标函数进行优化。

三、拉格朗日乘子法和KKT条件
3.1、拉格朗日乘子法
  为什么需要拉格朗日乘子法?这是组合优化问题的需要,我需要利用拉格朗日乘子法来讲问题进行优化。以下面带约束的优化问题为例:

这里写图片描述

  这是一个带等式约束的优化问题,有目标值,有约束条件。如果没有约束条件,对f直接求导数为0的值,解得的x即为极小值,有可能有多个极小值,但是如果目标函数是凸函数,则只有一个极小值,该值即为最小值。而当有约束条件时,就不能通过对f直接求导解得最小值,此时就需要利用拉格朗日乘子法来对问题进行转化,因为是等式约束,所以可以把这个约束乘一个系数加到目标函数中去,这就相当于既考虑了原目标函数,也考虑了约束条件。比如上面的目标函数,将约束等式考虑进去就变为:

这里写图片描述

  因为与α12相乘的部分都为0,所以α12的取值为全体实数。现在这个优化目标函数中就没有约束条件了,分别对x求导等于0,结果如下:

这里写图片描述

  把上面三个式子带到约束条件中去,可以得到两个包含α1和α2的等式,从而求解得到α1=−0.39,α2=−1.63,这样再带回去求x就可以了。那么一个带等式约束的优化问题就通过拉格朗日乘子法完美的解决了。那么更高一层的,带有不等式的约束问题怎么办?那么就需要用更一般化的拉格朗日乘子法即KKT条件来解决这个问题。
3.2、KKT条件
   约束条件还有可能含有不等式的约束条件。这时需要强调一下KKT条件。以下面的方程为例:

这里写图片描述

  可将上面的不等式约束条件转化成下式:

这里写图片描述

  然后将不等式约束条件放到目标函数中去就变成:

这里写图片描述

  那么KKT条件的定理是什么呢?就是如果一个优化问题在转变完后变成:

这里写图片描述

  其中g是不等式约束,h是等式约束。此时KKT条件就是函数的最优值,同时必定满足下面条件:
  (1) L对各个x求导为零;
  (2) h(x)=0;
  (3) ∑αigi(x)=0,αi≥0
  前两个式子根据前面的讲解应该可以理解,重点是第三个式子不好理解,因为我们知道在约束条件变完后,所有的g(x)<=0,且αi≥0,然后求和还要为0,所以要么某个不等式gi(x)=0,要么其对应的αi=0。
  通过上述分析后,分别对x1、x2求导数:

这里写图片描述

  此时根据KKT条件知α∗g(x)=0,从而得到:

这里写图片描述

  由KKT条件可知,要么g=0,要么α=0,上面式子有两个g和两个α,所以需要分四种情况讨论:讨论方法是两个一组进行讨论,比如现在就讨论α1,α2,让其他的α不变,为什么选或者至少选两个讨论呢,这是因为∑αigi(x)=0,改变一个α肯定不行的。如果α比较多的话需要采用SMO算法来进行α的求解。
  这里有四种情况,正好两个α。分情况讨论:
  (1)α12=0,那么看上面的关系可以得到x1=1,x2=−1,再把x的值带回到不等式约束中去,发现KKT第一个就无法满足(10-1+20=29<0),29>0的。所以这种情况舍弃。
  (2)g1(x)=g2(x)=0,带进去解得,x1=110/101;x2=90/101,再带回去求解α1,α2,得到α1=58/101,α2=4/101,它们满足大于0的条件,这组解是成立的。
  (3)其他两种情况不满足条件,舍弃。
  所以可以看到通过讨论完以后就可以得到最优的解。 x1=110/101=1.08;x2=90/101=0.89。
接下来的问题就是求解最优超平面。请接着阅读SVM算法(二)。


推荐阅读
  • 支持向量机(SVM)算法综述
    支持向量机(Support Vector Machine, SVM)是由Cortes和Vapnik于1995年首次提出的一种机器学习算法。SVM在处理小样本、非线性及高维模式识别问题上表现出显著的优势,并广泛应用于函数拟合等其他机器学习任务中。 ... [详细]
  • 本文深入探讨了数据挖掘领域内的十个经典算法,包括但不限于C4.5决策树、K-Means聚类、支持向量机等。这些算法不仅在理论上有深厚的数学基础,也在实践中展现出强大的应用价值。 ... [详细]
  • 机器学习算法:SVM(支持向量机)
    SVM算法(SupportVectorMachine,支持向量机)的核心思想有2点:1、如果数据线性可分,那么基于最大间隔的方式来确定超平面,以确保全局最优, ... [详细]
  • 本文介绍如何使用OpenCV和线性支持向量机(SVM)模型来开发一个简单的人脸识别系统,特别关注在只有一个用户数据集时的处理方法。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • 机器学习核心概念与技术
    本文系统梳理了机器学习的关键知识点,涵盖模型评估、正则化、线性模型、支持向量机、决策树及集成学习等内容,并深入探讨了各算法的原理和应用场景。 ... [详细]
  • Python中HOG图像特征提取与应用
    本文介绍如何在Python中使用HOG(Histogram of Oriented Gradients)算法进行图像特征提取,探讨其在目标检测中的应用,并详细解释实现步骤。 ... [详细]
  • 支持向量机(SVM)是一种基于统计学习理论的模型,主要在VC维和结构风险最小化的理论基础上发展而来。本文将探讨几种不同的SVM方法及其优化策略,旨在提高模型的效率和适用性。 ... [详细]
  • 本文探讨了数据挖掘技术的发展及其在大数据环境下的应用流程,重点介绍了统计学、在线分析处理、信息检索、机器学习、专家系统和模式识别等领域的最新进展。 ... [详细]
  • 解决getallheaders函数导致的500错误及8种服务器性能优化策略
    本文探讨了解决getallheaders函数引起的服务器500错误的方法,并介绍八种有效的服务器性能优化技术,包括内存数据库的应用、Spark RDD的使用、缓存策略的实施、SSD的引入、数据库优化、IO模型的选择、多核处理策略以及分布式部署方案。 ... [详细]
  • 大数据核心技术解析
    本文深入探讨了大数据技术的关键领域,包括数据的收集、预处理、存储管理、以及分析挖掘等方面,旨在提供一个全面的技术框架理解。 ... [详细]
  • 使用R语言进行Foodmart数据的关联规则分析与可视化
    本文探讨了如何利用R语言中的arules和arulesViz包对Foodmart数据集进行关联规则的挖掘与可视化。文章首先介绍了数据集的基本情况,然后逐步展示了如何进行数据预处理、规则挖掘及结果的图形化呈现。 ... [详细]
  • 【转】强大的矩阵奇异值分解(SVD)及其应用
    在工程实践中,经常要对大矩阵进行计算,除了使用分布式处理方法以外,就是通过理论方法,对矩阵降维。一下文章,我在 ... [详细]
  • 如何选择机器学习方法http:scikit-learn.orgstabletutorialmachine_learning_mapindex.html通用学习模式只需要先定义 ... [详细]
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社区 版权所有