机器学习篇-SVM(python+opencv)

这篇具有很好参考价值的文章主要介绍了机器学习篇-SVM(python+opencv)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

本文主要以使用svm做图像分类为主要任务进行讲解,如何从图像数据准备到模型构建到训练,模型保存,预测的流程。同样也会涉及svm中不同核函数对应的参数设置方法。

使用SVM完成图像分类、数据分类等分类任务
优点:
1.模型小,推理速度快
2.所需数据集少,训练速度快
3.简单易上手
其中影响SVM模型效果的关键性因素在于核函数以及不同核函数对应的参数。


一、SVM

SVM(Support Vector Machine)是一种常用的分类算法,主要用于二分类问题。其核心思想是在高维特征空间中寻找一个最优的超平面,使得能够将不同类别的样本分开,同时最大化分类间隔,从而提高分类准确率。SVM还可以通过引入核函数来处理非线性问题,在将数据映射到高维空间后,采用SVM算法进行分类。SVM由于其简单、有效的分类思想和丰富的理论支持,在机器学习领域得到了广泛的应用。

1.1 SVM 使用类型

SVM主要有C_SVC/ EPS_SVR/ NU_SVR/ONE_CLASS这几种类型

C_SVC : C类支撑向量分类机。 n类分组 (n≥2),容许用异常值处罚因子C进行不完全分类。
NU_SVC :v类支撑向量分类机。n类似然不完全分类的分类器。参数为庖代C(其值在区间【0,1】中,nu越大,决定计划鸿沟越腻滑)。
ONE_CLASS : 单分类器,所有的练习数据提取自同一个类里,然后SVM建树了一个分界线以分别该类在特点空间中所占区域和其它类在特点空间中所占区域。
EPS_SVR : 类支撑向量回归机。练习集中的特点向量和拟合出来的超平面的间隔须要小于p。异常值处罚因子C被采取。
NU_SVR : v类支撑向量回归机。 v庖代了 p。

1.2 核函数

SVM中常用的核函数包括线性核(LINEAR )、多项式核、高斯核(RBF)和 sigmoid 核。

(1) 线性核(LINEAR )

K ( x , x 1 ) = ( x ∗ x 1 ) K(x,x{\tiny 1})=(x*x{\tiny 1}) K(x,x1)=(xx1)

(2) 多项式核

K ( x , x 1 ) = [ v ( x ∗ x 1 ) + 1 ] q K(x,x{\tiny 1})=[v(x*x{\tiny 1})+1]^{q} K(x,x1)=[v(xx1)+1]q

(3) RBF 高斯核函数

K ( x , x 1 ) = e − γ ∣ ∣ x i − x j ∣ ∣ 2 , γ > 0 K(x,x{\tiny 1})=e^{-\gamma ||x{\tiny i}-x{\tiny j}||^{2}} ,\gamma >0 K(x,x1)=eγ∣∣xixj2,γ>0

(4) SIGMOID核函数

K ( x , x 1 ) = t a n ( h ( v ( x ∗ x 1 ) + c o e f 0 ) ) K(x,x{\tiny 1})=tan(h(v(x*x{\tiny 1})+coef0)) K(x,x1)=tan(h(v(xx1)+coef0))
在实际应用中,需要根据具体问题选择合适的核函数,并对参数进行调整以达到最优的分类效果,接下来就是参数部分。

(5) POLY核函数

K ( x , x 1 ) = ( γ x i T x j + c o e f 0 ) d e g r e e , γ > 0 K(x,x{\tiny 1})=(\gamma x {\tiny i}^{\tiny T}x{\tiny j}+coef0)^{degree},\gamma >0 K(x,x1)=γxiTxj+coef0degree,γ>0
在实际应用中,需要根据具体问题选择合适的核函数,并对参数进行调整以达到最优的分类效果,接下来就是参数部分。

1.3 参数

在选定核函数后,可以对模型相关的参数进行设定。

1.3.1 与核函数相关的参数如下

degree:内核函数(POLY)的参数degree。

gamma(γ):内核函数(POLY/ RBF/ SIGMOID)的参数。

coef0:内核函数(POLY/ SIGMOID)的参数coef0。
以上参数与核函数表达式中相对应,也就是在选定核函数后,可以选择设置对应的参数。

