017 OpenCV 向量机SVM

目录

一、环境

二、SVM原理

三、完整代码


一、环境

本文使用环境为:

  • Windows10
  • Python 3.9.17
  • opencv-python 4.8.0.74

二、SVM原理

OpenCV中的向量机(SVM)是一种监督学习算法,用于分类和回归分析。它通过找到一个最优的超平面来将不同类别的数据分开,并使用支持向量来确定这个超平面的位置和方向。

SVM的基本思想是找到一个最优的超平面,使得两个类别之间的间隔最大化。这个间隔被称为“最大间隔”,而支持向量则是位于间隔边缘上的样本点。这些支持向量决定了最优超平面的位置和方向,因此它们也被称为“支持向量机”。

在OpenCV中,SVM可以用于二分类、多分类和回归分析。对于二分类问题,SVM会找到一个最优的超平面,将正类和负类分开。对于多分类问题,SVM会使用“一对一”或“一对多”策略来处理多个类别。对于回归分析问题,SVM会找到一个最优的超平面,将输入数据映射到一个连续的输出值上。

SVM的核心是核函数,它用于将输入数据映射到一个高维空间中。在高维空间中,数据更容易被分离,因为不同类别之间的距离更大。常用的核函数包括线性核、多项式核、径向基函数核(RBF)和sigmoid核等。不同的核函数适用于不同类型的数据,选择合适的核函数可以提高SVM的性能。

线性核是最简单的核函数,它将输入数据直接映射到高维空间中。如果数据的维度很高,那么线性核的效果可能不太好。多项式核可以将输入数据映射到一个更高维的空间中,但是它需要更多的计算资源。径向基函数核(RBF)是一种非常强大的核函数,它可以将输入数据映射到一个无限维的空间中。但是,RBF需要调整一个参数C来控制间隔的大小,这可能会影响模型的性能。sigmoid核可以将输入数据映射到一个概率空间中,它通常用于二分类问题。

总之,OpenCV中的向量机是一种强大的监督学习算法,可以用于分类和回归分析。它的核心是核函数,不同的核函数适用于不同类型的数据。选择合适的核函数可以提高SVM的性能,从而更好地解决实际问题。

三、完整代码

以下代码是在二维坐标系上,随便设置4个点,第一个点类别是:1;剩余三个点类别是:-1。向量机作用就是找到一个2维决策面(线),将上述两类点划分开。

import cv2 as cv
import numpy as np# 设置训练数据(二分类)
labels = np.array([1, -1, -1, -1])
trainingData = np.matrix([[501, 10], [255, 10], [501, 255], [10, 501]], dtype=np.float32)# 训练SVM
# 初始化
svm = cv.ml.SVM_create()
svm.setType(cv.ml.SVM_C_SVC)
svm.setKernel(cv.ml.SVM_LINEAR)
svm.setTermCriteria((cv.TERM_CRITERIA_MAX_ITER, 100, 1e-6))
# 开始训练
svm.train(trainingData, cv.ml.ROW_SAMPLE, labels)
# 用于数据可视化
width = 512
height = 512
image = np.zeros((height, width, 3), dtype=np.uint8)# 显示不同类别区域
green = (0,255,0)
blue = (255,0,0)
for i in range(image.shape[0]):for j in range(image.shape[1]):sampleMat = np.matrix([[j,i]], dtype=np.float32)response = svm.predict(sampleMat)[1]if response == 1:image[i,j] = greenelif response == -1:image[i,j] = blue
# 显示训练数据
thickness = -1
cv.circle(image, (501,  10), 5, (  0,   0,   0), thickness)
cv.circle(image, (255,  10), 5, (255, 255, 255), thickness)
cv.circle(image, (501, 255), 5, (255, 255, 255), thickness)
cv.circle(image, ( 10, 501), 5, (255, 255, 255), thickness)# 显示支撑向量(决策边界)
thickness = 2
sv = svm.getUncompressedSupportVectors()for i in range(sv.shape[0]):cv.circle(image, (int(sv[i,0]), int(sv[i,1])), 6, (128, 128, 128), thickness)
cv.imwrite('result.png', image) # save the image
cv.imshow('SVM Simple Example', image) # show it to the user
cv.waitKey()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/256510.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据库】树形数据组织架构下的封锁并发控制,B树索引并发访问控制,树协议原理及案例分析

