iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python中opencv支持向量机的实现
  • 694
分享到

python中opencv支持向量机的实现

2024-04-02 19:04:59 694人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录支持向量机理论基础SVM使用介绍例子介绍完整程序支持向量机 支持向量机(Support Vector Machine, SVM)是一种二分类模型,目标是寻找一个标准(称为超平面)

支持向量机

支持向量机(Support Vector Machine, SVM)是一种二分类模型,目标是寻找一个标准(称为超平面)对样本数据进行分割,分割的原则是确保分类最优化(类别之间的间隔最大)。

当数据集较小时,使用支持向量机进行分类非常有效。

支持向量机是最好的现成分类器之一,“现成”是指分类器不加修改即可直接使用。

在对原始数据分类的过程中,可能无法使用线性方法实现分割。支持向量机在分类时,把无法线性分割的数据映射到高维空间,然后在高维空间找到分类最优的线性分类器。

python支持向量机的库: sk-learn , LIBSVM等

OpenCV也提供了对支持向量机的支持

理论基础

用于划分不同类别的直线,就是分类器。

构造分类器时,非常重要的一项工作就是找到最优分类器。

找到支持向量机:在已有数据中,找到离分类器最近的点,确保它们离分类器尽可能地远。

离分类器最近的点到分类器的距离称为间隔(margin)。希望间隔尽可能地大,这样分类器在处理数据时,就会更准确。

离分类器最近的那些点叫作支持向量(support vector)。 决定了分类器所在的位置。

将不可分变为可分

支持向量机会将不那么容易分类的数据通过函数映射变为可分类的。

支持向量机在处理数据时,如果在低维空间内无法完成分类,就会自动将数据映射到高维空间,使其变为(线性)可分的。简单地讲,就是对当前数据进行函数映射操作。

例如: 在分类时,通过函数f的映射,让左图中本来不能用线性分类器分类的数据变为右图中线性可分的数据。

同时: 支持向量机能够通过核函数有效地降低计算复杂度。

实际上支持向量机可以处理任何维度的数据。在不同的维度下,支持向量机都会尽可能寻找类似于二维空间中的直线的线性分类器。

例如,在二维空间,支持向量机会寻找一条能够划分当前数据的直线;在三维空间,支持向量机会寻找一个能够划分当前数据的平面(plane);在更高维的空间,支持向量机会尝试寻找一个能够划分当前数据的超平面(hyperplane)。

一般情况下,把能够可以被一条直线(更一般的情况,即一个超平面)分割的数据称为线性可分的数据,所以超平面是线性分类器。

“支持向量机”是由“支持向量”和“机器”构成的。

  • “支持向量”是离分类器最近的那些点,这些点位于最大“间隔”上。通常情况下,分类仅依靠这些点完成,而与其他点无关。
  • “机器”指的是分类器。

支持向量机是一种基于关键点的分类算法

SVM使用介绍

在使用支持向量机模块时,需要先使用函数cv2.ml.SVM_create()生成用于后续训练的空分类器模型。

语法格式:

svm = cv2.ml.SVM_create()

获取了空分类器svm后,针对该模型使用svm.train()函数对训练数据进行训练

语法格式

训练结果= svm.train(训练数据,训练数据排列格式,训练数据的标签) 
  • 训练数据:表示原始数据,用来训练分类器。
  • 训练数据排列格式:原始数据的排列形式有按行排列(cv2.ml.ROW_SAMPLE,每一条训练数据占一行)和按列排列(cv2.ml.COL_SAMPLE,每一条训练数据占一列)两种形式
  • 训练数据的标签:原始数据的标签。
  • 训练结果:训练结果的返回值。

例如: 用于训练的数据为data,其对应的标签为label,每一条数据按行排列,对分类器模型svm进行训练,所使用的语句为:

返回值 = svm.train(data, cv2.ml.ROW_SAMPLE, label) 

完成对分类器的训练后,使用svm.predict()函数即可使用训练好的分类器模型对测试数据进行分类,其语法格式为:

(返回值,返回结果) = svm.predict(测试数据) 

OpenCV支持对多个参数的自定义,例如:可以通过setType()函数设置类别,通过seTKErnel()函数设置核类型,通过setC()函数设置支持向量机的参数C ( 惩罚系数,即对误差的宽容度,默认值为0 )。

例子介绍

题目: 已知员工的笔试成绩、面试成绩及对应的等级表现,根据新入职员工的笔试成绩、面试成绩预测其可能的表现。

首先构造一组随机数,并将其划分为两类,然后使用OpenCV自带的支持向量机模块完成训练和分类工作,最后将运算结果显示出来。

