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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 支持向量机 -> 正文阅读

[人工智能]支持向量机

支持向量机(Support Vector Machine)

一、基本概念

1.超平面

超平面是指n维线性空间中的维度维n-1维的子空间,它可以把线性空间分割成两个不相交的部分。在二维空间中超平面是一条直线,三维空间中超平面是一个平面。n维空间中的超平面表示如下:
ω T x + b = 0 \omega^Tx + b=0 ωTx+b=0其中 ω T \omega^T ωT x x x都是n维列向量, ω \omega ω是平面上的法向量,决定了超平面的方向,b是一个实数代表的是超平面到原点的距离。

2.点到超平面的距离

对于一个超平面 ω T x + b = 0 \omega^Tx + b=0 ωTx+b=0,超平面上任意一点x’有 ω T x ′ + b = 0 \omega^Tx' + b=0 ωTx+b=0。空间中任意一点x到超平面上的距离等于xx’在法向量 ω \omega ω上的投影:
d = ∣ ω T ∣ ∣ ω ∣ ∣ ( x ? x ′ ) ∣ d=|\frac{\omega^T}{||\omega||}(x-x')| d=ωωT?(x?x)
又因为 ω T x ′ = ? b \omega^Tx' =-b ωTx=?b
d = ω T x + b ∣ ∣ ω ∣ ∣ d=\frac{\omega^Tx+b}{||\omega||} d=ωωTx+b?

3.判断超平面的正反

ω T x i + b > 0 \omega^Tx_i + b>0 ωTxi?+b>0,x在超平面的正面;若 ω T x i + b < 0 \omega^Tx_i + b<0 ωTxi?+b<0,x在超平面的反面。若 ω T x i + b = 0 \omega^Tx_i + b=0 ωTxi?+b=0,x落在超平面上。 那么, 它的值正得越大, 代表点在平面的正向且与平面的距离越远. 反之, 它的值负得越大, 代表点在平面的反向且与平面的距离越远。

4.间隔与最大间隔

在这里插入图片描述

支持向量机(SVM)是一种判别分类的模型,在线性空间中使用决策边界来分离类,决策边界就是上面提到的超平面。在这路我们以二维空间为例子,利用超平面A将样本分成两类,我们称右边为正类,左边为负类。超平面A向左边平移首次碰到负类样本停止,得到边缘超平面A1,超平面A向右边平移首次碰到正类样本停止,得到边缘超平面A2。首次碰到边缘超平面的样本点称为支持向量。边缘超平面A1与边缘超平面A2之间的距离称为间隔。SVM目的是找到一个超平面将样本分类并且这个超平面到支持向量之间具有最大距离也就是使间隔最大化。

二、线性可分SVM

1.转化为二次规划问题

考虑一个包含n个训练实例的二分类问题,其中每个训练实例 x i x_i xi?与二元标签 y i ∈ ? 1 , 1 y_i\in {-1,1} yi??1,1相关联。超平面由 ω T x + b = 0 \omega^Tx + b=0 ωTx+b=0表示,这意味着
ω T x i + b > 0 , y i = 1 \omega^Tx_i + b>0,y_i = 1 ωTxi?+b>0yi?=1 ω T x i + b < 0 , y i = ? 1 \omega^Tx_i + b<0,y_i = -1 ωTxi?+b<0yi?=?1然后由点到超平面的公式
d = ω T x i + b ∣ ∣ ω ∣ ∣ d=\frac{\omega^Tx_i+b}{||\omega||} d=ωωTxi?+b?
其中,|.|表示绝对值,||.||表示向量长度,令超平面与y=1的最近点的距离为 k + > 0 k_+>0 k+?>0,令 k ? > 0 k_->0 k??>0表示超平面与负类最近点的距离。这个约束可以表示为:
ω T x i + b ∣ ∣ ω ∣ ∣ ≥ k + , y i = 1 \frac{\omega^Tx_i+b}{||\omega||} \geq k_+, y_i = 1 ωωTxi?+b?k+?,yi?=1
ω T x i + b ∣ ∣ ω ∣ ∣ ≤ k ? , y i = ? 1 \frac{\omega^Tx_i+b}{||\omega||} \leq k_-, y_i = -1 ωωTxi?+b?k??,yi?=?1
可以通过 y i 和 ω T x i + b = 0 y_i和\omega^Tx_i + b=0 yi?ωTxi?+b=0的乘积来简洁表示
y i ( ω T x i + b ) ≥ M ∣ ∣ w ∣ ∣ y_i(\omega^Tx_i + b) \geq M||w|| yi?(ωTxi?+b)Mw
可以考虑以下优化问题:
m a x w , b M \underset {w,b}{max}M w,bmax?M s . t . ? y i ( ω T x i + b ) ≥ M ∣ ∣ w ∣ ∣ s.t.\ y_i(\omega^Tx_i + b) \geq M||w|| s.t.?yi?(ωTxi?+b)Mw
我们可以使用 ∣ ∣ w ∣ ∣ = 1 M ||w||=\frac{1}{M} w=M1?来简化不等式的右边
m a x w , b 2 ∣ ∣ w ∣ ∣ \underset {w,b}{max} \frac {2}{||w||} w,bmax?w2? s . t . ? y i ( ω T x i + b ) ≥ 1 s.t. \ y_i(\omega^Tx_i + b) \geq 1 s.t.?yi?(ωTxi?+b)1
这里讲一下为什么化成 ∣ ∣ w ∣ ∣ = 1 M ||w||=\frac{1}{M} w=M1?来简化不等式,对于超平面 ω T x i + b = 0 \omega^Tx_i + b=0 ωTxi?+b=0等比例缩放w,b不会改变超平面, ω T x i + b = 0 \omega^Tx_i + b=0 ωTxi?+b=0缩放成 10 ω T x i + 10 b = 0 10\omega^Tx_i + 10b=0 10ωTxi?+10b=0,我们依然可以用 ω ′ T x i + b ′ = 0 \omega'^Tx_i + b'=0 ωTxi?+b=0来表示,只不过 ω ′ = 10 w , b ′ = 10 b \omega'=10w, b'=10b ω=10w,b=10b。在公式推导的过程中有 m a x w , b γ i ∣ ∣ w ∣ ∣ \underset {w,b}{max} \frac {\gamma_i}{||w||} w,bmax?wγi?? s . t . ? y i ( ω T x i + b ) ≥ γ i s.t. \ y_i(\omega^Tx_i + b) \geq \gamma_i s.t.?yi?(ωTxi?+b)γi?
在这里 γ i \gamma_i γi?是一个变量不是常量,如果我们能让三个变量的凸优化问题变成两个变量的凸优化问题,那么问题就会被简化,于是我们加上 s . t . γ i = 1 s.t.\gamma_i=1 s.t.γi?=1这个约束,为什么可以加上这个约束?
在这个式子 γ = y ? ( ω T x ? + b ) \gamma=y^*(\omega^Tx^* + b) γ=y?(ωTx?+b)中(x* ,y*) 指那些支持向量,即那些支撑超平面的点。如果令 γ = 1 \gamma=1 γ=1,我们可以得到一组w,b再取 γ = 10 , 100 , 1000 , . . . . . \gamma=10,100,1000,..... γ=101001000.....,我们可以得到很多组解并且得到的w,b也大很多,但是描述的都是同一个超平面,所以我们不妨令 γ = 1 \gamma=1 γ=1得到一组相对“平凡”的w,b。
因此,SVM优化问题通常以下面形式表示,
m i n w , b ∣ ∣ w ∣ ∣ 2 \underset {w,b}{min} \frac {||w||}{2} w,bmin?2w? s . t . ? y i ( ω T x i + b ) ≥ 1 s.t. \ y_i(\omega^Tx_i + b) \geq 1 s.t.?yi?(ωTxi?+b)1
由于目标函数相对于 w w w而言是二次凸函数,所以它被称为二次规划问题(QP, Quadratic Programming)

2.解二次规划

二次规划问题,可以采用解决约束规划问题的拉格朗日乘数法进行求解。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.软边缘SVM

在这里插入图片描述
如图示,存在决策边界 B 1 B_1 B1?和决策边界 B 2 B_2 B2?,尽管 B 1 B_1 B1?误分类样本, B 2 B_2 B2?正确分类了样本,但这并不表示 B 2 B_2 B2?是比 B 1 B_1 B1?好的决策边界。对于这个问题,我们要考虑如何修正SVM公式,利用一种称为软边缘(soft margin)的方法,学习允许一定训练错误的超平面。
为了在SVM公式中引入训练错误率的概念,让我们放松不等式约束以适应违反规定的少数实例,这样可以为每个训练 x i x_i xi?引入一个松弛变量 ξ i \xi_i ξi?来实现
y i ( ω T x i + b ) ≥ 1 ? ξ i y_i(\omega^Tx_i + b) \geq 1-\xi_i yi?(ωTxi?+b)1?ξi?
变量 ξ i \xi_i ξi?允许在SVM中存在一些松弛,使得每个 x i x_i xi?不需要严格的满足 y i ( ω T x i + b ) ≥ 1 y_i(\omega^Tx_i + b) \geq 1 yi?(ωTxi?+b)1
在存在松弛变量的情况下,重要的是要学习一个最大化间隔(确保良好的泛化性能)和最小化松弛变量(确保最低训练错误率)的超平面,这个可以通过优化问题来实现,如下所示:
m i n w , b ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 n ξ i \underset {w,b}{min} \frac {||w||}{2}+C\sum_{i=1}^n\xi_i w,bmin?2w?+Ci=1n?ξi? s . t . ? y i ( ω T x i + b ) ≥ 1 ? ξ i s.t. \ y_i(\omega^Tx_i + b) \geq 1-\xi_i s.t.?yi?(ωTxi?+b)1?ξi? ξ i ≥ 0 \xi_i \geq 0 ξi?0
其中 C C C是一个超参数,在最大间隔和最小训练错误率之间做一个折中。求解松弛后的二次规划问题,可以应用拉格朗日乘子法将原始问题转换成相应的对偶问题进行求解。

三、线性不可分SVM

对于一些非线性可分的数据集,可以将原先的属性空间𝒙变换到一个新的空间𝜑(𝒙)(高维空间),在变换后的空间中使用原有的线性SVM方法来构造决策边界以实现数据集的二分类,然后可以将超平面投影回原始的属性空间,从而产生非线性决策边界——超曲面。
如下图的例子,通过变换空间实现了非线性决策边界的构造,其空间变换为: φ ( 𝑥 𝑖 ) = 𝑥 𝑖 2 ? 𝑥 𝑖 , 𝑖 = 1 , 2 \varphi(𝑥_𝑖 )=𝑥_𝑖^2?𝑥_𝑖,𝑖=1,2 φ(xi?)=xi2??xi?i=1,2
在这里插入图片描述
非线性SVM的计算推导过程也类似于前述的线性SVM,主要变化为:将计算过程中的 𝒙 𝑖 𝒙_𝑖 xi?变为 φ ( 𝒙 𝑖 ) \varphi(𝒙_𝑖 ) φ(xi?)。空间变换中,仅需使用𝜑(𝒙)的内积函数,这可以通过核技术来实现。使用核函数,可以直接在变换空间中处理内积,而不必处理非线性变换函数𝜑的确切形式,这意味使用高维变换的时候可以仅在原始属性空间中进行计算,不会引发维数灾难,且核函数计算内积也比变换后的𝜑(𝒙)要廉价得多,所以SVM在高复杂度和非线性问题中使用十分广泛。空间变换中使用的常用核函数有多项式核、径向基函数核以及S形核,其中径向基函数核(Radial Basis Function,RBF)是最常用的。
有关非线性SVM的计算以及核技术可参见《数据挖掘导论》(原著:《 Introduction to Data Mining 》,Pang-Ning Tan、Michael Stainbach,Vipin Kumar等著)等著作。

四、实验

1.调用库函数

from sklearn.svm import LinearSVC
from mglearn.datasets import make_blobs
import mglearn
import numpy as np
import matplotlib.pyplot as plt

2.数据集线性不可分

#if dataset can not be devided by a linear model
X, y = make_blobs(centers=4, random_state=8)
y = y % 2

mglearn.discrete_scatter(X[:, 0], X[:, 1], y)
plt.xlabel("Feature 0")
plt.ylabel("Feature 1")

在这里插入图片描述

linear_svm = LinearSVC().fit(X, y)

mglearn.plots.plot_2d_separator(linear_svm, X)
mglearn.discrete_scatter(X[:, 0], X[:, 1], y)
plt.xlabel("Feature 0")
plt.ylabel("Feature 1")

在这里插入图片描述

3.加入特征

# increase characters

X_new = np.hstack([X, X[:, 1:] ** 2])

from mpl_toolkits.mplot3d import Axes3D, axes3d
figure = plt.figure()

ax = Axes3D(figure, elev=-152, azim=-26)
mask = y == 0
ax.scatter(X_new[mask, 0], X_new[mask, 1], X_new[mask, 2], c= 'b', cmap=mglearn.cm2, s=60)
ax.scatter(X_new[~mask, 0], X_new[~mask, 1], X_new[~mask, 2], c= 'r', cmap=mglearn.cm2, s=60)
ax.set_xlabel("feature0")
ax.set_ylabel("feature1")
ax.set_zlabel("feature1 ** 2")

在这里插入图片描述
在这里插入图片描述

4.实验结果

对于线性不可分的数据,可以通过升维对其进行分类。在SVM中高维空间的操作等价于低维空间的操作,这也是为什么SVM能在高维空间中操作的原因。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-01-03 16:05:23  更:2022-01-03 16:08:21 
 
开发: 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/26 22:36:34-

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