支持向量机的SMO算法原理推导

本文详细介绍了支持向量机的SMO算法原理,并提供了Python实现的概述。通过SMO算法,可以有效地解决SVM的求解问题,文章涵盖了算法的核心步骤和优化过程。
摘要由CSDN通过智能技术生成

用SMO和Python实现支持向量机的分类算法 (似乎CSDN对Markdown解析的不好)

一起学ML之支持向量机 --SMO算法Python实现 -原理

在前面的课程中,我们曾经介绍了一种暴力算法如何在一个平面(二维)空间中找到一些样本点的分割平面。那个算法是很直接的,能够方便大家更好地理解支持向量机的概念和一些参数的意义,但是显然不是一个成熟的、具有扩展性、具有实际使用价值的方法。
九十年代末的时候,如我们前面提到的,John Platt发表了一篇重要的论文,如何用一个叫做SMO的算法实现SVM问题的快速求解。当然,如我们前面所介绍用QP、Convex optimization也可以求解SVM的问题的,但是SMO有诸多优点。我们不讨论各种算法的优缺点,今天我们一起来看看用Python如何实现一个SMO的算法。其实在John的论文里已经阐述的比较清楚,而且他还给出了一个Pseudo Code,但是不得不说的是SMO理解起来仍然是非常困难,好在网上能找到很多资料可以作为理解这一算法的很好的补充。

先让我们简单回顾一下上次的讲座我们得到的结论:

$$min_\alpha\;\psi(\alpha) = \frac{1}{2}\sum_{i,j=1}^m y^{(i)}y^{(j)}\alpha_i\alpha_jK(x_{i}, x_{j})-\sum_{i=1}^m \alpha_i$$
$$约束条件:0 \leq \alpha_i \leq C, \; i = 1,...,m$$
$$\sum_{i=1}^m\alpha_iy^{(i)} = 0$$
$$(J11)$$

其中:
$m$ 是样本数量;
$x^{(i)}$ 是第i个样本的属性(feature)向量;
$\langle x^{(i)}, x^{(j)} \rangle$ 表示第i个样本feature向量和第j个样本feature向量的内积;
$y^{(i)}$ 是第i个样本所属于的class,1或-1;
$\alpha_i$ 是附着于第i个样本的拉格朗日乘子;
$C$ 是正则化超参.

当存在属性mapping函数时,用核函数$\phi(x)$的时候,内积可以表示成$\langle \phi(x^{(i)}), \phi(x^{(j)}) \rangle$。

当使用dual form 时,判别函数将表示成:
$$f(x) = \sum^m_{i=1} \alpha_i y^{(i)} \langle x_{i}, x \rangle + b\space\space\space\space\space(J10)$$
其中b是标量,称为bias。

我们的目的就是找到”一堆“ $\alpha_i = { \alpha_1,\alpha_2,\alpha_3,...,\alpha_n \ }$ 使得目标函数最优(最小或最大)。SMO的思路是:每次选取两个$\alpha$, $\alpha_1$和$\alpha_2$,固定其它$\alpha $乘子,使得目标函数只是关于$\alpha_1$和$\alpha_2$的函数,求最优解。然后在这个基础上迭代,直到找到所有的$\alpha $,得到目标函数的最优解。$\alpha_1$和$\alpha_2$的选取是heuristically,优化是analytically。

我们先来看看有了$\alpha_1$和$\alpha_2$,其它$\alpha$固定的情况下,我们如何通过找到最优的$\alpha_1$和$\alpha_2$进而找到目标函数的最优解,这个也是SMO算法的核心。为了表达方便,先定义如下几个简化形式&#x

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值