1.3.2 与SVM类型选择相关的参数设置

Cvalue:SVM类型(C_SVC/ EPS_SVR/ NU_SVR)的参数C

nu:SVM类型(NU_SVC/ ONE_CLASS/ NU_SVR)的参数 。

p:SVM类型(EPS_SVR)的参数。

1.3.3 训练参数相关

class_weights:C_SVC中的可选权重,赋给指定的类,乘以C今后变成 。所以这些权重影响不合类此外错误分类处罚项。权重越大,某一类此外误分类数据的处罚项就越大。

TermCriteria:SVM的迭代练习过程的中断前提,解决项目组受束缚二次最优题目。您可以指定的公差和/或最大迭代次数

二、SVM分类问题步骤

(1)获得练习样本及制作其类别标签(train_images,train_labels)
(2)设置模型、训练参数(Param)
(3)对SVM进行训练(train)
(4)对新的输入样本进行猜测(predict),并输出结果类型(对应标签)

1.数据准备

SVM训练投入的数据train_images->shape:[N, L],N为数据总数,L为单个数据长度。train_labels->shape:[N,1]
对于自己准备的数据,无论是图像还是向量,都需要整理成长度都为L的数据。
RGB图像数据的处理: 读图像时经行统一resize到相同长宽,如果不进行BGR2GRAY,也就是不使用灰度图作为图像特征进行训练的话,想用RGB三色图作为输入数据进行训练就得进行reshape,将三维图像reshape成一维向量,如果要进行灰度化就先将RGB2GRAY后再进行reshape成一维向量。
以下代码展示如何处理准备数据
我这里的数据集架构如下:
image_root
|-0-images
|-1-images

#加载数据
train_images = []
train_labels = []
for dir in os.listdir(image_root):
    img_path = os.path.join(image_root, dir)
    for name in os.listdir(img_path):
        img = cv2.imread(os.path.join(img_path, name))
        img = cv2.resize(img, (30,30))  #shape:[30,30,3]
        train_images.append(img.reshape(1,-1)) #shape:[1,2700]
        train_labels.append(int(dir))
#list -> array
train_images = np.array([i[0] for i in train_images], "int") #shape:[N*2700]                                             
train_labels = np.array([i for i in train_labels], "int")    
#数据处理
train_images=train_images.astype('float32')/255 #转换成float32,并且归一化
train_labels=train_labels.astype(np.int32) #转换成int32类型

经过该部分处理,数据结构就符合svm输入规则了。

2.SVM模型搭建

#创建svm模型
svm = cv2.ml.SVM_create()
#设置类型为SVM_C_SVC代表分类
svm.setType(cv2.ml.SVM_C_SVC)
#设置核函数
svm.setKernel(cv2.ml.SVM_POLY)
#设置参数
#核函数相关参数
svm.setCoef0(0.0)
svm.setGamma(3)
svm.setDegree(3)
#模型型别参数
svm.setNu(0.5)
svm.setP(0.1)  # for EPSILON_SVR, epsilon in loss function?
svm.setC(0.01)  # From paper, soft classifier
#设置迭代终止条件
criteria = (cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS, num, 1e-3)
 #这里设置终止条件是迭代次数达到num,或者loss损失小于设置的1e-3
svm.setTermCriteria(criteria)
 #训练
svm.train(train,cv2.ml.ROW_SAMPLE,labels)
#保存模型
svm.save('svm.xml')
#预测
a, y_preds = svm.predict(test) #y_preds 即为预测结果

模型加载函数:svm = cv2.ml.SVM_load(“svm.xml”)


总结

关于svm的使用本文可能还有部分遗漏不全的地方,希望大家多多评论区交流探讨。
参考连接:
https://blog.csdn.net/qq_30263737/article/details/83338958文章来源地址https://www.toymoban.com/news/detail-742612.html

