浙江大学《机器学习》MOOC课程笔记 支持向量机SVM(二)

原问题(PRIME PROBLEM)和对偶问题(DUAL PROBLEM) [半懂不懂一知半解懵懵懂懂]

  • 拉格朗日乘子法

    Step.1原函数
    假设有K个不等式,m个等式
    在这里插入图片描述
    Step.2定义拉格朗日函数 L ( w , α , β ) L(w,\alpha,\beta) L(w,α,β)
    为每条约束条件添加拉格朗日乘子 α i ≥ 0 \alpha_i≥0 αi0

在这里插入图片描述
Step.3对偶函数

L ( w , α , β ) L(w,\alpha,\beta) L(w,α,β)遍历所有定义域上的 w w w,找到使 L ( w , α , β ) L(w,\alpha,\beta) L(w,α,β)最小的,同时将这个最小的函数值赋值给 θ ( α , β ) \theta(\alpha,\beta) θ(α,β) 在这里插入图片描述

  • 定理
    1.定理一:对偶定理(DUALITY THEOREM)在这里插入图片描述证明:
    在这里插入图片描述

引申:对偶差距(DUALITY GAP)
在这里插入图片描述

2.定理二:强对偶定理(STRONG DUALITY THEOREM)
在这里插入图片描述

转化为对偶问题

  • 将SVM的优化问题改造为原问题
    为了让改进至目前的SVM的优化问题满足强对偶定理,而原问题中的 g i ( w ) ≤ 0 g_i(w)≤0 gi(w)0,故首先要将SVM的两个限制条件由 ≥ 0 ≥0 0进行改造
    在这里插入图片描述在这里插入图片描述

此时原问题中的
在这里插入图片描述而不等式 g i ( w ) ≤ 0 g_i(w)≤0 gi(w)0被分成了两部分

在这里插入图片描述
由于问题中全为不等式,故不存在 h i ( w ) = 0 h _i(w)=0 hi(w)=0项。

按照对偶问题的定义将对偶问题写成如下形式:
在这里插入图片描述其中 α i , β i \alpha_i,\beta_i αi,βi分别是改造两个 g i ( w ) ≤ 0 g_i(w)≤0 gi(w)0条件的系数,类比于原问题中的拉格朗日乘子 α i \alpha_i αi

  • 如何将原问题化为对偶问题
    由于要对 ( w , δ i , b ) (w, δ _i,b) (w,δi,b)分别遍历求最小值,所以对三个变量分别求导并令导数 = 0 =0 =0(由于 w w w为向量,故使用向量求导准则)在这里插入图片描述
    将求得的三个式子带入表达式中,可以将SVM的原问题转化为对偶问题:
    在这里插入图片描述

