KKT原理以及SVM数学的理论推导分析

一直很好奇机器学习实战中的SVM优化部分的数学运算式是如何得出的,如何转化成了含有内积的运算式,今天上了一节课有了让我很深的启发,也明白了数学表达式推导的全过程。

对于一个SVM问题,优化的关键在于

KKT理论所标明的是在拉格朗日乘数法中引入的系数与上面的不等式约束条件的乘积等于0始终成立,这个条件所保证的是优化问题的解存在,对于上面的优化,从线性空间的角度来思考就是在做最大化最小间隔,是一个非常明显的二次优化问题。本身分析到这里,还不足以说明问题,为何会出现含有内积的运算式呢。

从这个拉格朗日求解函数的运算式出发,我们发现再优化问题的一般解中会始终有L对所有变量的偏导数均为0,这是多元函数取得极值的必要条件;

在这里,对wT的求导仍然与w是一致的,我们发现w其实是关于α的函数;其实本身每一个拉格朗日乘数都会对分类有影响,对于多数的αi,值都是0,而少数不为0的αi则是真正的支持向量,用于确定分类界限。

在获得w与α的关系后,将式子带回用于求解wT*w,可以得到

可以看到如果没有进行kernel变换那么将会以<xi,xj>的内积形式出现,进行kernel变换后则修正为kernel矩阵进行处理。

对原函数进行修正可以得到上面的结论,也就真正的写成了机器学习实战中的数学表达形式,这里y相当于书中的label;

启发:

对于整个过程而言并没有真正的对二次优化问题进行求解,而只是在形式上不断地进行等价变化,真正的求解要用到二次优化求解的相关理论,比如Platt的SMO算法,进行α对修正完成优化过程。这里的Σ表达形式与矩阵的乘积表达形式可以转化,这个在实际用程序解决问题时非常重要,利用矩阵形式处理数据是一个非常重要的思想观点,笔者以为矩阵才是数据的基本形式,实数域只是在线性空间上做了退化。同时,kernel与非kernel之间的形式也并没有过多差别,本质上的区分在于是在原空间进行内积运算还是对样本进行升维后进行内积运算,而kernel变换中的Φ映射我们本身并不关心,但升维后的内积运算可以通过kernel矩阵完成,这才是kernel变换最核心的东西。

 

转载于:https://www.cnblogs.com/BaronCode/p/9986025.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: KKT(Karush-Kuhn-Tucker)条件是数学规划中一种重要的优化理论,用于在存在约束条件下求解最优解。而MATLAB是一种流行的数学软件,可以用于编写和执行各种数学模型和算法。因此,KKT MATLAB代码可以用于解决各种约束优化问题。 下面是一个简单的KKT MATLAB代码示例,用于求解带有等式和不等式约束的凸优化问题。 ```Matlab % 定义目标函数和约束条件 syms x1 x2 % 定义变量 f = @(x) x(1)^2 + x(2)^2; % 目标函数 h = @(x) [x(1) + x(2) - 1; -x(1)]; % 等式约束 g = @(x) [-x(1) - x(2) + 2]; % 不等式约束 % 定义拉格朗日乘子 syms lambda1 lambda2 lambda3 lagrangian = f([x1, x2]) - lambda1 * h([x1, x2])' * h([x1, x2]) - lambda2 * g([x1, x2])' * g([x1, x2]) - lambda3 * g([x1, x2]); % 解拉格朗日方程获取KKT条件 KKT_conditions = [diff(lagrangian, x1), diff(lagrangian, x2), h([x1, x2])', g([x1, x2])', lambda1 * h([x1, x2])', lambda2 * g([x1, x2])']; % 解KKT条件 [x1_sol, x2_sol, lambda1_sol, lambda2_sol, lambda3_sol] = solve(KKT_conditions, [x1, x2, lambda1, lambda2, lambda3]); % 输出最优解和拉格朗日乘子值 disp('最优解:') disp(['x1 = ', num2str(x1_sol)]) disp(['x2 = ', num2str(x2_sol)]) disp('拉格朗日乘子:') disp(['lambda1 = ', num2str(lambda1_sol)]) disp(['lambda2 = ', num2str(lambda2_sol)]) disp(['lambda3 = ', num2str(lambda3_sol)]) ``` 上述代码中,首先定义了目标函数和约束条件。然后,使用符号函数和匿名函数定义了目标函数、等式约束和不等式约束。接下来,定义了拉格朗日乘子,并构建了拉格朗日函数。通过对拉格朗日函数求偏导得到KKT条件,然后通过求解KKT条件方程组得到最优解和拉格朗日乘子的值。最后,通过disp函数输出最优解和拉格朗日乘子的值。 这是一个简单的KKT MATLAB代码示例,实际应用中可能需要根据具体的优化问题进行适当修改和调整。 ### 回答2: kkt是Karush-Kuhn-Tucker的简称,是数学中一种用于优化问题求解的方法。Matlab是一种数值计算和数据可视化软件,是kkt问题求解的常用工具之一。 在Matlab中,可以使用内置的优化函数来求解kkt问题。具体步骤如下: 1. 定义目标函数和约束条件。首先需要定义一个目标函数和一组约束条件,这些约束条件可以是等式约束或者不等式约束。 2. 设置求解选项。使用Matlab中的优化函数,例如fmincon或者quadprog,来设置求解选项,包括求解方法、迭代次数等。 3. 求解kkt问题。调用优化函数,将目标函数和约束条件作为输入参数传入函数中,然后得到最优解。 4. 分析结果。通过分析求解结果,可以获得最优解的数值以及对应的约束条件。 需要注意的是,kkt问题是一个复杂的优化问题,求解结果可能受到初始值、约束条件等因素的影响。因此,在使用Matlab求解kkt问题时,需要根据具体的问题设定合理的目标函数和约束条件,以及选择合适的求解选项。同时,还可以通过调整初始值、增加约束条件等方式优化求解结果。 ### 回答3: KKT (Karush-Kuhn-Tucker)条件是数学优化问题中的一种重要的约束条件,用于判断最优解的存在和判断最优解是否满足约束条件。Matlab是一个常用的科学计算软件,能够对数学优化问题进行求解和分析KKT条件是包括等式约束和不等式约束的非线性优化问题的充分必要条件。对于一个最优化问题而言,如果满足以下条件,则该最优解是可行解: 1. 梯度约束:所有约束条件的梯度向量的线性组合等于目标函数的梯度向量。 2. 不等式约束条件:不等式约束条件大于等于零。 3. 松弛约束条件:松弛约束条件大于等于零。 4. 互补松弛条件:松弛约束条件与对应拉格朗日乘子相乘为零。 在Matlab中求解KKT条件,可以使用内置函数fmincon来求解带有等式约束和不等式约束的非线性优化问题。该函数可以通过设置参数来指定约束条件,并给出目标函数和初始解以进行求解。具体的使用方法可以通过Matlab中的帮助文档进行查阅。 总之,KKT条件是数学优化问题中的一种重要约束条件,而Matlab则是用于求解和分析数学优化问题的科学计算软件。通过结合使用Matlab的fmincon函数,我们可以求解满足KKT条件的最优解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值