支持向量机

  • 支持向量机
  • 线性可分支持向量机
  • 最大间隔法
  • 代码实现
  • 案例地址

支持向量机

支持向量机(support vector machines,SVM)是一种二分类模型,它的基本类型是定义在特征空间上的间隔最大的线性分类器。支持向量机可以通过核技巧,转换成非线性分类器。

支持向量机方法包括: 线性可分支持向量机、线性支持向量机以及非线性支持向量机。

  1. 当数据线性可分时,通过硬间隔最大化学习一个线性分类器,即线性可分支持向量机,或硬间隔支持向量机;
  2. 当训练数据近似线性可分时,可通过软间隔最大化学习一个线性分类器,即线性支持向量机,或软间隔支持向量机;
  3. 当训练数据线性不可分时,通过使用核技巧和软间隔最大化,学习非线性支持向量机。

线性可分支持向量机

定义:
给定线性可分训练数据集,通过间隔最大化或等价地求解相应的凸二次规划问题学习得到的分离超平面为:
w∗⋅x+b∗=0w^{*} \cdot x+b^{*}=0w∗⋅x+b∗=0
以及相应的分类决策函数:
f(x)=sign(w∗⁡⋅x+b∗)f(x)=\operatorname{sign(w^{*}} \cdot x+b^{*})f(x)=sign(w∗⋅x+b∗)
即称为线性可分支持向量机.

最大间隔法

输入:线性可分训练数据集T={(x1,y1),(x2,y2),...,(xN,yN)}T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}T={(x1​,y1​),(x2​,y2​),...,(xN​,yN​)},其中X=Rn,yi∈Y={−1,+1},i=1,2,...,N\mathcal{X}=\mathcal{R}^{n},y_i \in \mathcal{Y}=\{-1,+1\},i=1,2,...,NX=Rn,yi​∈Y={−1,+1},i=1,2,...,N;

输出:最大间隔分离超平面和分类决策函数.

(1)构造并求解约束最优化问题:
min⁡w,b12∥w∥2{\min_{w,b} \frac{1}{2}\|w\|^{2}}w,bmin​21​∥w∥2
s.tyi(w⋅xi+b)−1⩾0,i=1,2,...,N{s.t \quad y_i(w \cdot x_i+b)-1 \geqslant 0,\quad i=1,2,...,N}s.tyi​(w⋅xi​+b)−1⩾0,i=1,2,...,N
求得最优解w∗,b∗w^{*},b^{*}w∗,b∗.得到线性可分支持向量机。

(2)由此得到分离超平面:
w∗⋅x+b∗=0w^{*} \cdot x+b^{*}=0w∗⋅x+b∗=0

分类决策函数为:
f(x)=sign⁡(w∗⋅x+b∗)f(x)=\operatorname{sign}(w^{*} \cdot x+b^{*})f(x)=sign(w∗⋅x+b∗)

代码实现

案例代码已上传:Github地址

from sklearn import svm
import numpy as np
import matplotlib.pyplot as plt# 构建正态分布来产生数字,20行2列*2
train_x = np.r_[np.random.randn(20, 2) - [2, 2], np.random.randn(20, 2) + [2, 2]]  # 构建 20个class0,20个class1
label_y = [0] * 20 + [1] * 20 # svm设置:
clf = svm.SVC(kernel='linear')
clf.fit(train_x, label_y)# 获取weights
weights = clf.coef_[0]rate = -weights[0] / weights[1]  # 斜率
# 画图划线
xx = np.linspace(-5, 5)  # (-5,5)之间x的值
yy = rate * xx - (clf.intercept_[0]) /weights[1]  # xx带入y,截距# 画出与点相切的线
b = clf.support_vectors_[0]
#yy_down 是线 yy的下边的边界线
yy_down = rate * xx + (b[1] - rate* b[0])
b = clf.support_vectors_[-1]
#yy_up 是线 yy的上边的边界线
yy_up =rate * xx + (b[1] - rate * b[0])# 测试
for i in range(20):test_x = np.random.randn(1, 2) * 10print('测试:点({},{}) 所属类别{}'.format(test_x[0][0],test_x[0][1], clf.predict(test_x)))plt.figure(figsize=(8, 4))
plt.plot(xx, yy)
#绘制左上角的线
plt.plot(xx, yy_up)
#绘制 左下角的线
plt.plot(xx, yy_down)
plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=80)
plt.scatter(train_x[:, 0], train_x[:, 1], c=label_y, cmap=plt.cm.Paired)  # [:,0]列切片,第0列
plt.axis('tight')
plt.show()


案例地址

案例代码已上传:Github地址

参考资料:
[1] 《统计学习方法》
[2]: SVM 线性可分 硬间隔最大化

Github地址https://github.com/Vambooo/lihang-dl

更多技术干货在公众号:深度学习学研社

统计学习方法笔记(五)-线性可分支持向量机原理及python实现相关推荐

  1. 统计学习方法笔记(三)-朴素贝叶斯原理及python实现

    朴素贝叶斯 条件概率 特征条件独立假设 朴素贝叶分类器 朴素贝叶斯分类算法原理 学习与分类算法 朴素贝叶斯算法原理 模型 多项式模型 高斯模型 伯努利模型 多项式模型的朴素贝叶斯分类器实现代码 高斯模 ...

  2. 统计学习方法笔记(一)-k近邻算法原理及python实现

    k近邻法 k近邻算法 算法原理 距离度量 距离度量python实现 k近邻算法实现 案例地址 k近邻算法 kkk近邻法(kkk-NN)是一种基本分类和回归方法. 算法原理 输入:训练集 T={(x1, ...

  3. 统计学习方法笔记(七)-线性支持向量机原理及python实现

    线性支持向量机 线性支持向量机 定义 线性支持向量机 线性支持向量机学习算法 代码案例 TensorFlow 案例地址 线性支持向量机 实际场景中训练数据往往不是线性可分的,当训练数据近似线性可分时, ...

  4. 【统计学习方法】线性可分支持向量机对鸢尾花(iris)数据集进行二分类

    本文摘要 · 理论来源:[统计学习方法]第七章 SVM · 技术支持:pandas(读csv).numpy.sklearn.svm.svm思想.matplotlib.pyplot(绘图) · 代码目的 ...

  5. 复现经典:《统计学习方法》第 7 章 支持向量机

    本文是李航老师的<统计学习方法>[1]一书的代码复现. 作者:黄海广[2] 备注:代码都可以在github[3]中下载. 我将陆续将代码发布在公众号"机器学习初学者", ...

  6. 【机器学习基础】数学推导+纯Python实现机器学习算法8-9:线性可分支持向量机和线性支持向量机...

    Python机器学习算法实现 Author:louwill 前面两讲我们对感知机和神经网络进行了介绍.感知机作为一种线性分类模型,很难处理非线性问题.为了处理非线性的情况,在感知机模型的基础上有了两个 ...

  7. 线性支持向量机、线性可分支持向量机、非线性支持向量机是怎么区分的?

    SVM(Support Vector Machine)是一种二类分类模型. 它的基本模型是定义在特征空间上的间隔最大的线性分类器. 支持向量就是最大间隔或者分割超平面上的那几个临界点,具体入下图所示: ...

  8. 机器学习(7)——支持向量机(二):线性可分支持向量机到非线性支持向量机

    线性可分支持向量机 回顾 前面总结了线性可分支持向量机,知道了支持向量机的最终目的就是通过"间隔最大化" 得到最优分类器,能够使最难区分的样本点得到最大的分类确信度,而这些难区分的 ...

  9. SVM详解(一)线性可分支持向量机与硬间隔最大化

    文章目录 1. 引言 2. 函数间隔与几何间隔 3. 间隔最大化 4. 最大间隔分离超平面的存在唯一性 5. 支持向量和间隔边界 6. 学习的对偶算法 1. 引言 我们在介绍感知机的时候知道,对于线性 ...

最新文章

  1. 干货丨一文带你玩转机器学习和深度学习
  2. python语言入门p-python初学者怎么入门
  3. diesel fuel
  4. 移动端下弹框禁止背景滑动
  5. mysql 集群 主从复制
  6. mysql百万级性能瓶颈-数据库选型
  7. python识别银行卡数字_基于opencv -python--银行卡识别
  8. JAVA 串口编程(二)
  9. 如何实现软件的远程更新_手机免root终于也能实现远程控制了 这款国产软件真是越来越好用...
  10. UCall能真正的免费打电话,爽
  11. ISA Server 2004软件防火墙相关配置
  12. mysql 查询简单记忆_mysql 函数大全-简单的总结,便于记忆
  13. DFS分布式文件存储系统
  14. 普通地图的六大要素_地图的构成要素和基本特性
  15. 开水,送服JavaScript
  16. 微软企业文化中的“工作激情”
  17. python 词云学习
  18. 如何获得你的准确位置及iphon手机应用定位不准确原因分析
  19. Dick and Jane
  20. 未来已来?走进元宇宙入口 - 虚拟数字人

热门文章

  1. IDEA——找不到或无法加载主类的一种暴力解决方法
  2. 在Android Studio中打开Android Device Monitor时报错的解决方法
  3. CocoaPods更新过程中出现的坑及解决方法
  4. 关于System.InvalidOperationException异常
  5. 如果我的接口必须返回Task,那么实现无操作的最佳方法是什么?
  6. 列表是否包含简短的包含功能?
  7. 有没有办法折叠Eclipse中的所有代码块?
  8. esxi所连交换机划vlan导致vm不能通讯
  9. 50年前就已讨论的数据中心隐私问题
  10. unit2--unit4单元文档