算法流程 [这个好难懂诶(#`O′)]

1.如何求解上述对偶问题
2.基于对偶问题给出SVM算法的统一流程

  • 根据核函数的公式,只需要知道核函数的值,而无需知道具体的 ϕ ( x i ) , ϕ T ( x i ) \phi(x_i),\phi^T(x_i) ϕ(xi),ϕT(xi),带入公式求解出所有的 α i ( i = 1 \alpha_i(i=1 αi(i=1~ N ) N) N)后,可以根据在这里插入图片描述求出 w w w
    注意 由于 ϕ ( x i ) \phi(x_i) ϕ(xi)不知道是否具有显示表达式,所以 w w w也不知道是否具有显示表达式。

  • 如何求b
    首先,
    在这里插入图片描述

    其次,根据KKT条件,对所有的 i ( 1 i(1 i(1~ N ) N) N),可以得到两个 g i ( w ) g_i(w) gi(w)分式 = 0 =0 =0
    { β i δ i = 0 → ( c − α i ) δ i = 0 α i [ 1 + δ i − y i w T ϕ ( X i ) − y i b ] = 0 \left\{ \begin{aligned} &\beta_iδ_i=0 → (c-\alpha_i)δ_i=0& \\ &\alpha_i[1+δ_i-y_iw^T\phi(X_i)-y_ib]=0& \\ \end{aligned} \right. {βiδi=0(cαi)δi=0αi[1+δiyiwTϕ(Xi)yib]=0
    并且同时,如果对某个i, α i ≠ 0 \alpha_i≠0 αi=0 α i ≠ c \alpha_i≠c αi=c,则根据KKT条件,必有
    { δ i = 0 1 + δ i − y i w T ϕ ( X i ) − y i b = 0 \left\{ \begin{aligned} &δ_i=0 & \\ &1+δ_i-y_iw^T\phi(X_i)-y_ib=0& \\ \end{aligned} \right. {δi=01+δiyiwTϕ(Xi)yib=0

由于等式 1 + δ i − y i w T ϕ ( X i ) − y i b = 0 1+δ_i-y_iw^T\phi(X_i)-y_ib=0 1+δiyiwTϕ(Xi)yib=0中的项, y i w T ϕ ( X i ) = ∑ j = 1 N α i y i y j K ( X j , X i ) y_iw^T\phi(X_i)=\sum_{j=1}^N \alpha_iy_iy_jK(X_j,X_i) yiwTϕ(Xi)=j=1NαiyiyjK(Xj,Xi)
注意 如果 α i = 0 \alpha_i=0 αi=0,则该样本不会出现在公式的求和中出现,也就不会对 f ( x ) f(x) f(x)产生影响,如果 α i > 0 \alpha_i>0 αi0,则必有 y i f ( x i ) = 1 y_if(x_i)=1 yif(xi)=1,所对应的样本点位于最大间隔边界上,是一个支持向量。
所以只需要找到 0 < α i < c 0<\alpha_i<c 0<αi<c,那么 b b b的求解公式为:
在这里插入图片描述

  • 对于一个测试样本X,如何获得其预测的类别
    1.“核函数戏法”
    在这里插入图片描述2.只通过核函数,也能求得SVM算法最终预测的类别
    在这里插入图片描述3.SVM训练和测试的流程(基于对偶问题的求解)
    a.训练过程
    ①输入训练数据
    在这里插入图片描述

    ②求 α i ( i = 1 \alpha_i(i=1 αi(i=1~ N ) N) N)
    在这里插入图片描述

    ③求 b b b
    在这里插入图片描述

    b.测试过程
    在这里插入图片描述

课后思考题

在这里插入图片描述

浙江大学《机器学习》 mooc课程

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是一个简单的分查找的完整代码实现,该代码实现了在有序数组中查找指定元素的功能。 ```c++ #include <iostream> using namespace std; int binarySearch(int arr[], int left, int right, int x) { while (left <= right) { int mid = left + (right - left) / 2; // 如果 x 在中间 if (arr[mid] == x) return mid; // 如果 x 大于中间元素,只需要在右半部分搜索 if (arr[mid] < x) left = mid + 1; // 如果 x 小于中间元素,只需要在左半部分搜索 else right = mid - 1; } // 如果 x 没有在数组中找到,返回 -1 return -1; } int main() { int arr[] = { 2, 3, 4, 10, 40 }; int n = sizeof(arr) / sizeof(arr[0]); int x = 10; int result = binarySearch(arr, 0, n - 1, x); if (result == -1) cout << "元素不在数组中!"; else cout << "元素在数组中的索引为:" << result; return 0; } ``` 在上面的代码中,`binarySearch` 函数是实现分查找的主要函数。该函数接受四个参数:要搜索的数组 `arr`,搜索范围的左边界 `left`,搜索范围的右边界 `right`,以及要查找的元素 `x`。 函数使用一个 while 循环来查找元素,只要搜索范围还没有缩小到只包含一个元素,就继续执行循环。在每次循环中,函数会计算搜索范围的中间位置 `mid`。然后,函数会检查中间位置的元素是否等于要查找的元素。如果是,函数会返回中间位置的索引。 如果中间位置的元素小于要查找的元素,那么要查找的元素只可能出现在中间位置的右侧。因此,函数会将搜索范围的左边界移到中间位置的右边一位。如果中间位置的元素大于要查找的元素,那么要查找的元素只可能出现在中间位置的左侧。因此,函数会将搜索范围的右边界移到中间位置的左边一位。 如果在循环结束时还没有找到要查找的元素,函数会返回 -1,表示元素不在数组中。否则,函数会返回要查找的元素在数组中的索引。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值