| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> SVM 支持向量机算法(Support Vector Machine )【Python机器学习系列(十四)】 -> 正文阅读 |
|
[人工智能]SVM 支持向量机算法(Support Vector Machine )【Python机器学习系列(十四)】 |
SVM 支持向量机算法(Support Vector Machine )【Python机器学习系列(十四)】 文章目录?????????????????????????????????????????????????????????????????????????????????????????????? 大家好,我是侯小啾! ?今天分享的内容是支持向量机算法的逻辑,及其python实现。 1.SVM简介在深度学习出现之前,支持向量机 被称为表现最好的算法。支持向量机算法适用于一些复杂数据的分类。现在更多用的是深度学习,深度学习的效果大于SVM。但是SVM作为经典算法,还是十分重要,是学习机器学习过程的必修内容。 2. SVM 逻辑推导2.1 Part1 化简限制条件给定样本数据集,假设样本特征为X,样本标签为y。 欲将这些样本分为二类,则需要找到中间的超平面。该超平面表示为: 其中 ω \omega ω 称为法向量,其决定了超平面的方向。 点到超平面的距离可以表示为 这里的
x
i
x_i
xi?指的不再是超平面上的点,而是样本点的向量。 其中,位于超平面
ω
T
x
i
+
b
=
0
\omega^Tx_i + b = 0
ωTxi?+b=0 左右的标签对应的y_i的正负不要设定反了,只有设定正确该公式才可以保证得到正值。不然的话保证得到的就会是负值。 该约束条件可表示为 提示:这里的限制条件只用了一个表达式表示,实际上有m个(m也是样本点的个数)。每个样本点对应一个限制条件。 进一步,限制条件可再转化为: 2.2 Part2 SVM拉格朗日乘子法求解现在我们已经得到了目标函数表达式与限制条件的表达式,可以使用拉格朗日乘子法对其进行求解。 ????
L
(
ω
,
b
,
λ
)
=
1
2
∣
∣
ω
∣
∣
2
+
∑
i
=
1
m
λ
i
[
1
?
(
ω
T
x
i
+
b
)
y
i
]
L(\omega,b,\lambda)=\frac{1}{2}||\omega||^2+\sum_{i=1}^{m}{\lambda_i}{[1-(\omega^Tx_i+b)y_i]}
L(ω,b,λ)=21?∣∣ω∣∣2+∑i=1m?λi?[1?(ωTxi?+b)yi?] 目标问题是一个凸二次规划问题:目标函数是二次型函数,且约束函数是仿射函数。所以该问题有全局最小值。 其中, λ \lambda λ是拉格朗日乘子,这里的m是样本的个数,每个样本对应一个拉格朗日算子,共计m个拉格朗日算子,对应m个限制条件。
对
F
(
ω
,
b
,
λ
)
对F(\omega,b,\lambda)
对F(ω,b,λ)求关于
ω
\omega
ω 和
b
b
b的偏导,并令其为0,再求解: ???? ? L ( ω , b , λ ) ? b = ? ∑ i = 1 m λ i y i = 0 \frac{?L(\omega,b,\lambda)}{?b}=-\sum_{i=1}^{m}\lambda_iy_i=0 ?b?L(ω,b,λ)?=?∑i=1m?λi?yi?=0 解得 ????????? ω = ∑ i = 1 m λ i y i x i \omega=\sum_{i=1}^{m}\lambda_iy_ix_i ω=∑i=1m?λi?yi?xi? ?????????
0
=
∑
i
=
1
m
λ
i
y
i
0=\sum_{i=1}^{m}\lambda_iy_i
0=∑i=1m?λi?yi? 2.3 Part3 求解超平面目标函数: 限制条件: 然后接下来,不难发现这是一个二次规划问题,将每个样本点的
x
i
x_i
xi?、
y
i
y_i
yi?替换为样本值数字,然后求目标函数关于
λ
1
\lambda_1
λ1?,
λ
2
\lambda_2
λ2?,… ,
λ
n
\lambda_n
λn?的偏导数,并令其等于0,从而得到m个等式,联立这 m 个等式,以及
∑
i
=
1
m
λ
i
y
i
=
0
\sum_{i=1}^{m}\lambda_iy_i=0
∑i=1m?λi?yi?=0进行求解。理论上即可以求出
λ
1
\lambda_1
λ1?,
λ
2
\lambda_2
λ2?,… ,
λ
n
\lambda_n
λn?的值。 最后,根据下式(符号函数sgn)即可对样本数据进行分类: 3.核函数到此我们已经完整地实现了线性可分的支持向量机。但是现实中目标数据未必一直是线性可分的。面对这样的情况,我们可以使用 核函数 对原始目标数据进行“升维”操作。
其中,高斯核函数,也称径向基函数(Radial Basis Function 简称RBF)。 此外,核函数也可以通过多个核函数与正数的线性组合得到,如
a
k
1
+
b
k
2
ak_1+bk_2
ak1?+bk2?; 4. 软间隔支持向量机线性可分支持向量机中的约束条件要求所有的样本都必须划分正确,这个间隔称为“硬间隔”。这也导致线性可分的支持向量机可能带来过拟合的问题,为了缓解这个问题,可以通过使用 软间隔 来允许支持向量机在对少数样本分类时出错。 其中,C>0,C是一个常数。C越大,则分类的准确性就会越高,但是会因为过拟合导致,泛化能力会变差 然而这个损失函数的性质不太好导致后续不易求解,所以可以使用“替代损失”函数, hinge损失: φ h i n g e ( z ) = m a x ( 0 , 1 ? z ) \varphi_{hinge}(z)=max(0,1-z) φhinge?(z)=max(0,1?z) 指数损失 φ e x p o n e n t i a l l o s s = e x p ( ? z ) \varphi_{exponential loss}=exp(-z) φexponentialloss?=exp(?z) 对率损失 φ l o g i s t i c l o s s = l o g ( 1 + e x p ( ? z ) ) \varphi_{logistic loss}=log(1+exp(-z)) φlogisticloss?=log(1+exp(?z)) 5. 支持向量回归 SVR线性可分的支持向量机SVM通过求解出的超平面对数据进行分类,因此该算法不仅仅可以分类,也可以稍作迁移,当作回归算法来使用。求解超平面的过程,也即求解回归方程的过程,该过程被称为支持向量回归(SVR)。 6.python实现支持向量机6.1 方法详解sklearn.svm中提供了SVC, SVR,LinearSVC, LinearSVR, NuSVC, NuSVR, OneClassSVM, l1_min_c一系列类。 其中,使用核函数时,参数kernel可用的值汇总如下:
LinearSVC, LinearSVR即为线性支持向量机,和线性支持向量回归,相当于是指定使用线性核的SVC和SVR。所以没有kernel参数,不能指定核函数。 类OneClassSVM实现了一个用于离群点检测的类;l1_min_c是用于计算C的下界,以便获得非“空”(所有特征权重为零)模型的。这里在这方面不做过多深入。 6.2 案例展示使用支持向量机对葡萄酒数据进行分类为例,过程中使用线性核函数,且指定正则化常数C为2(默认为1)。算法的逻辑虽然有些复杂,但是代码非常简单。
模型得分与预测结果如下图所示: 本次分享就到这里,小啾感谢您的关注与支持!
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 23:38:34- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |