| |
|
开发:
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 距离:距离是一种映射关系,满足: 这里我们使用 2 范数来计算距离 2.2 间隔:距超平面最近的点到平面的距离的两倍。由此我们可以推出间隔的计算公式: 而其中距超平面最近的点的间隔是 γ = 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),使得间隔最大,也就是 但是寻找的过程非常的麻烦,所以我们要对此进行优化。 2.2.1 优化目标函数
令引理中的 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?xi?+b?)≥1 也就是说,我们总能通过放缩使得间隔为 1 并且解为 ( w ? ? , b ? ) (\vec w^*,b^*) (w?,b?) 由于
(
w
?
?
,
b
?
)
(\vec w^*,b^*)
(w?,b?) 和
(
w
?
,
b
)
(\vec w,b)
(w,b) 是倍数关系,于是我们的目标就变成了: 取倒数使得求最大值变成求最小值,方便起见,我们把 ( 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?xi?+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=1∑N?αi?(yi?(w?xi?+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?不满足约束? 于是原约束问题就等价于: 这样我们就把一个带有约束的最值问题转化成了无约束最值问题。但是求解这个新的约束问题过程非常复杂,所以我们需要使用拉格朗日函数的对偶性。 2.2.3 拉格朗日函数的对偶性设: 把
min
?
\min
min 和
max
?
\max
max 互换一下: 通常情况下, p ? ≥ d ? p^*\ge d^* p?≥d?,要使等号成立,需要满足两个条件:
凸优化问题
凸函数:
显然 θ ( w ? ) \theta(\vec w) θ(w) 是凸函数 凸集:
所以 θ ( w ? ) \theta(\vec w) θ(w) 的定义域是一个凸集。 K K T KKT KKT 条件
等号成立,所以可以计算
d
?
d^*
d?,令
L
(
w
?
,
b
,
α
?
)
L(\vec w,b,\vec\alpha)
L(w,b,α) 对
w
?
\vec w
w 和
b
b
b 的偏导为 0 可得: 带回
L
(
w
?
,
b
,
α
?
)
L(\vec w,b,\vec\alpha)
L(w,b,α): 对上式求最大值,即: 对于上式,可以使用序列最小最优化算法(SMO)求解 α ? ? \vec\alpha^* α?,进而求出 w ? , b \vec w,b w,b。 通过以下条件: 由于
w
?
≠
0
\vec w\ne0
w?=0,可以推知至少存在一个
α
i
?
>
0
\alpha_i^*>0
αi??>0 且对于此
i
i
i 有 也就是说,对于任意训练样本 ( x ? i , y i ) (\vec x_i,y_i) (xi?,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?xi?+b)=1 。而 y i ( w ? ? x ? i + b ) = 1 y_i(\vec w\cdot\vec x_i+b)=1 yi?(w?xi?+b)=1 表示该点位于最 大间隔边界上,也就是说它是一个支持向量。 这显示出了支持向量机的一个重要性质:训练完成后,大部分的训练样本都不需要保留,最终模型仅与支持向量有关。 调库实现:
同步更新于:SP-FA 的博客 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年11日历 | -2024/11/25 16:38:17- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |