SVM(支持向量机)基于Python的简单可视化实现

这篇具有很好参考价值的文章主要介绍了SVM(支持向量机)基于Python的简单可视化实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇内容参考了这篇博客且内容不涉及数学证明,只是自己学习SVM时记下的内容,方便回顾

一、概念

什么是SVM?维基百科中对于SVM的定义是这样的:

支持向量机(英语:support vector machine,常简称为SVM,又名支持向量网络)是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽可能宽的明显的间隔分开。然后,将新的实例映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。

看上去很深奥对吧,简单来说,个人认为,SVM其实就是一个二类分类的模型,将两类特征点分类,他的基本模型是的定义在特征空间上的间隔最大的线性分类器,而SVM的学习策略就是间隔最大化。

二、对于SVM的直观理解

1.线性分类模型

我们将两类特征点以散点图的形式画在直角坐标系上,每个点以(x, y)的方式表现,其中x为特征点的特征向量(图中我们默认每个点的特征都是一个,以二维的形式方便理解),而y为分类的标签(我们一般选择-1和1作为分类的标签)
SVM(支持向量机)基于Python的简单可视化实现
假设该坐标上的黑点和白点分别代表了两种特征点,而三根线(H1, H2, H3)是三种分类器,那么那个分类器是最好的呢。
以我们的直观来说,肯定是H3更适合

虽然看上去H2也能够完美地将图中地两种点分开,但是,这些点是我们观测的数据,既然是观测的,那么数据肯定多少会有点误差,也就是说,这些点的真实位置可能还要改变;况且,这仅仅只是我们训练集的数据,但凡测试集的数据和训练集的差别过大,这个分类器就不起作用了。因此我们需要一个容差率大一点的分类器

所以,H3确实是最适合的分类器,但是,为什么呢?为什么H3是最合适的?
SVM的提出者认为,这根线(分类器)分别向两边的两类点移动,一旦碰到一边的向量就停止,另一边也是如此,这些碰到的向量就被称为支持向量(Support Vector),他认为,支持向量到分割线(分类器)的距离最大即是最适合的分类器。然而,这里又有一个问题出现了,只要支持向量到分割线的距离最大就行,那这样的线不是有无数个吗?
SVM(支持向量机)基于Python的简单可视化实现
如上图所示,虚线所触碰到的向量即为支持向量,那么,按照之前的说法,其实只要是在两根虚线包围的区域内,且和虚线平行的线,都可以作为我们目前来说的最佳的分类器。这显然是不合理的,我们必须得要确定分类器的唯一性,因此,他又提出,分类器的位置应该位于中间,即支持向量到分类器的位置是一样的(即如果两根虚线的间距是d,那么支持向量到分类器的位置应该是 d 2 {d \over 2} 2d),而这个间距则被称之为硬间距(Hard Margin),分类器称之为超平面(Hyper Plane)
因此,对于这种模型来说,我们就是通过硬间距最大化来训练学习得到一个分类器,即为硬间距SVM

2.非线性分类器

当然,以上的说法都是基于训练数据都是线性可分的为前提来说的,但是在通常的实际情况下,我们的训练数据大多都是线性不可分的,那么该怎么解决呢?
这时,我们引入核函数(Kernel)的概念,将低维的训练数据向高维空间(甚至是无穷维的空间)中映射,此时的数据再高维空间中就会变得线性可分(这个在数学上是可以证明的)
常用的核函数:

  • Linear(线性内核): K ( x , y ) = x T y {K(x, y) = x^Ty} K(x,y)=xTy
  • Poly(多项式核): K ( x , y ) = ( x T y + 1 ) d {K(x, y) = (x^Ty + 1)^d} K(x,y)=(xTy+1)d
  • Rbf(高斯径向基函数核): K ( x , y ) = e ∣ ∣ x − y ∣ ∣ 2 σ 2 {K(x, y) = e^{||x - y||^2 \over \sigma^2}} K(x,y)=eσ2∣∣xy2
  • Tanh(Tanh核): K ( x , y ) = t a n h ( β x T y + b ) K(x, y) = tanh(\beta x^Ty + b) K(x,y)=tanh(βxTy+b)
    t a n h ( x ) = e x − e − x e x + e − x tanh(x) = {e^x-e^{-x} \over e^x + e^{-x}} tanh(x)=ex+exexex

三、Python代码实现

首先是导包

# 导库
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import make_blobs

然后是创建训练样本并分类,然后呈现出来

# 创建数据点并分类
a, b = make_blobs(n_samples=100, centers=2, random_state=6)

# 以散点图的形式把数据画出来
plt.scatter(a[:, 0], a[:, 1], c=b, s=30, cmap=plt.cm.Paired)

利用sklearn中的内置库创建一个支持向量机模型(核函数我这里选择使用Ploy核)

# 创建一个多项式内核的支持向量机模型
clf = svm.SVC(kernel='poly', C=1000)
clf.fit(a, b)

其余部分

# 建立图像坐标
axis = plt.gca()
xlim = axis.get_xlim()
ylim = axis.get_ylim()

# 生成两个等差数列
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
# print("xx:", xx)
# print("yy:", yy)

