SVM的使用
注意:数据结构的一致性,在高维度数据一般使用rbf核函数,使用网格搜索思想迭代求出gamma和c。
每行为一个样本,数据类型都围绕标黄代码而定义的。
SVM训练如下坐标(左边一列为A类,右边为B类),然后预测给出的坐标属于哪一类。

#include<opencv2\opencv.hpp>
#include<iostream>
#include<opencv2\ml.hpp> //引入机器学习
using namespace cv;
using namespace std;
using namespace ml; int main()
{
//*1、类别标签labelsMat,因为其是短整型,所以labels定义成int类型。最后再转回char
int labels[] = { 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B', 'B' };
Mat labelsMat(, , CV_32S);//短整型
for (int i = ; i < labelsMat.rows; i++)
{
labelsMat.at<int>(i, ) = labels[i];
}
//*2、用于训练的样本集trainingDataMat
int trainingData[][] = { { , }, { , }, { , }, { , }, { , }, { , }, { , },
{ , }, { , }, { , }, { , }, { , }, { , }, { , } };
Mat trainingDataMat(, , CV_32F); //float类型
for (int i = ; i < trainingDataMat.rows; i++)
{
for (int j = ; j < trainingDataMat.cols; j++)
{
trainingDataMat.at<float>(i, j) = trainingData[i][j];
}
}
//*3、初始化SVM,参数参考 https://blog.csdn.net/qq_27278957/article/details/88736516
Ptr<ml::SVM> svm = ml::SVM::create();
svm->setType(SVM::C_SVC); //svm的类型,
svm->setKernel(SVM::LINEAR); //核函数
svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, , FLT_EPSILON)); //终止条件
//*4、训练模型
Ptr<TrainData> tData = TrainData::create(trainingDataMat, ROW_SAMPLE, labelsMat);//训练样本的数据类型必须是CV_32F,标签可以是CV_32S或其他。
svm->train(tData);
svm->save("svmData.xml");
//*5、预测
Mat tmp(, , CV_32F);
tmp.at<float>(, ) = ;
tmp.at<float>(, ) = ; char label = (char)svm->predict(tmp); //ASCII码转字符,预测结果为B
cout << label << endl; waitKey();
return ;
}
上图绘制代码:
Mat plot(, , CV_8U);
vector<Point> myPoint();//14个点
for (int i = ; i < myPoint.size(); i++)
{
myPoint[i].x = trainingData[i][];
myPoint[i].y = trainingData[i][];
circle(plot, myPoint[i], , Scalar(), -);
}
namedWindow("坐标点", );
imshow("坐标点", plot);
【参考】
SVM的使用的更多相关文章
- EasyPR--开发详解(6)SVM开发详解
在前面的几篇文章中,我们介绍了EasyPR中车牌定位模块的相关内容.本文开始分析车牌定位模块后续步骤的车牌判断模块.车牌判断模块是EasyPR中的基于机器学习模型的一个模块,这个模型就是作者前文中从机 ...
- 8.SVM用于多分类
从前面SVM学习中可以看出来,SVM是一种典型的两类分类器.而现实中要解决的问题,往往是多类的问题.如何由两类分类器得到多类分类器,就是一个值得研究的问题. 以文本分类为例,现成的方法有很多,其中一劳 ...
- 5.SVM核函数
核函数(Kernels) 定义 1.1 (核或正定核) 设是中的一个子集,称定义在上的函数是核函数,如果存在一个从到Hilbert空间的映射 使得对任意的,都成立.其中表示Hilbert空间中的内积. ...
- 4. SVM分类器求解(2)
最优间隔分类器(optimal margin classifier) 重新回到SVM的优化问题: 我们将约束条件改写为: 从KKT条件得知只有函数间隔是1(离超平面最近的点)的线性约束式前面的系数,也 ...
- 2. SVM线性分类器
在一个线性分类器中,可以看到SVM形成的思路,并接触很多SVM的核心概念.用一个二维空间里仅有两类样本的分类问题来举个小例子.如图所示 和是要区分的两个类别,在二维平面中它们的样本如上图所示.中间的直 ...
- 1. SVM简介
从这一部分开始,将陆续介绍SVM的相关知识,主要是整理以前学习的一些笔记内容,梳理思路,形成一套SVM的学习体系. 支持向量机(Support Vector Machine)是Cortes和Vapni ...
- SVM分类与回归
SVM(支撑向量机模型)是二(多)分类问题中经常使用的方法,思想比较简单,但是具体实现与求解细节对工程人员来说比较复杂,如需了解SVM的入门知识和中级进阶可点此下载.本文从应用的角度出发,使用Libs ...
- 【十大经典数据挖掘算法】SVM
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART SVM(Support Vector ...
- 卷积神经网络提取特征并用于SVM
模式识别课程的一次作业.其目标是对UCI的手写数字数据集进行识别,样本数量大约是1600个.图片大小为16x16.要求必须使用SVM作为二分类的分类器. 本文重点是如何使用卷积神经网络(CNN)来提取 ...
- 机器学习实战笔记(Python实现)-05-支持向量机(SVM)
--------------------------------------------------------------------------------------- 本系列文章为<机器 ...
随机推荐
- Flutter Android 真机器调试 、模拟器调试、Vscode 中开发 Flutter 应用
必备条件: 1.准备一台 Android 手机 2.手机需要开启调试模式 3.用数据线把手机连上电脑 4.手机要允许电脑进行 Usb 调试 5.手机对应的 sdk 版本必须安装 注意: 1.关闭电脑上 ...
- touchstart和click 自动区分
var clickEvent = (function() { if ('ontouchstart' in document.documentElement === true) return 'touc ...
- 「JSOI2015」送礼物
「JSOI2015」送礼物 传送门 看到这题首先想到分数规划. 我们发现对于当前区间,如果它的最大值和最小值不是分居区间的两个端点的话,那么我们显然可以把两端多出去的部分舍掉,因为,在区间最大值最小值 ...
- 中山纪中Day1--普及
早上一起,扑面是瓢泼的大雨.跨过千山万水,来到纪中门前,毅然以一种大无畏的英雄气概跨进了考场. 面对四道神题.然后,我成功过五关斩六将,A掉了2道题!!! 收获:优先队列(大.小根堆) T1:APPL ...
- Hibernate学习(二)
持久化对象的声明周期 1.Hibernate管理的持久化对象(PO persistence object )的生命周期有四种状态,分别是transient.persistent.detached和re ...
- 吴裕雄 PYTHON 神经网络——TENSORFLOW 学习率的设置
import tensorflow as tf TRAINING_STEPS = 10 LEARNING_RATE = 1 x = tf.Variable(tf.constant(5, dtype=t ...
- UDLD(Unidirectional Link Detection)
1.UDLD(单向链路检测协议)工作原理 为了在生成转发环路之前检测到单向链路,Cisco 设计并实施了 UDLD 协议.UDLD 是与第 1 层 (L1) 机制一起工作以确定链路物 ...
- (转)__attribute__之section 分析详解
原文地址:__attribute__之section详解 前言 第一次接触 "section" 是在公司的一个STM32的项目代码中,前工程师将所有的初始化函数都使用的" ...
- idea使用小技巧
1.按住alt,鼠标往下拉一条直线,可以选中一列或多列,或者不选中任何文字,可以让光标定位到这几行的相同的列的位置,然后输入文本,发现在被选中的所有行同时输入了这些文本(类似notepad++): 2 ...
- Vue项目——去哪网(首页部分)
业务逻辑 通过gitee创立各个分支,比如swiper,header,recommende等分支,其实就是整个页面上的每个模块.模块化是公司级别项目开发的基准,每个人在各自的分支上进行代码的编写,而对 ...