首页 > 编程语言 >Lnton羚通算法算力云平台【OpenCV-Python】教程:如何理解SVM

Lnton羚通算法算力云平台【OpenCV-Python】教程:如何理解SVM

时间:2023-08-25 10:31:40浏览次数:46  
标签:SVM 维空间 错误 Python 分类 OpenCV 线性 数据 我们

线性可分

下图有两种类型的数据,红色和蓝色。在kNN中,对于一个测试数据,我们用来测量它与所有训练样本的距离,并取距离最小的一个。测量所有的距离需要大量的时间,存储所有的训练样本需要大量的内存。但是考虑到图像中给出的数据,我们需要那么多吗?

Lnton羚通算法算力云平台【OpenCV-Python】教程:如何理解SVM_点积

考虑另一个想法。我们找到一条直线,f ( x ) = a x 1 + b x 2 + c f(x)=ax_1+bx_2+cf(x)=ax 1+bx 2+c,它将两个数据分为两个区域。当我们得到一个新的test_data X XX时,只需将它代入f ( X ) f(X)f(X)。如果f ( X ) > 0 f(X)>0f(X)>0,它属于蓝色组,否则它属于红色组。我们可以称这条线为决策边界。这是非常简单、高效和节省内存的。这种可以用一条直线(或高维的超平面)分为两部分的数据称为线性可分数据。

所以在上图中,你可以看到有可能会有很多这样的线,我们到底选哪一个呢?直观地说,这条线应该离所有点越远越好。为什么?因为输入的数据中可能会有噪声。该数据不应影响分类精度。所以选择一条最远的线可以增强对噪音的免疫力。所以SVM所做的是找到一条与训练样本距离最小的直线(或超平面)。请看下图中穿过中心的粗体线。

Lnton羚通算法算力云平台【OpenCV-Python】教程:如何理解SVM_点积_02

为了找到这个决策边界,你需要训练数据。你都需要吗?不。只需要那些靠近相反类别的数据就足够了。在我们的图像中,它们是一个蓝色圆和两个红色方块。我们可以称它们为支持向量,穿过它们的直线称为支持平面。它们足以找到我们的决策边界。我们不需要担心所有的数据。它有助于减少数据。

结果是,找到了最能代表数据的前两个超平面。例如,蓝色数据用w T x + b 0 > 1 w^Tx+b_0>1w 

T x+b 0>1表示,红色数据用w T x + b 0 < − 1 w^Tx+b_0<−1w T x+b 0 <−1表示,其中w ww为权重向量( w = [ w 1 , w 2 , … , w n ] ) (w=[w_1,w_2,…,w_n])(w=[w 1 ,w 2 ,…,w n ]),x xx为特征向量( x = [ x 1 , x 2 , … , x n ] ) (x=[x_1,x_2,…,x_n])(x=[x 1,x 2,…,x n ])。b 0 b_0b 0是偏置。权重向量决定决策边界的方向,偏置点决定决策边界的位置。现在决策边界被定义在这些超平面的中间,因此表示为w T x + b 0 = 0 w^Tx+b_0=0w Tx+b 0 =0。支持向量到决策边界的最小距离为,d i s t a n c e s u p p o r t v e c t o r s = 1 ∣ ∣ w ∣ ∣ distance_{supportvectors}= \frac{1}{||w||}distance supportvectors = ∣∣w∣∣1。边距是这个距离的两倍。我们需要最大化这个边距(类别的边距,Margin)。即,我们需要最小化一个新函数L ( w , b 0 ) L(w,b_0)L(w,b 0),具有一些约束条件,可以表示为:

Lnton羚通算法算力云平台【OpenCV-Python】教程:如何理解SVM_点积_03


线性不可分

假设有一些数据不能用一条直线将他们分成两部分。假如:-3,3 属于类别X, -1,1属于类别O,很明显,他们不能线性可分,但是也有一些方法可以解决这些问题,我们可以通过方程 f ( x ) = x 2 f(x)=x^2f(x)=x 2将数据映射,这样,9 分为X和 1 分为 O,就变成可分的了。我们可以将一维数据转换为二维数据。我们可以用f ( x ) = ( x , x 2 ) f(x)=(x,x^2)f(x)=(x,x 2)函数来映射这个数据。然后X变成(-3,9)和(3,9),而O变成(-1,1)和(1,1)。这也是线性可分的。简而言之,低维空间中的非线性可分数据在高维空间中变为线性可分的可能性更大。

一般来说,可以将d维空间中的点映射到某个D维空间(D>d)来检验线性可分性的可能性。有一种思想可以通过在低维输入(特征)空间中进行计算来帮助计算高维(核)空间中的点积。我们可以用下面的例子来说明。

假设在二维空间里有两个点 p = ( p 1 , p 2 ) p=(p_1,p_2)p=(p 1,p 2) 和 q = ( q 1 , q 2 ) q=(q_1,q_2)q=(q 1,q 2),设 ϕ \phiϕ 为 映射函数,将二维数据映射到三维空间里,则有:

Lnton羚通算法算力云平台【OpenCV-Python】教程:如何理解SVM_二维_04

这意味着,三维空间中的点积可以用二维空间中的平方点积来实现。这可以应用到高维空间。所以我们可以用低维来计算高维特征。一旦我们把它们映射出来,我们就得到了一个高维空间。

除了这些概念之外,还有错误分类的问题。因此,仅仅找到具有最大Margin的决策边界是不够的。我们还需要考虑分类错误的问题。有时,可能会找到一个边际较小,但错误分类较少的决策边界。无论如何,我们需要修改我们的模型,使其能够找到最大边际的决策边界,但错误分类较少。最小化准则修改为:

