IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 机器学习 03:线性可分支持向量机 -> 正文阅读

[数据结构与算法]机器学习 03:线性可分支持向量机




一、主要思想:

支持向量机(SVM)的基本模型线性支持支持向量机是定义在特征空间上的间隔最大的线性分类器,这使它有别于感知机。适用于高维小样本,且线性可分的数据。



二、找最大间隔:


2.1 距离:

距离是一种映射关系,满足:
{ D ( x , y ) ≥ 0 , ? D ( x , y ) = 0 ? x = y D ( x , y ) = D ( y , x ) D ( x , z ) ≠ D ( x , y ) + D ( y , z ) \begin{cases}D(x,y)\ge0,\ D(x,y)=0\Leftrightarrow x=y\\D(x,y)=D(y,x)\\D(x,z)\ne D(x,y)+D(y,z)\end{cases} ??????D(x,y)0,?D(x,y)=0?x=yD(x,y)=D(y,x)D(x,z)?=D(x,y)+D(y,z)?

这里我们使用 2 范数来计算距离



2.2 间隔:

距超平面最近的点到平面的距离的两倍。由此我们可以推出间隔的计算公式:
γ i = 2 w ? ? x ? i + b ∥ w ? ∥ \gamma_i=2\frac{\vec w\cdot\vec x_i+b}{\parallel \vec w\parallel} γi?=2w w ?x i?+b?

而其中距超平面最近的点的间隔是 γ = min ? i = 1 , 2 , 3 ? γ i \gamma = \min\limits_{i=1,2,3\cdots}\gamma_i γ=i=1,2,3?min?γi?

我们要寻找合适的 ( w ? , b ) (\vec w,b) (w ,b),使得间隔最大,也就是
max ? w ? , ? b γ s . t . ? ? i ? ( w ? x ? i + b ) y i > 0 \max\limits_{\vec w,\ b}\gamma\\s.t.\ \forall i\ (\vec w\vec x_i+b)y_i>0 w ,?bmax?γs.t.??i?(w x i?+b)yi?>0

但是寻找的过程非常的麻烦,所以我们要对此进行优化。


2.2.1 优化目标函数

支持向量机的缩放引理:假设找到一组 ( w ? , b ) (\vec w,b) (w ,b),对于 ? r > 0 \forall r>0 ?r>0 ( r w ? , r b ) (r\vec {w},rb) (rw ,rb) 仍是解

令引理中的 r = γ r=\gamma r=γ

y i r i = y i ( w ? ∥ w ? ∥ ? x i + b ∥ w ? ∥ ) ≥ γ y i ( w ? ∥ w ? ∥ γ ? x i + b ∥ w ? ∥ γ ) ≥ 1 \begin{aligned}y_ir_i=y_i(\frac{\vec w}{\parallel\vec w\parallel}\cdot x_i+\frac{b}{\parallel\vec w\parallel})&\ge\gamma\\y_i(\frac{\vec w}{\parallel\vec w\parallel\gamma}\cdot x_i+\frac{b}{\parallel\vec w\parallel\gamma})&\ge1\end{aligned} yi?ri?=yi?(w w ??xi?+w b?)yi?(w γw ??xi?+w γb?)?γ1?

其中 ∥ w ? ∥ \parallel\vec w\parallel w γ \gamma γ 都是标量,所以令:

w ? ? = w ? ∥ w ? ∥ γ b ? = b ∥ w ? ∥ γ \vec w^*=\frac{\vec w}{\parallel\vec w\parallel\gamma}\\b^*=\frac{b}{\parallel\vec w\parallel\gamma} w ?=w γw ?b?=w γb?

于是有:

y i ( w ? ? x ? i + b ? ) ≥ 1 y_i(\vec w^*\vec x_i+b^*)\ge1 yi?(w ?x i?+b?)1

也就是说,我们总能通过放缩使得间隔为 1 并且解为 ( w ? ? , b ? ) (\vec w^*,b^*) (w ?,b?)

由于 ( w ? ? , b ? ) (\vec w^*,b^*) (w ?,b?) ( w ? , b ) (\vec w,b) (w ,b) 是倍数关系,于是我们的目标就变成了:
max ? w ? ? , b ? γ = max ? w ? ? , b ? 2 ∥ w ? ? ∥ min ? i ( w ? ? ? x i + b ? ) = max ? w ? ? , b ? 2 ∥ w ? ? ∥ \max\limits_{\vec w^*,b^*}\gamma=\max\limits_{\vec w^*,b^*}\frac{2}{\parallel\vec w^*\parallel}\min\limits_i(\vec w^*\cdot x_i+b^*)=\max\limits_{\vec w^*,b^*}\frac{2}{\parallel\vec w^*\parallel} w ?,b?max?γ=w ?,b?max?w ?2?imin?(w ??xi?+b?)=w ?,b?max?w ?2?

取倒数使得求最大值变成求最小值,方便起见,我们把 ( w ? ? , b ? ) (\vec w^*,b^*) (w ?,b?) 写为 ( w ? , b ) (\vec w,b) (w ,b),此时,目标函数变成了:

min ? w ? , b 1 2 ∥ w ? ∥ s . t . ? y i ( w ? ? x ? i + b ) ≥ 1 \min\limits_{\vec w,b}\frac{1}{2}\parallel\vec w\parallel\\s.t.\ y_i(\vec w\cdot\vec x_i+b)\ge1 w ,bmin?21?w s.t.?yi?(w ?x i?+b)1

带有约束的最值问题,可以想到使用拉格朗日乘子法来求目标函数。


2.2.2 拉格朗日乘子法

L ( w ? , b , α ? ) = 1 2 ∥ w ? ∥ ? ∑ i = 1 N α i ( y i ( w ? ? x ? i + b ) ? 1 ) s . t . ? α i ≥ 0 L(\vec w,b,\vec\alpha)=\frac{1}{2}\parallel\vec w\parallel-\sum\limits_{i=1}^N\alpha_i(y_i(\vec w\cdot\vec x_i+b)-1)\\s.t.\ \alpha_i\ge0 L(w ,b,α )=21?w ?i=1N?αi?(yi?(w ?x i?+b)?1)s.t.?αi?0

θ ( w ? ) = max ? α i ≥ 0 L ( w ? , b , α ? ) \theta(\vec w)=\max\limits_{\alpha_i\ge0}L(\vec w,b,\vec\alpha) θ(w )=αi?0max?L(w ,b,α )

θ ( w ? ) = { 1 2 ∥ w ? ∥ 2 w ? , b ? 满 足 约 束 ∞ w ? , b ? 不 满 足 约 束 \theta(\vec w)=\begin{cases}\frac{1}{2}\parallel\vec w\parallel^2&\vec w,b\ 满足约束\\\infty&\vec w,b\ 不满足约束\end{cases} θ(w )={21?w 2?w ,b?w ,b??

于是原约束问题就等价于:
min ? w ? , b θ ( w ? ) = min ? w ? , b max ? α i ≥ 0 L ( w ? , b , α ? ) \min\limits_{\vec w,b}\theta(\vec w)=\min\limits_{\vec w,b}\max\limits_{\alpha_i\ge0}L(\vec w,b,\vec\alpha) w ,bmin?θ(w )=w ,bmin?αi?0max?L(w ,b,α )

这样我们就把一个带有约束的最值问题转化成了无约束最值问题。但是求解这个新的约束问题过程非常复杂,所以我们需要使用拉格朗日函数的对偶性。


2.2.3 拉格朗日函数的对偶性

设:
min ? w ? , b max ? α i ≥ 0 L ( w ? , b , α ? ) = p ? \min\limits_{\vec w,b}\max\limits_{\alpha_i\ge0}L(\vec w,b,\vec\alpha)=p^* w ,bmin?αi?0max?L(w ,b,α )=p?

min ? \min min max ? \max max 互换一下:
max ? α i ≥ 0 min ? w ? , b L ( w ? , b , α ? ) = d ? \max\limits_{\alpha_i\ge0}\min\limits_{\vec w,b}L(\vec w,b,\vec\alpha)=d^* αi?0max?w ,bmin?L(w ,b,α )=d?

通常情况下, p ? ≥ d ? p^*\ge d^* p?d?,要使等号成立,需要满足两个条件:

  1. 优化问题是凸优化问题

  2. 满足 K K T KKT KKT 条件



凸优化问题

凸优化问题 (Convex optimization problem) 要求目标函数为凸函数,而且定义域为凸集

凸函数:

f ′ ′ ( x ) ≥ 0 f^{\prime\prime}(x)\ge0 f(x)0,则 f ( x ) f(x) f(x) 为凸函数。

显然 θ ( w ? ) \theta(\vec w) θ(w ) 是凸函数

凸集:

当集合 C C C 中任意两点之间的线段上的点也在 C C C 内,则这个集合是凸集。

所以 θ ( w ? ) \theta(\vec w) θ(w ) 的定义域是一个凸集。


K K T KKT KKT 条件

  1. 主问题可行: y i ( w ? ? x ? i + b ) ? 1 ≥ 0 y_i(\vec w\cdot\vec x_i+b)-1\ge0 yi?(w ?x i?+b)?10

  2. 对偶问题可行: α i ≥ 0 \alpha_i\ge0 αi?0

  3. 互补松弛: α i ( y i ( w ? ? x ? i + b ) ? 1 ) = 0 \alpha_i(y_i(\vec w\cdot\vec x_i+b)-1)=0 αi?(yi?(w ?x i?+b)?1)=0


等号成立,所以可以计算 d ? d^* d?,令 L ( w ? , b , α ? ) L(\vec w,b,\vec\alpha) L(w ,b,α ) w ? \vec w w b b b 的偏导为 0 可得:
w ? = ∑ i = 1 N α i y i x ? i ∑ i = 1 N α i y i = 0 \vec w=\sum\limits_{i=1}^N\alpha_iy_i\vec x_i\\\sum\limits_{i=1}^N\alpha_iy_i=0 w =i=1N?αi?yi?x i?i=1N?αi?yi?=0

带回 L ( w ? , b , α ? ) L(\vec w,b,\vec\alpha) L(w ,b,α )
min ? w ? , b L ( w ? , b , α ? ) = ? 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x ? i ? x ? j ) + ∑ i = 1 N α i \min\limits_{\vec w,b}L(\vec w,b,\vec\alpha)=-\frac{1}{2}\sum\limits_{i=1}^N\sum\limits_{j=1}^N\alpha_i\alpha_jy_iy_j(\vec x_i\cdot\vec x_j)+\sum\limits_{i=1}^N\alpha_i w ,bmin?L(w ,b,α )=?21?i=1N?j=1N?αi?αj?yi?yj?(x i??x j?)+i=1N?αi?

对上式求最大值,即:
min ? α i ≥ 0 ( 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x ? i ? x ? j ) ? ∑ i = 1 N α i ) s . t . ∑ i = 1 N α i y i = 0 \min\limits_{\alpha_i\ge0}\left(\frac{1}{2}\sum\limits_{i=1}^N\sum\limits_{j=1}^N\alpha_i\alpha_jy_iy_j(\vec x_i\cdot\vec x_j)-\sum\limits_{i=1}^N\alpha_i\right)\\s.t. \sum\limits_{i=1}^N\alpha_iy_i=0 αi?0min?(21?i=1N?j=1N?αi?αj?yi?yj?(x i??x j?)?i=1N?αi?)s.t.i=1N?αi?yi?=0

对于上式,可以使用序列最小最优化算法(SMO)求解 α ? ? \vec\alpha^* α ?,进而求出 w ? , b \vec w,b w ,b

通过以下条件:
{ K K T ? 条 件 w ? = ∑ i = 1 N α i y i x ? i ∑ i = 1 N α i y i = 0 \begin{cases}KKT\ 条件\\\vec w=\sum\limits_{i=1}^N\alpha_iy_i\vec x_i\\\sum\limits_{i=1}^N\alpha_iy_i=0\end{cases} ????????????KKT?w =i=1N?αi?yi?x i?i=1N?αi?yi?=0?

由于 w ? ≠ 0 \vec w\ne0 w ?=0,可以推知至少存在一个 α i ? > 0 \alpha_i^*>0 αi??>0 且对于此 i i i
y i ( w ? ? ? x ? i + b ? ) = 1 y_i(\vec w^*\cdot\vec x_i+b^*)=1 yi?(w ??x i?+b?)=1

也就是说,对于任意训练样本 ( x ? i , y i ) (\vec x_i,y_i) (x i?,yi?),总有 α i = 0 \alpha_i=0 αi?=0 或者 y i ( w ? ? x ? i + b ) = 1 y_i(\vec w\cdot\vec x_i+b)=1 yi?(w ?x i?+b)=1 。而 y i ( w ? ? x ? i + b ) = 1 y_i(\vec w\cdot\vec x_i+b)=1 yi?(w ?x i?+b)=1 表示该点位于最 大间隔边界上,也就是说它是一个支持向量。

这显示出了支持向量机的一个重要性质:训练完成后,大部分的训练样本都不需要保留,最终模型仅与支持向量有关


调库实现:

import numpy as np
from sklearn import svm
from sklearn import datasets
from sklearn.model_selection import train_test_split

My_Data = datasets.load_iris()
x = My_Data['data']
y = My_Data['target']
train_x, test_x, train_y, test_y = train_test_split(x, y, test_size = 0.3)

clf = svm.SVC(kernel='linear')
clf.fit(train_x, train_y)

clf.predict(test_x)
print(clf.score(test_x, test_y))




同步更新于:SP-FA 的博客


返回
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-04 20:01:20  更:2021-07-04 20:02:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/26 5:11:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码