具体步骤:

  • 生成模拟数据

    模拟生成入职一年后表现为A级的员工入职时的笔试和面试成绩。

    构造20组笔试和面试成绩都分布在[95, 100)区间的数据对:

    a = np.random.randint(95,100, (20, 2)).astype(np.float32) 

    上述模拟成绩,在一年后对应的工作表现为A级。

    模拟生成入职一年后表现为B级的员工入职时的笔试和面试成绩。

    构造20组笔试和面试成绩都分布在[90, 95)区间的数据对:

    b = np.random.randint(90,95, (20, 2)).astype(np.float32) 

    上述模拟成绩,在一年后对应的工作表现为B级。

    最后,将两组数据合并,并使用numpy.array对其进行类型转换:

    data = np.vstack((a, b)) 
    data = np.array(data, dtype='float32')     
  • 构造分组标签

    为对应表现为A级的分布在[95, 100)区间的数据,构造标签“0”:

    aLabel=np.zeros((20,1)) 

    为对应表现为B级的分布在[90, 95)区间的数据,构造标签“1”:

    bLabel=np.ones((20,1)) 

    将上述标签合并,并使用numpy.array对其进行类型转换:

    label = np.vstack((aLabel, bLabel)) 
    label = np.array(label, dtype='int32') 
  • 训练

    用支持向量机模块对已知的数据和其对应的标签进行训练:

    svm = cv2.ml.SVM_create() 
    result = svm.train(data, cv2.ml.ROW_SAMPLE, label) 
  • 分类

    生成两个随机的数据对(笔试成绩,面试成绩)用于测试。

    test = np.vstack([[98,90], [90,99]]) 
    test = np.array(test, dtype='float32') 

    使用函数svm.predict()对随机成绩分类:

    (p1, p2) = svm.predict(test) 
  • 显示分类结果

    将基础数据(训练数据)、用于测试的数据(测试数据)在图像上显示出来:

    plt.scatter(a[:,0], a[:,1], 80, 'g', 'o') 
    plt.scatter(b[:,0], b[:,1], 80, 'b', 's') 
    plt.scatter(test[:,0], test[:,1], 80, 'r', '*') 
    plt.show() 

    将测试数据及预测分类结果显示出来:

    print(test) 
    print(p2)

完整程序

import cv2 
import numpy as np 
import matplotlib.pyplot as plt 
# 准备数据 
a = np.random.randint(95,100, (20, 2)).astype(np.float32) 
b = np.random.randint(90,95, (20, 2)).astype(np.float32) 
data = np.vstack((a, b)) 
data = np.array(data, dtype='float32') 
    
# 建立分组标签,0代表A级,1代表B级 
aLabel=np.zeros((20,1)) 
bLabel=np.ones((20,1)) 
label = np.vstack((aLabel, bLabel)) 
label = np.array(label, dtype='int32') 
    
# 训练 
svm = cv2.ml.SVM_create() 
# 属性设置,直接采用默认值即可 
#svm.setType(cv2.ml.SVM_C_SVC)    # svm type 
#svm.setKernel(cv2.ml.SVM_LINEAR) # line 
#svm.setC(0.01) 
result = svm.train(data, cv2.ml.ROW_SAMPLE, label) 
    
#预测 
test = np.vstack([[98,90], [90,99]]) 
test = np.array(test, dtype='float32') 
(p1, p2) = svm.predict(test)   # test 是 [[数据1],[数据2]] 结构的
   
# 结果 
print(test)
print("res1",p2[0])
print("res2",p2[1]) 
plt.scatter(a[:,0], a[:,1], 80, 'g', 'o') 
plt.scatter(b[:,0], b[:,1], 80, 'b', 's') 
plt.scatter(test[:,0], test[:,1], 80, 'r', '*') 
plt.show() 

到此这篇关于Python中opencv支持向量机的实现的文章就介绍到这了,更多相关opencv 向量机内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python中opencv支持向量机的实现