数据库并发访问树协议 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会…

【react】动态页面转换成html文件下载,解决样式问题

需求 今天遇到一个需求,挺恶心人的,将一个在线文档页面,可以导出成为html页面查看。 看到网上有使用fs模块,通过react的ReactDOMServer.renderToStaticMarkup将组件转成html字符串,输出文件了。 但是我尝试了&#x…

JM中ref_pic_list_modification bug记录

问题描述 今天在用JM对YUV420p编码时,发现编出的码流用ffplay播放花屏,报如下错误: JM的版本时19.1,没有使能B帧,PicOrderCntType设置为2,其它都是encoder.cfg中的默认配置。我用一些码流分析工具播放H264码流正常,用一些播放器播放也都存在花屏,不过大多数播放器都是…

基于springboot + vue的社区医院信息系统

qq(2829419543)获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:springboot 前端:采用vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件&#xf…

北京市经信局局长姜广智带队调研三六零 强调大模型应与行业结合

12月6日,北京市经济和信息化局局长姜广智、副局长王磊带队走访调研三六零集团,就共促城市级数字安全基础设施项目落地,打造引领行业发展标杆项目,推动大模型落地应用赋能产业、行业发展等话题进行交流。360集团创始人周鸿祎接待来…

电脑系统重装Win10专业版操作教程

用户想给自己的电脑重新安装上Win10专业版系统,但不知道具体的重装步骤。接下来小编将详细介绍Win10系统重新安装的步骤方法,帮助更多的用户完成Win10专业版的重装,重装后用户即可体验到Win10专业版系统带来的丰富功能。 准备工作 1. 一台正常…

RabbitMQ-学习笔记(初识 RabbitMQ)

本篇文章学习于 bilibili黑马 的视频 (狗头保命) 同步通讯 & 异步通讯 (RabbitMQ 的前置知识) 同步通讯:类似打电话,只有对方接受了你发起的请求,双方才能进行通讯, 同一时刻你只能跟一个人打视频电话。异步通讯:类似发信息&#xff0c…

mysql怎么优化查询?

从多个维度优化,这里的优化维度有四个:硬件配置、参数配置、表结构设计和SQL语句及索引。 其中 SQL 语句相关的优化手段是最为重要的。 一、硬件配置 硬件方面的优化可以有 对磁盘进行扩容、将机械硬盘换为SSD,或是把CPU的核数往上提升一些&…

12-07 周四 Pytorch 使用Visdom 进行可视化

简介 在完成了龙良曲的Pytroch视频课程之后,楼主对于pytroch有了进一步的理解,比如,比之前更加深刻的了解了BP神经网络的反向传播算法,梯度、损失、优化器这些名词更加熟悉。这个博客简要介绍一下在使用Pytorch进行数据可视化的一…

java每日一记 —— mybatis的动态数据源切换

动态数据源切换 1.环境初始化2.切换数据源代码3.第二节代码的测试4.用注解的方式进行优化 此代码在jdk11上测试通过,SpringBoot版本为2.7.14 1.环境初始化 1.创建两个库 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- 表结构 DROP TABLE IF EXISTS t_stu; CRE…

展望2024年供应链安全

2023年是开展供应链安全,尤其是开源治理如火如荼的一年,开源治理是供应链安全最重要的一个方面,所以我们从开源治理谈起。我们先回顾一下2023的开源治理情况。我们从信通院《2023年中国企业开源治理全景观察》发布的信息。信通院调研了来自七…

P8 Linux 目录操作

目录 前言 01 mkdir 系统调用 mkdir的代码示例 02 rmdir删除目录 03 打开、读取以及关闭目录 3.1 opendir()函数原型: 04 读取目录 readdir() 05 struct dirent 结构体: 06 rewinddir ()函数重置目录流 07 关闭目录 closedir ()函数 测试:打印…