到了这里,关于机器学习篇-SVM(python+opencv)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • SVM(支持向量机)-机器学习

    支持向量机(Support Vector Machine,SVM) 是一种用于分类和回归分析的监督学习算法 。它属于机器学习中的一类强大而灵活的模型,广泛应用于模式识别、图像分类、自然语言处理等领域。 基本原理: SVM的基本原理是通过找到能够有效分隔不同类别的超平面来进行分类。在二维

    2024年02月03日
    浏览(31)
  • 机器学习-支持向量机SVM

    在本练习中,我们将使用支持向量机(SVM)来构建垃圾邮件分类器。 我们将从一些简单的2D数据集开始使用SVM来查看它们的工作原理。 然后,我们将对一组原始电子邮件进行一些预处理工作,并使用SVM在处理的电子邮件上构建分类器,以确定它们是否为垃圾邮件。 我们要做

    2024年02月12日
    浏览(32)
  • 机器学习(六)支持向量机(SVM)

    目录 1.间隔与支持向量 1.1线性可分 1.2支持向量 1.3 最大间隔超平面 2.对偶问题 2.1拉格朗日乘子法 2.2 SMO算法 2.3SMO算法代码实现 3.核函数 4. SVM实例(手写体数字识别) 5.实验总结 支持向量机(SVM) 是有监督学习中最有影响力的机器学习算法之一,一般用于解决二分类问题(

    2024年02月09日
    浏览(28)
  • 【机器学习】支持向量机SVM入门

    相较于之前学习的线性回归和神经网络,支持向量机(Supprot Vector Machine,简称SVM)在拟合复杂的非线性方程的时候拥有更出色的能力,该算法也是十分经典的算法之一。接下来我们需要学习这种算法 首先我们回顾逻辑回归中的经典假设函数,如下图: 对于任意一个实例 (

    2024年02月15日
    浏览(30)
  • 机器学习算法:支持向量机(SVM)

    Solem《python计算机视觉编程》、李航《统计学习方法》、周志华《机器学习》 要理解好支持向量机需要较好的数学功底,且能不被公式以及文字绕晕,这里我们就理清楚支持向量机的大体过程。具体的数学计算推导其实已经封装好了,那么理解算法的原理也对我们将来的学习

    2024年02月03日
    浏览(29)
  • [学习笔记] [机器学习] 10. 支持向量机 SVM(SVM 算法原理、SVM API介绍、SVM 损失函数、SVM 回归、手写数字识别)

    视频链接 数据集下载地址:无需下载 学习目标: 了解什么是 SVM 算法 掌握 SVM 算法的原理 知道 SVM 算法的损失函数 知道 SVM 算法的核函数 了解 SVM 算法在回归问题中的使用 应用 SVM 算法实现手写数字识别器 学习目标: 了解 SVM 算法的定义 知道软间隔和硬间隔 在很久以前的

    2024年02月09日
    浏览(72)
  • Python | 机器学习之SVM支持向量机

    ​​​​​​ ​ 🌈个人主页: Sarapines Programmer 🔥 系列专栏: 《人工智能奇遇记》 🔖墨香寄清辞:诗馀墨痕深,梦漫星辰寂。 曲径通幽意犹在,剑指苍穹气势立。 目录结构 1. 机器学习之SVM支持向量机概念 1.1 机器学习 1.2 SVM支持向量机 2. SVM支持向量机算法 2.1 实验目的

    2024年02月05日
    浏览(27)
  • 一文全解经典机器学习算法之支持向量机SVM(关键词:SVM,对偶、间隔、支持向量、核函数、特征空间、分类)

    之前所介绍的逻辑回归是基于似然度的分类方法,通过对数据概率进行建模来得到软输出。但这种分类方法其实稍加“繁琐”,因为要 估计数据的概率分布作为中间步骤 。这就像当一个人学习英语时,他只要直接报个班或者自己看书就行了,而不需要先学习诘屈聱牙的拉丁

    2024年02月03日
    浏览(36)
  • 机器学习:基于支持向量机(SVM)进行人脸识别预测

    作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍 📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪 专栏案例:

    2024年01月23日
    浏览(30)
  • 第29步 机器学习分类实战:支持向量机(SVM)建模

    支持向量机(SVM)建模。 先复习一下参数(传送门),需要调整的参数有: ① kernel:{‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’},默认为’rbf’。使用的核函数,必须是“linear”,“poly”,“rbf”,“sigmoid”,“precomputed”或者“callable”中的一个。 ② c:浮点

    2024年02月02日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包