本文链接: https://www.lsjlt.com/news/142087.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python中opencv支持向量机的实现
    目录支持向量机理论基础SVM使用介绍例子介绍完整程序支持向量机 支持向量机(Support Vector Machine, SVM)是一种二分类模型,目标是寻找一个标准(称为超平面)...
    99+
    2024-04-02
  • Python实现SVM支持向量机的示例代码
    目录什么是支持向量机用 Python 实现 SVM多项式和高斯核函数的 SVM下面是使用 scikit-learn 库中的 SVM 模型的示例代码: from s...
    99+
    2023-02-06
    Python实现SVM支持向量机 Python SVM支持向量机 Python SVM
  • R语言如何实现支持向量机SVM
    这篇文章给大家分享的是有关R语言如何实现支持向量机SVM的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。IRIS数据集简介IRIS数据集中的数据源于1936年费希尔法发表的一篇论文。彼时他收集了三种鸢尾花(分别标记...
    99+
    2023-06-20
  • 机器学习——支持向量机
    SVM就是试图把棍放在一堆球中的最佳位置,好让在棍的两边有尽可能大的间隙。这个间隙就是球到棍的距离。 支持向量机:找到分类界面,使支持向量间的间隔最大,支持向量到分割界面的距离最小 支持向量是通过到分割界面距离最小的点的向量,且两向...
    99+
    2023-01-30
    向量 机器
  • Python实现支持向量机(SVM)分类:算法原理详解
    在机器学习中,支持向量机(SVM)常被用于数据分类和回归分析,是由分离超平面的判别算法模型。换句话说,给定标记的训练数据,该算法输出一个对新示例进行分类的最佳超平面。 支持向量机(SVM)算法模型是将示例表示为空间中的点,经过映...
    99+
    2024-01-24
    机器学习 算法的概念
  • Python中如何实现支持向量机数据分类和回归预测
    这篇文章主要为大家展示了“Python中如何实现支持向量机数据分类和回归预测”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python中如何实现支持向量机数据分类和回归预测”这篇文章吧。支持向量...
    99+
    2023-06-26
  • R语言实现支持向量机SVM应用案例
    IRIS数据集简介 IRIS数据集中的数据源于1936年费希尔法发表的一篇论文。彼时他收集了三种鸢尾花(分别标记为setosa、versicolor和virginical)的花萼和花...
    99+
    2024-04-02
  • 支持向量机之SVR 用法与参数详解 python
    概念: 针对二分类问题,寻求最优超平面 SVM: 使到超平面最近的样本点的“距离”最大 SVR: 使到超平面最远的样本点的“距离”最小。 SVR回归的优势:容忍偏离 传统的回归方法当且仅当回归f(x)完全等于y时才认为是预测正确,需计...
    99+
    2023-08-31
    python
  • Python机器学习应用之支持向量机的分类预测篇
    目录1、Question2、Answer!——SVM3、软间隔4、超平面支持向量机常用于数据分类,也可以用于数据的回归预测 1、Question 我们经常会遇...
    99+
    2024-04-02
  • 吴恩达机器学习练习:SVM支持向量机
    1 Support Vector Machines 1.1 Example Dataset 1 %matplotlib inline import numpy as np imp...
    99+
    2024-04-02
  • JavaScript面向对象的支持怎么实现
    本篇内容介绍了“JavaScript面向对象的支持怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在JavaScript中,我们需要通...
    99+
    2023-06-03
  • 机器学习之支持向量回归(SVR)预测房价—基于python
          大家好,我是带我去滑雪!       本期使用爬取到的有关房价数据集data.csv,使用支持向量回归(SVR)方法预测房价。该数据集中“y1”为响应变量,为房屋总价,而x1-x9为特征变量,依次表示房屋的卧室数量、客厅数量、面...
    99+
    2023-09-15
    python 机器学习 支持向量机
  • SVM(支持向量机)进行分类的原理和python代码----通俗易懂
    文章目录 一、SVM是什么?二、使用步骤三、SVM分类算法的Python代码示例总结 一、SVM是什么? SVM(支持向量机,Support Vector Machine)是一种非常流...
    99+
    2023-09-27
    支持向量机 python 分类
  • python-sklearn数据分析-线性回归和支持向量机(SVM)回归预测(实战)
    注:本文是小编学习实战心得分享,欢迎交流讨论!话不多说,直接附上代码和图示说明。 目录 一、分段示例 1.导入必要的库 2.读取数据,查看数据基本信息 3.简单查看有无重复值 4.对列名进行分类,便于后面的操作,其中最后一列为预测标签数据 ...
    99+
    2023-09-07
    sklearn python 回归
  • python如何实现gzip/deflate支持
    这篇文章主要介绍python如何实现gzip/deflate支持,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!gzip/deflate支持现在的网页普遍支持gzip压缩,这往往可以解决大量传输时间,以VeryCD的主...
    99+
    2023-06-17
  • SpringBoot中支持Https协议的实现
    目录一、https 简介二、获取 https 证书三、在 SpringBoot 中引入 https四、请求转发一、https 简介 超文本传输安全协议(HyperText Trans...
    99+
    2023-01-28
    SpringBoot支持Https协议 SpringBoot Https协议
  • 怎么在Nginx中实现反向代理并支持长连接
    怎么在Nginx中实现反向代理并支持长连接?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前言Nginx upstream与后端的连接默认为短连接,通过HTTP/...
    99+
    2023-06-08
  • 支持向量机SVM代码详解——多分类/降维可视化/参数优化【python】
    篇1:SVM原理及多分类python代码实例讲解(鸢尾花数据) SVM原理 支持向量机(Support Vector Machine,SVM),主要用于小样本下的二分类、多分类以及回归分析,是一种有监督学习的算法。基本思想是寻找一个超平面来...
    99+
    2023-09-09
    python 机器学习 数学建模 支持向量机
  • Python+OpenCV如何实现角度测量
    这篇文章主要为大家展示了“Python+OpenCV如何实现角度测量”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python+OpenCV如何实现角度测量”这篇文章吧。最终实现效果:在图片上用...
    99+
    2023-06-29
  • Python+OpenCV实现角度测量的示例代码
    本文介绍如何使用python语言实现角度测量,程序包括鼠标选点、直线斜率计算、角度计算三个子程序和一个主程序。最终实现效果:在图片上用鼠标确认三点,程序将会显示由此三点确定的角度,如...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作