【java机器学习】支持向量机之拉格朗日乘子法解释
什么是拉格朗日乘子法
按照维基百科的定义,拉格朗日乘数法是一种寻找多元函数在其变量受到一个或多个条件的约束时的极值的方法。用数学式子表达为:
简单理解就是,我们要在满足 这个等式的前提下,求 函数的最小值(最大值道理相同)。这样的问题我们在高中的时候就遇到过了,只不过高中时遇到的限制条件 都比较简单,一般而言都可以将 用 的式子表示出来,然后用变量替换的方法代回 求解。但是,如果 的形式过于复杂,或者变量太多时,这种方法就失效了。而拉格朗日乘子法就是解决这类问题的通用策略。
拉格朗日乘子法的原理
一个约束条件
我们先从只有一个约束条件的情况入手,看看拉格朗日乘子法到底是怎么做的。
假设,我们的问题如下:
当然,这个问题比较简单,直接用 解出 y 再代入 也可以求解,但这里,我们准备用拉格朗日乘子法。
首先我们画出 的图像,这个图像应该是 3 维的,但为了方便讲解,这里给出它的 2 维投影:
图中的红色圆表示 ,越靠近原点的部分,值越小(表示“谷底”),这些圆又称为「等高线」,因为同一个圆代表的函数值相同。
图中的蓝线代表 ,这里只取 的部分。
整幅图像可以想象成一个巨大的山谷,原点是谷底,而我们的任务是在蓝线表示的道路上,找到最低的位置。
那要如何找到这个最低点呢?注意,图中用橙色和黑色标记了两个点。如果我们走到了橙色这个位置,那么很明显,可以发现这个点肯定不是最低的,因为我们可以沿着蓝线继续往内部的圆走,当我们走到黑色这个点时,会发现没法再往里面走了,而且,这个时候如果继续沿蓝线走,我们的位置反而升高了,这时,我们基本可以认为:我们找到了在蓝线这个限制条件下的最低点。
那么橙色这个点和黑色这个点有什么本质区别呢?拉格朗日观察到,黑点位置,蓝线和圆是相切的,而橙点位置显然不满足这个性质。那相切是否是必然的呢?拉格朗日告诉我们,是的,一定是相切的。而这一点,正是拉格朗日乘子法的核心。
梯度
在正式理解拉格朗日乘子法的原理之前,我们要回顾一下梯度的概念。
在数学里面,梯度指的是函数变化最快的方向。例如:在一元函数 中,梯度只能沿 x 轴正方向或负方向,而在二元函数 中,梯度则是一个二维向量 。
现在,我们要用到梯度一个重要的性质:梯度跟函数等高线是垂直的。
证明需要用到一点极限的知识。
梯度的数学定义为:。假设 , 是两个极小的变化量,根据全微分的知识,可以得到:
如果 是在等高线方向的增量,那么 ,这意味着 ,换句话说,向量 和向量 的内积为 0。所以,梯度和函数的等高线是垂直的。
拉格朗日乘子法的几何认识
现在,我们来感性地认识一下,为什么拉格朗日认为相切才能找到最低点(只是感性认识,不添加任何数学推导)。
在橙点这个位置,由于两条曲线不相切,所以橙线的梯度(上图橙色箭头)和蓝线的切线(蓝色虚线)肯定不垂直。在这种情况下,蓝线的两个切线方向,必定有一个往函数高处走(与梯度的夹角小于 90 度),有一个往函数低处走(与梯度的夹角大于 90 度)。所以,在两条曲线相交时,我们肯定不在最低点或最高点的位置。
那么,反过来想,如果两条曲线相切(上图),那么在切点这个位置,蓝线的切线和橙线的梯度是垂直的,这个时候,蓝线的切线方向都指向橙线的等高线方向。换句话说,在切点的位置沿蓝线移动很小的一步,都相当于在橙线的等高线上移动,这个时候,可以认为函数值已经趋于稳定了。所以,我们认为这个点的值“可能”是最低(高)的(之后解释为什么是“可能“。另外,个人觉得拉格朗日乘子法最好用反证法从不相切的点入手思考,从相切的点思考总有点别扭)。
既然相切可以帮助我们找到最低点,那么接下来我们要研究的便是如何利用相切来找出最低点。
相切,意味着在切点的位置,两条曲线的等高线方向是平行的,考虑到梯度与等高线垂直, 我们可以用两条曲线的梯度平行来求出切点位置(最低点)。
因此,根据梯度平行,我们能够得到一个方程组:,其中 表示一个标量,因为我们虽然能保证两个梯度平行,但不能保证它们的长度一样(或者方向相同)。在高维函数中, 表示的是函数在各个自变量方向的偏导。对于上面的例子,我们可以求出函数 和 的偏导,再根据方程组:
求出切点。由于总共有三个方程和三个未知数,一般都能找到解(也可能存在多个解或无解的情况,之后会简单讨论)。
在实际求解时,人们会使用一个统一的拉格朗日函数:,令这个函数偏导为 0,我们可以得到:
结果和上面的方程组是一样的。
多个约束条件
多个约束条件和单个约束条件是一样的。如果是多个约束条件,那么这些约束函数肯定是相交的,否则无解。多个约束条件一般会把变量约束到一个更低维的空间,例如,下图中,紫色球面和黄色平面将变量约束到黑色线的位置。
求解过程和单个约束条件是一样的,我们定义一个新的拉格朗日函数:
然后同样令这个函数的导数 ,最后可以得到 个方程以及 个未知数,一般也能求解出来。
总结
根据拉格朗日乘子法的定义,这是一种寻找极值的策略,换句话说,该方法并不能保证找到的一定是最低点或者最高点。事实上,它只是一种寻找极值点的过程,而且,拉格朗日乘子法找到的切点可能不只一个(也就是上面的方程组可能找到多个解),例如下图:
图中相切的点有两个,而红点的函数值明显比黑点小。事实上,要想判断找到的点是极低点还是极高点,我们需要将切点代入原函数再进行判断。
另外,在写作本文时,我仍然有一个疑惑没有解决:拉格朗日乘子法在哪些情况下无解(也就是上面的方程组 无解)?换句话说,约束条件和函数没有切点时,我们要怎么求出最低点或最高点。这个问题留待之后想通再补上。
原文:https://blog.csdn.net/ndzzl/article/details/79079561
【java机器学习】支持向量机之拉格朗日乘子法解释相关推荐
- 【精简推导】支持向量机(拉格朗日乘子法、对偶函数、KKT条件)
支持向量机,就是通过找出边际最大的决策边界,来对数据进行分类的分类器.因此,支持向量分类器又叫做最大边际分类器. (疯狂暗示:这是一个最优化问题啊~) 直接上目标求解函数: 这个式子是支持向量机基本形 ...
- 机器学习基础:拉格朗日乘子法
在凸优化问题中,拉格朗日乘子法是最常用的方法之一. 先看个例题:求目标函数 f(x,y)=x2+y2\mathrm{f}(\mathrm{x}, \mathrm{y})=\mathrm{x}^{2}+ ...
- 机器学习知识点(六)增广矩阵求解拉格朗日乘子法的Java实现
基本的拉格朗日乘子法就是求函数f(x1,x2,...)在g(x1,x2,...)=0的约束条件下的极值的方法.其主要思想是将约束条件函数与原函数联系到一起,使能配成与变量数量相等的等式方程,从而求出得 ...
- 机器学习--支持向量机(二)拉格朗日乘子法详解
上节我们从线性回归模型出发详细阐述了支持向量的来源,以及为什么需要寻找支持向量,如何找到这决策函数等问题,最后问题转化为下面的求最大值问题: 先说明一下分类就是如果: 则被分为 ...
- 机器学习中的数学——拉格朗日乘子法(一):等式约束的拉格朗日乘子法
分类目录:<机器学习中的数学>总目录 相关文章: ·拉格朗日乘子法(一):等式约束的拉格朗日乘子法 ·拉格朗日乘子法(二):不等式约束与KKT条件 拉格朗日乘子法是一种寻找多元函数在一组约 ...
- 转 机器学习系列 08:深入理解拉格朗日乘子法、KKT 条件和拉格朗日对偶性
深度理解拉格朗日乘子法.KKT条件与线性规划对偶理论的微妙关系 https://blog.csdn.net/benzhujie1245com/article/details/85270058?utm_ ...
- 支持向量机(svm)学习(最优超平面、线性可分、线性不可分、松弛因子、拉格朗日乘子法、核函数、对偶
文章目录 简介 原理 内容框架 详细学习 最优超平面 支持向量 线性可分 定义 最优化问题 拉格朗日乘子法 强对偶性 线性不可分(部分) 软间隔 线性不可分(完全) 核函数 核函数的作用 常见核函数 ...
- 机器学习中的数学——拉格朗日乘子法(二):不等式约束与KKT条件
分类目录:<算法设计与分析>总目录 相关文章: ·拉格朗日乘子法(一):等式约束的拉格朗日乘子法 ·拉格朗日乘子法(二):不等式约束与KKT条件 现在接着<拉格朗日乘子法(一):等式 ...
- SVM中拉格朗日乘子法、KKT条件、对偶问题详解
SVM中拉格朗日乘子法.KKT条件.对偶问题详解 创作目的 1.SVM回顾 2.拉格朗日乘子法 3.KKT条件 4.对偶问题 强对偶性证明 总结 创作目的 我是机器学习初学者,目前正在上机器学习课,老 ...
最新文章
- Kruskal算法 - C语言详解
- Framework启动过程浅析
- 20170804 - 今日技能封装 - Q
- wxWidgets:库LIB清单
- vue.js 默认选中select_vue.js 解决v-model让select默认选中不生效的问题
- Yii2数据缓存详解
- es数据频繁的更新_es之文档更新过程中并发冲突问题
- lc filter在matlab哪,基于python实现matlab filter函数过程详解
- 数据处理入门干货:MongoDB和pandas极简教程
- 如何使用SIOS DataKeeper在AWS EC2中配置较少SANSQL Server群集
- 第二章 对象以及变量的并发访问
- 在Ubuntu 20.04部署SONIC testbed(topo 0)
- 滴滴 iOS 动态化方案 DynamicCocoa 的诞生与起航
- ubuntu 16.10 install 搜狗输入法
- 深度学习入门(一)快速建立自己的图片数据集
- 支持向量机(SVM)MATLAB 实例讲解,及选择训练方式使误差率尽可能减为0
- self training
- 考研数学-初数1主讲人:郑小松-2020年07月04日
- 汇文opac的openlink.php改造
- 腾讯与阅文技术合作 微服务框架Tars再添PHP
热门文章
- 多个php 链接数据库,ThinkPHP实现多数据库连接的解决方法
- JAVA进阶教学之(Date日期的处理)
- IOC操作Bean管理XML方式(xml自动装配)
- 2.3.0配置 spark_配置scala 2.11.12的spark-2.3.0 maven依赖项的问题
- c语言 把字符串转换为变量名_如何将抓取下来的unicode字符串转换为中文
- 【LeetCode笔记】剑指 Offer 31. 栈的压入、弹出序列 (Java、栈)
- python post form data_python实现发送form-data数据的方法详解
- python制作中文词云_Python如何生成词云(详解)
- c++求n的几次方_14.八年级数学:若a+b+c=1,怎么求 a+b+c的值?分式培优拓展
- C++ STL 容器的一些总结 --- set(multiset)和map(multimap)