SVM(二)

2023-05-16

约束条件下的最优化问题

在上文中我们得到了SVM的目标函数,是一个约束最优化问题,下面来求解这个问题。

1.约束最优化问题

既然是约束,就可以分为g(x)=0g(x)\leq 0两种形式(注意后面也有等于,不是<),如下图所示,分别是在一条线上和一片区域上寻找最优解。

(1)最优解特点:

观察等式约束情况,可以发现直线上的最优解正好与等高线相切。这种情况是必然的,在最优解处目标函数的梯度方向如果不与直线的切线垂直的话,那么梯度方向必然存在一个分量与切线方向相同,也就是最优解还可以向这个方向移动,这里就不是最优解。有如下三个推论:

推论1:在那个宿命的相遇点\boldsymbol{x}^*也就是等式约束条件下的优化问题的最优解),原始目标函数f(\boldsymbol{x})的梯度向量\nabla f(\boldsymbol{x^*})必然与约束条件g(\boldsymbol{x})=0的切线方向垂直。

推论2:函数f(\boldsymbol{x})的梯度方向也必然与函数自身等值线切线方向垂直。

推论3:“函数f(\boldsymbol{x})与函数g(\boldsymbol{x})的等值线在最优解点\boldsymbol{x}^*处相切,即两者在\boldsymbol{x}^*点的梯度方向相同或相反”

由推论3可以得出以下结果:

\nabla f(\boldsymbol{x}^*)+\lambda \nabla g(\boldsymbol{x}^*)=0

这就是构造拉格朗日函数的原因,将约束条件与目标函数整合到一起,\lambda就是拉格朗日乘子,它用来缩放使两个梯度求和为0。同时我们还有g(x)=0这个条件,构造拉格朗日函数L(\boldsymbol{x},\lambda)=f(\boldsymbol{x})+\lambda g(\boldsymbol{x}),对x和\lambda 求偏导等于0即可。

2.KKT条件

但是SVM的目标函数里的约束条件是\leq,此时最优解x有两种可能:

(1)x在g(x)边界

此时与g(\boldsymbol{x})=0条件相同,不难理解这时最优解x在g(x)上的梯度和在f(x)上的梯度是相反的,也就是此时\lambda>0

(2)x在g(x)内部

此时约束条件是没有起到作用的,因为不管怎么优化都能满足约束条件,所以此时\lambda=0

综合上面两种情况,可以求得:

\begin{array}{lr} g(\boldsymbol{x})\leq0~ & (1)\\ \lambda\geq0~ & (2)\\ \lambda g(\boldsymbol{x})=0 & (3) \end{array}

这个就是KKT条件

 

3.拉格朗日对偶

之前我们构造了在等式约束条件下的拉格朗日函数,但那是基于三个推论,因为目标函数与约束条件在最优解处有相同或相反方向的梯度,而在不等式下没有这个条件。不过如果能构造出一种函数,使它在可行解区域内与目标函数一致,在可行解区域外无限大,这个函数就可以等价原最优化问题。下面讲解拉格朗日对偶

(1)原目标函数

\begin{array}{lll} \min_{\boldsymbol{x}} & f(\boldsymbol{x}) & ~\\ \textrm{s. t.} & h_i(\boldsymbol{x})=0 & i=1,2,\ldots,m\\ ~ & g_j(\boldsymbol{x})\leq 0 & j = 1,2,\ldots,n\\ \end{array}

(2)新构造的目标函数

构造广义拉格朗日函数作为新的目标函数,注意此时是最大化,优化的自变量是a和b

\theta_P(\boldsymbol{x})=\max_{\boldsymbol{\alpha},~\boldsymbol{\beta};~\beta_j\geq0}L(\boldsymbol{x},\boldsymbol{\alpha},\boldsymbol{\beta})

L(\boldsymbol{x},\boldsymbol{\alpha},\boldsymbol{\beta})=f(\boldsymbol{x})+\sum_{i=1}^m\alpha_i h_i(\boldsymbol{x})+\sum_{j=1}^n\beta_j g_j(\boldsymbol{x})

\theta_P(\boldsymbol{x})=\max_{\boldsymbol{\alpha},~\boldsymbol{\beta};~\beta_j\geq0}L(\boldsymbol{x},\boldsymbol{\alpha},\boldsymbol{\beta})= f(\boldsymbol{x})+\max_{\boldsymbol{\alpha},~\boldsymbol{\beta};~\beta_j\geq0}\left[ \sum_{i=1}^m\alpha_i h_i(\boldsymbol{x})+\sum_{j=1}^n\beta_j g_j(\boldsymbol{x}) \right]