Lnton羚通算法算力云平台【OpenCV-Python】教程:如何理解SVM_二维_05

下图显示了这个概念。为每个训练数据样本定义一个新的参数 ξ i ξ_iξ i 。它是对应的训练样本到正确决策区域的距离。对于那些没有被错误分类的,它们落在相应的支撑平面上,所以它们的距离为零。

Lnton羚通算法算力云平台【OpenCV-Python】教程:如何理解SVM_二维_06

所以新的优化问题是:

Lnton羚通算法算力云平台【OpenCV-Python】教程:如何理解SVM_点积_07

参数C应该如何选择?很明显,这个问题的答案取决于训练数据的分布方式。虽然没有普遍的答案,但考虑以下规则是有用的:

较大的C值给出的解错误分类错误较小,但边际较小。考虑到在这种情况下,错误分类的代价是昂贵的。由于优化的目的是使参数最小,因此不允许出现很少的误分类错误。C值越小,解的余量越大,分类误差越大。在这种情况下,最小化没有考虑那么多的和项,所以它更专注于找到一个有大Margin的超平面。

Lnton 羚通是专注于音视频算法、算力、云平台的高科技人工智能企业。 公司基于视频分析技术、视频智能传输技术、远程监测技术以及智能语音融合技术等, 拥有多款可支持 ONVIF、RTSP、GB/T28181 等多协议、多路数的音视频智能分析服务器 / 云平台。

Lnton羚通算法算力云平台【OpenCV-Python】教程:如何理解SVM_数据_08


标签:SVM,维空间,错误,Python,分类,OpenCV,线性,数据,我们
From: https://blog.51cto.com/LNTON/7227248

相关文章

  • 如何用Python爬虫持续监控商品价格
    在购物中,了解商品价格的变动对于节省成本和抓住优惠机会非常重要。本文将介绍如何使用Python爬虫建立一个某电商商品价格监控系统,帮助你持续跟踪商品价格的变动,并提供完善的方案和代码,让你能够轻松操作。某电商商品价格监控系统的基本思路是使用Python爬虫定期抓取某电商网站上的商......
  • ubuntu18安装python-pcl
    1.sudovi/etc/apt/sources.list添加ubuntu16软件源列表:debhttp://archive.ubuntu.com/ubuntu/xenialmainrestricteduniversemultiversedebhttp://archive.ubuntu.com/ubuntu/xenial-updatesmainrestricteduniversemultiversedebhttp://archive.ubuntu.com/u......
  • Python识别海外版抖音Tiktok、巨量引擎滑块验证码识别
    闲的无聊搞了一个相对简单的验证码,就是抖音Tiktok的滑块验证码,这也是接到客户的一个需求。这种验证码通常在电脑端登录抖音、巨量引擎的的时候出现。首先看一下最终的效果: 验证码识别过程1、利用爬虫采集图像由于是识别滑块缺口位置,分析了一下,大图已经包含了滑......
  • Python教程:方法重载
    方法重载在Python中起着关键作用。方法有时接受零参数,有时接受一个或多个参数。当我们以不同的方式调用同一个方法时,这就被称为方法重载。Python不像其他语言那样默认支持重载方法。在Python中,两个或多个方法不能有相同的名字,因为方法重载允许我们使同一个操作符具有不同的含义......
  • Python 中如何向列表或数组添加元素
    1.Python中的列表是什么?给初学者的定义编程中的数组是一个有序的项目集合,所有的项目都需要是相同的数据类型。然而,与其它编程语言不同,数组在Python中不是一个内置的数据结构。Python使用列表取代传统的数组。列表本质上是动态数组,是Python中最常见的和最强大的数据结构之......
  • python调用SAP脚本下载库存报表MB52
    importmathimportos,sys,win32com.clientimportclipboardfrompprintimportpprintimportcsvdefget_mb52(session,args={},plant='0001'):result=download_from_sap(session,args=args,plant=plant)ifnotresult:#n......
  • Python教程:Gzip解压缩
    我们将介绍Python中的gzip解压。我们还将介绍如何使用gzip解压来解压压缩的内容。Python中的Gzip解压在Python中为压缩和解压目的建立了许多库,但我们将介绍Gzip库。它是一个流行的数据压缩工具。我们可以使用gzip,通过对数据进行特殊格式的编码来减少文件的大小,这种格式不......
  • Python SAP 脚本定时自动下载资产清单 S_ALR_87011990
    业务场景使用了外部工作流系统管理固定资产申请,转移(负责人变更),盘点,报废等涉及固定资产的业务,而固定资产采购,折旧等仍在SAP中进行,所以需要定时从SAP中下载包括固定资产账面值的固定资产清单,以作为工作流审批节点流转的依据主要功能说明定时运行自动登录SAP下载SAP固定资......
  • Python虚拟环境
    以前在打比赛和做项目的时候都一直都没有注重管理python包,以至于把所有的包都堆到Anaconda下,以前出现包问题的时候能百度解决的解决,结局不了就卸了重装,感觉没什么。最近开始做一些项目,在自己的电脑上做好,去别的地方打包运行,结果要配两次环境非常的麻烦,所以开始认真对待起不同项目......
  • Python 项目以及常见的目录结构
    当今世界,Python可以说是最受欢迎的编程语言之一。作为一种高级动态语言,Python具有简单易学、代码可读性强和生态系统丰富等特点,广泛应用于Web开发、数据科学、机器学习、网络爬虫等领域。在Python项目中,良好的目录结构设计是一个成功项目的关键因素之一。Python项......