X, Y = np.meshgrid(xx, yy)
# print("X:", X)
# print("Y:", Y)
xy = np.vstack([X.ravel(), Y.ravel()]).T
Z = clf.decision_function(xy).reshape(X.shape)

# 画出分界线
axis.contour(X, Y, Z, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--'])
axis.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=100, linewidths=1, facecolors='none')
plt.show()

最终的效果
SVM(支持向量机)基于Python的简单可视化实现文章来源地址https://www.toymoban.com/news/detail-480197.html

到了这里,关于SVM(支持向量机)基于Python的简单可视化实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [数据分析与可视化] 基于Python绘制简单动图

    动画是一种高效的可视化工具,能够提升用户的吸引力和视觉体验,有助于以富有意义的方式呈现数据可视化。本文的主要介绍在Python中两种简单制作动图的方法。其中一种方法是使用matplotlib的Animations模块绘制动图,另一种方法是基于Pillow生成GIF动图。 Matplotlib的Animations模

    2024年02月03日
    浏览(42)
  • 支持向量机(SVM)进行文本分类的Python简单示例实现

    支持向量机(Support Vector Machine,SVM)是一种常用的机器学习算法,主要用于分类和回归问题。它的基本思想是将数据映射到高维空间中,使得数据在该空间中线性可分,然后在该空间中寻找最优的超平面,将不同类别的数据分开。 SVM的优点在于可以处理高维数据,具有较好

    2024年01月25日
    浏览(59)
  • 基于python requests库的bilibili爬虫简单尝试以及数据分析及可视化

    在初步了解了关于爬虫的课程之后,我也进行了一些自己的尝试。本文将从“爬取BiliBili Vtuber区直播信息为切入点,来探讨requests, re等库的基础应用。在爬取信息之后,本文将通过matplotlib以及pandas库做数据分析以及可视化 首先,我们先确认任务:打开Bilibili,在直播分区中选

    2024年02月05日
    浏览(42)
  • 支持向量机svm分类、回归、网格搜索 基于sklearn(python)实现

    由于水平有限 支持向量机(support vector machine)的数学原理和证明就不讲了 想知道可以去看李航的机器学习或者西瓜书 1、读入数据,将数据调成该库能够识别的格式 2、 将数据标准化 ,防止样本中不同特征的数值差别较大,对分类结果产生较大影响 3、利用网格搜索和k折交

    2023年04月11日
    浏览(45)
  • 一个简单的使用支持向量机(SVM)进行回归预测的Python代码示例,包含了源数据和注释

    使用了scikit-learn库中的SVR类来实现支持向量机回归模型。首先,我们导入了所需的库,包括numpy用于处理数据,train_test_split用于划分训练集和测试集,SVR用于构建SVM回归模型,以及mean_squared_error和r2_score用于评估模型性能。 接着,我们定义了源数据,包括特征矩阵X和目标向量

    2024年02月11日
    浏览(54)
  • 机器学习实战:Python基于支持向量机SVM-RFE进行分类预测(三)

    1.1 支持向量机的介绍 支持向量机( Support Vector Machine,SVM )是一种监督学习的分类算法。它的基本思想是找到一个能够最好地将不同类别的数据分开的超平面,同时最大化分类器的边际(margin)。SVM的训练目标是最大化间隔(margin),即支持向量到超平面的距离。 具体地,

    2024年02月05日
    浏览(63)
  • pycharm——python简单的数据可视化

    要使用Python代码进行数据可视化,你可以使用一些可视化库,如matplotlib、seaborn和plotly等。以下是几个示例,展示了如何使用这些库进行常见的数据可视化操作: 绘制折线图:   绘制柱状图: 绘制散点图: 绘制饼图:   这些示例演示了一些基本的图表类型,你可以根据你的

    2024年02月03日
    浏览(35)
  • 数据可视化——用python绘制简单的折线图

    前面我们已经学习了python的基础语法和面向对象,那么接下来我们将学习python编程语言的过人之处——数据的可视化之折线图。 说到数据可视化,我们需要先知道什么是JSON。 json是一种轻量级的数据交互格式,可以按照json指定的格式去组织和封装数据 json本质上是一个带有特

    2024年02月17日
    浏览(42)
  • Python+Django+Mysql开发简单在线课程推荐系统简单教程 基于用户的协同过滤推荐算法 个性化课程推荐系统 爬虫 可视化数据分析 机器学习 人工智能 个性化推荐 相关推荐

    1、开发工具和使用技术 Python3及以上版本,Django3.6及以上版本,mysql8,navicat数据库管理工具或者sqlyog数据库管理工具,html页面,javascript脚本,jquery脚本,echarts.js可视化图表工具,自定义星星评分功能(使用font-awesome星星图标字体)等。 2、实现功能 前台首页地址:http://1

    2024年02月05日
    浏览(110)
  • 大数据可视化——基于Python豆瓣电影数据可视化分析

    本项目旨在通过对豆瓣电影数据进行综合分析与可视化展示,构建一个基于Python的大数据可视化系统。通过数据爬取收集、清洗、分析豆瓣电影数据,我们提供了一个全面的电影信息平台,为用户提供深入了解电影产业趋势、影片评价与演员表现的工具。项目的关键步骤包括

    2024年02月04日
    浏览(83)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包