上式的讨论需要分为在可行解区域内和可行解区域外:

可行解区域内:此时满足h(x)=0,并且g(x)<=0,而系数b>=0,所以max最大只能是0

\max_{\boldsymbol{\alpha},~\boldsymbol{\beta};~\beta_j\geq0}\left[ \sum_{i=1}^m\alpha_i h_i(\boldsymbol{x})+\sum_{j=1}^n\beta_j g_j(\boldsymbol{x}) \right] =0,~\textrm{for}~ \boldsymbol{x}\in\Phi

可行解区域外:此时要么h_i(\boldsymbol{x})\neq0,要么g_j(\boldsymbol{x})>0,都可以使得max的优化结果为正无穷

\max_{\boldsymbol{\alpha},~\boldsymbol{\beta};~\beta_j\geq0}\left[ \sum_{i=1}^m\alpha_i h_i(\boldsymbol{x})+\sum_{j=1}^n\beta_j g_j(\boldsymbol{x}) \right] =+\infty,~\textrm{for}~ \boldsymbol{x}\notin \Phi

所以在x的分布下我们的目标函数为如下:

\theta_P(\boldsymbol{x})=\left\{ \begin{array}{ll} f(\boldsymbol{x}) & \boldsymbol{x}\in\Phi\\ +\infty & \textrm{otherwise} \end{array} \right.

此时已经没有了约束条件,下面可以求解最优化问题\min_{\boldsymbol{x}}\left[\theta_P(\boldsymbol{x})\right]

(3)对偶问题

上式很难建立\theta_P(\boldsymbol{x})的显示表达式(由于x的取值不同表达不同),所以将其改为对偶形式。我们上面构造的函数如下:

\min_{\boldsymbol{x}}\left[\theta_P(\boldsymbol{x})\right]= \min_{\boldsymbol{x}}\left[ \max_{\boldsymbol{\alpha},\boldsymbol{\beta}:\beta_j\geq0}L(\boldsymbol{x},\boldsymbol{\alpha},\boldsymbol{\beta}) \right]

在构造另一个函数\theta_D(\boldsymbol{\alpha},\boldsymbol{\beta})=\min_{\boldsymbol{x}}L(\boldsymbol{x},\boldsymbol{\alpha},\boldsymbol{\beta}),以及它的优化为:

\max_{\boldsymbol{\alpha},\boldsymbol{\beta}:\beta_j\geq0}\left[\theta_D(\boldsymbol{\alpha},\boldsymbol{\beta})\right]= \max_{\boldsymbol{\alpha},\boldsymbol{\beta}:\beta_j\geq0} \left[ \min_{\boldsymbol{x}}L(\boldsymbol{x},\boldsymbol{\alpha},\boldsymbol{\beta}) \right]

这就是上一节函数的对偶问题,可以证明这两个问题有相同的解。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SVM(二) 的相关文章

  • 图像验证码识别(九)——训练和识别

    前面讲到已经把所有的字符经过去干扰 分割和归一化得到标准大小的单个字符 接下来要做的就是识别验证码了 现在要做的基本上也就和OCR没什么区别了 因为得到的字符已经是尽可能标准的了 下面的识别分为两个步骤 第一步先是特征值的提取 第二步是SV
  • 【python数据挖掘课程】二十七.基于SVM分类器的红酒数据分析

    这是 Python数据挖掘课程 系列文章 前面很多文章都讲解了分类 聚类算法 这篇文章主要讲解SVM分类算法 同时讲解如何读取TXT文件数据并进行数据分析及评价的过程 文章比较基础 希望对你有所帮助 提供些思路 也是自己教学的内容 推荐大家
  • 如何设置LIBSVM Matlab界面?

    我在 MATLAB 中实现 LibSVM 时遇到问题 我正在使用 MATLAB R2009a 我也有最新版本 R2012b 但我不使用那个 我将 LibSVM 包 libsvm 3 14 下载到我的 Windows 7 PC 上 其中 MA
  • 如何在Matlab中使用libsvm?

    我是 matlab 新手 不知道如何使用 libsvm 是否有任何示例代码可以使用 SVM 对某些数据 具有 2 个特征 进行分类 然后将结果可视化 使用内核 RBF 多项式和 Sigmoid 怎么样 我在 libsvm 包中看到了该自述文
  • 机器学习--LibSVM

    传统机器学习的故障诊断方法 就是利用分类器对不同工况进行分类 大致流程包括 在这里使用Matlab调用LibSVM库 跑一个简单的故障诊断模型 数据集选用凯斯西储大学轴承数据集 CWRU 对轴承内圈 外圈 滚珠等共10种工况进行故障诊断 滚
  • Predict.svm 中的错误:测试数据与模型不匹配

    我有一个大约 500 行和 170 列的数据框 我正在尝试使用 e1071 包中的 svm 运行分类模型 分类变量称为 SEGMENT 是一个有 6 个级别的因子变量 数据框中还有其他三个因子变量 其余都是数字 data lt my dat
  • 使用 RBF 核 SVM 时,c 或 gamma 的高值是否会出现问题?

    我正在使用 WEKA LibSVM 来训练术语提取系统的分类器 我的数据不是线性可分的 因此我使用 RBF 内核而不是线性内核 我跟着Hsu 等人的指南 并迭代 c 和 gamma 的几个值 最适合对已知术语进行分类 测试和训练材料当然不同
  • 基于支持向量的数据重采样器

    我正在努力实现一个数据重采样器以基于support vectors 这个想法是为了适应SVM分类器 得到support vector类的点 然后通过仅选择每个类的支持向量点附近的数据点来平衡数据 以使类具有相同数量的示例 忽略所有其他 远离
  • LinearSVC和SVC(kernel=“线性”)有什么区别?

    I found sklearn svm LinearSVC http scikit learn org stable modules generated sklearn svm LinearSVC html and sklearn svm
  • OpenCV中基于HOG特征的SVM分类器用于“对象检测”

    我有一个项目 我想检测图像中的物体 我的目标是使用 HOG 功能 通过使用 OpenCV SVM 实现 我可以找到用于检测人的代码 并且我阅读了一些关于调整参数以检测对象而不是人的论文 不幸的是 由于一些原因我无法做到这一点 首先 我可能错
  • 带有 SVM 基分类器的 AdaBoost 的执行时间

    我刚刚用这些参数制作了一个 Adaboost 分类器 1 n estimators 50 2 base estimator svc 支持向量分类器 3 learning rate 1 这是我的代码 from sklearn ensemble
  • 词袋训练样本

    我已经实施了 Bag Of Words 一切都很顺利 但是 我对一些步骤以及如何实施感到困惑 我可以创建弓描述符作为词袋中创建样本的最后一步 如此处所示bowDE compute img keypoints bow descriptor 问
  • 通过 grid.py 查询

    面临 libsvm 的 grid py 的一些问题 尝试实现它 但出现语法错误 Typed grid py svmtrain c Users HP Documents MATLAB libsvm 3 11 windows svmtrain
  • 如何保存 LibSVM python 对象实例?

    我想在其他计算机上使用这个分类器 而不必再次训练它 我曾经使用 cPickle 从 scikit 保存一些分类器 对 LIBSVM 做同样的事情 它给了我一个 ValueError 包含指针的 ctypes 对象不能被腌制 我正在使用 Li
  • matlab中的支持向量机

    您能否举一个在 matlab 中使用支持向量机 SVM 进行 4 类分类的示例 例如 atribute 1 atribute 2 atribute 3 atribute 4 class 1 2 3 4 0 1 2 3 5 0 0 2 6 4
  • 使用 scikit-learn OneClassSVM 时获取每个新观察结果为异常值的概率

    我是 scikit learn 和 SVM 方法的新手 我的数据集与 scikit learn OneClassSVM 配合良好 可以检测异常值 我使用观察来训练 OneClassSVM 所有这些都是 内点 然后使用 Predict 对我的
  • 帮助--LibSVM 的准确率达到 100%?

    名义上这是一个好问题 但我很确定这是因为发生了一些有趣的事情 作为上下文 我正在研究面部表情 识别空间中的一个问题 因此获得 100 的准确度似乎令人难以置信 并不是说在大多数应用程序中这是合理的 我猜测数据集中存在一些一致的偏差 这使得
  • 将 OneClassSVM 与 GridSearchCV 结合使用

    我正在尝试在 OneClassSVM 上执行 GridSearchCV 函数 但我似乎无法找到 OCSVM 的正确评分方法 根据我收集的信息 像 OneClassSVM score 这样的东西不存在 因此 GridSearchCV 中没有所
  • scikit-learn:SVC 和 SGD 有什么区别?

    SVM http scikit learn org stable modules svm html classification http scikit learn org stable modules svm html classific
  • 使用 libsvm 交叉验证后重新训练

    我知道交叉验证用于选择好的参数 找到它们后 我需要在不使用 v 选项的情况下重新训练整个数据 但我面临的问题是 在使用 v 选项训练后 我得到了交叉验证精度 例如 85 没有模型 我看不到 C 和 gamma 的值 在这种情况下我该如何重新

随机推荐