当前位置: 首页 > news >正文

OpenCV机器学习(10)训练数据的一个核心类cv::ml::TrainData

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

cv::ml::TrainData 类是 OpenCV 机器学习模块中用于表示训练数据的一个核心类。它封装了样本数据、响应(标签)、样本权重等信息,并提供了多种方法来创建和操作这些数据,以适应不同的机器学习算法需求。

主要功能

  • 数据准备:允许你从原始数据创建训练数据对象。
  • 支持多种任务:无论是分类、回归还是其他类型的任务,都可以使用 TrainData 来组织你的数据。
  • 灵活的数据输入:支持直接从矩阵输入数据,也支持加载来自文件的数据。
  • 数据分割:可以将数据集分割为训练集和测试集。

常用成员函数

  • 创建 TrainData 对象
    static Ptr create(InputArray samples, int layout, InputArray responses, InputArray varIdx=noArray(), InputArray sampleIdx=noArray(), InputArray sampleWeights=noArray(), InputArray varType=noArray()):
    从给定的样本、响应和其他可选参数创建一个 TrainData 对象。
    • samples:样本数据矩阵,每一行代表一个样本。
    • layout:样本布局,可以是 ROW_SAMPLE 或 COL_SAMPLE,表示每个样本是按行还是按列存储。
    • responses:每个样本对应的响应向量或矩阵。
  • 获取数据信息
    • int getNTrainSamples() const:获取训练样本的数量。
    • int getNVars() const:获取变量(特征)的数量。
    • Mat getSamples() const:返回所有样本。
    • Mat getResponses() const:返回所有响应。
    • Mat getSampleWeights() const:返回样本权重。
    • Mat getTrainSampleWeights() const:返回训练集的样本权重。
  • 数据分割
    • void setTrainTestSplit(int count, bool shuffle=true):根据指定的训练样本数量将数据集划分为训练集和测试集。
    • void setTrainTestSplitRatio(double ratio, bool shuffle=true):根据比例将数据集划分为训练集和测试集。
    • Mat getTrainSamples() const:返回训练集的样本。
    • Mat getTrainResponses() const:返回训练集的响应。
    • Mat getTestSamples() const:返回测试集的样本。
    • Mat getTestResponses() const:返回测试集的响应。

代码示例

#include <iostream>
#include <opencv2/ml.hpp>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace cv::ml;
using namespace std;int main()
{// 准备训练数据Mat samples = ( Mat_< float >( 4, 2 ) << 0.5, 1.0, 1.0, 1.5, 2.0, 0.5, 1.5, 0.0 );Mat responses = ( Mat_< int >( 4, 1 ) << 0, 0, 1, 1 );// 使用TrainData创建训练数据对象Ptr< TrainData > trainData = TrainData::create( samples, ROW_SAMPLE, responses );// 打印样本数量和变量数量cout << "Number of training samples: " << trainData->getNTrainSamples() << endl;cout << "Number of variables: " << trainData->getNVars() << endl;// 分割数据集为训练集和测试集trainData->setTrainTestSplitRatio( 0.75, true );  // 按75%比例分割,shuffle=true表示随机打乱// 获取训练样本和响应Mat trainSamples   = trainData->getTrainSamples();Mat trainResponses = trainData->getTrainResponses();// 获取测试样本和响应Mat testSamples   = trainData->getTestSamples();Mat testResponses = trainData->getTestResponses();// 训练一个简单的SVM模型作为示例Ptr< SVM > svm_model = SVM::create();svm_model->setType( SVM::C_SVC );svm_model->setKernel( SVM::RBF );svm_model->setC( 1 );svm_model->setGamma( 0.5 );bool ok = svm_model->train( trainData );if ( ok ){// 对测试集中的样本进行预测float response = svm_model->predict( testSamples );cout << "The predicted response for the test sample is: " << response << endl;}else{cerr << "Training failed!" << endl;}return 0;
}

运行结果

Number of training samples: 4
Number of variables: 2
The predicted response for the test sample is: 1

相关文章:

OpenCV机器学习(10)训练数据的一个核心类cv::ml::TrainData

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::ml::TrainData 类是 OpenCV 机器学习模块中用于表示训练数据的一个核心类。它封装了样本数据、响应&#xff08;标签&#xff09;、样本权重…...

3.1 actor基本框架(c#的Akka.Actor模式)

1.最简单的一个框架 代码如下&#xff08;代码容易理解&#xff09;&#xff1a; using System; using Akka.Actor; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Security.Cryptography.X509Certi…...

Git使用[同一电脑多个账户ssh-key的管理]

同一电脑多个账户ssh-key的管理 现在遇到一个问题,我同一台电脑既要通过VPN访问内网的git也要访问对外释放的gitee,刚开始我直接把原来的SSH-key添加到内网的gitlab发现可以访问,但是后来再方位外网的gitee就出问题了,看来要换一种手段才行 本文引用&#xff1a;https://cloud…...

使用Python结合`stable-baselines3`库(包含PPO和TD3算法)以及`gym`库来实现分层强化学习的示例代码

以下是一个使用Python结合stable-baselines3库&#xff08;包含PPO和TD3算法&#xff09;以及gym库来实现分层强化学习的示例代码。该代码将环境中的动作元组分别提供给高层处理器PPO和低层处理器TD3进行训练&#xff0c;并实现单独训练和共同训练的功能。 代码实现 import g…...

【论文笔记】MambaGlue: Fast and Robust Local Feature Matching With Mamba

【引用格式】&#xff1a;Ryoo K, Lim H, Myung H. MambaGlue: Fast and Robust Local Feature Matching With Mamba[J]. arXiv preprint arXiv:2502.00462, 2025. 【网址】&#xff1a;https://arxiv.org/pdf/2502.00462 【开源代码】&#xff1a;https://github.com/uri-Ka…...

基于 Stanford CoreNLP 的中文自然语言处理

一、概述 Stanford CoreNLP 是斯坦福大学开发的一款强大的自然语言处理&#xff08;NLP&#xff09;工具&#xff0c;支持多种语言的文本处理&#xff0c;包括中文。本文将详细介绍如何使用 Stanford CoreNLP 实现中文文本的分词、词性标注、命名实体识别、句法分析等功能&…...

python 量化交易入门到提升详细教程,python量化交易教程

文章目录 前言入门阶段1. 环境准备安装 Python选择开发环境安装必要的库 2. 金融数据获取3. 简单策略构建 - 移动平均线交叉策略 进阶阶段1. 策略回测2. 风险管理3. 多因子策略4. 机器学习在量化交易中的应用5. 高频交易策略 前言 Python 作为一门功能强大、易于学习且应用广泛…...

如何设置爬虫的访问频率?

设置爬虫的访问频率&#xff08;即请求间隔&#xff09;是确保爬虫稳定运行并避免对目标服务器造成过大压力的关键步骤。合理的访问频率不仅可以减少被目标网站封禁IP的风险&#xff0c;还能提高爬虫的效率。以下是一些设置爬虫访问频率的方法和最佳实践&#xff1a; 1. 使用s…...

前端循环全解析:JS/ES/TS 循环写法与实战示例

循环是编程中控制流程的核心工具。本文将详细介绍 JavaScript、ES6 及 TypeScript 中各种循环的写法、特性&#xff0c;并通过实际示例帮助你掌握它们的正确使用姿势。 目录 传统三剑客 for 循环 while 循环 do...while 循环 ES6 新特性 forEach for...of for...in 数组…...

大气体育直播模板赛事扁平自适应模板源码

源码名称&#xff1a;大气体育直播模板赛事网站源码 开发环境&#xff1a;帝国cms 7.5 安装环境&#xff1a;phpmysql 模板特点&#xff1a; 程序伪静态版本&#xff0c;实时采集更新&#xff0c;无人值守&#xff0c;省心省力。带火车头采集&#xff0c;可以挂着自动采集发布…...

vue3学习1

vite是新的官方构建工具&#xff0c;构建速度比webpack更快 vue项目的入口文件是index.html&#xff0c;一般在这里引入src/main.js&#xff0c;并且设置好容器#app App.vue放的是根组件&#xff0c;components里放分支组件 vue组件中写三种标签&#xff0c;template & s…...

java机器学习计算指标动态阈值

java机器学习计算指标动态阈值 最近听到有的人说要做机器学习就一定要学Python&#xff0c;我想他们掌握的知道还不够系统全面。本文作者以动态阈值需求场景给大家介绍几种常用Java实现的机器学习库&#xff0c;包括使用开源库如Weka或Deeplearning4j&#xff08;DL4J&#xf…...

mac os设置jdk版本

打开环境变量配置文件 sudo vim ~/.bash_profile 设置不同的jdk版本路径 # 设置JAVA_HOME为jdk17路径 export JAVA_HOME$(/usr/libexec/java_home -v 17)# 设置JAVA_HOME为jdk8路径 export JAVA_HOME$(/usr/libexec/java_home -v 1.8) 设置环境变量 # 将jdk加入到环境变量…...

Python正则表达式学习

Python正则表达式全攻略 一、正则表达式基础 1. 什么是正则表达式&#xff1f; 用于描述字符串匹配规则的表达式广泛应用于文本处理、表单验证、数据清洗等领域 2. Python中的re模块 import re3. 基础语法 字符说明示例.匹配任意字符(除换行)a.c → abc\d数字 [0-9]\d\d …...

ShenNiusModularity项目源码学习(10:ShenNius.FileManagement项目分析)

ShenNiusModularity项目支持七牛云和本地图片存储&#xff0c;其文件上传接口及实现就位于ShenNius.FileManagement项目内&#xff0c;该项目内文件不多&#xff0c;主要就是围绕上传本地及七牛云的实现及相关类定义。   扩展类FileManagemenServiceExtensions的AddFileUploa…...

mysql查看binlog日志

mysql 配置、查看binlog日志&#xff1a; 示例为MySQL8.0 1、 检查binlog开启状态 SHOW VARIABLES LIKE ‘log_bin’; 如果未开启&#xff0c;修改配置my.ini 开启日志 安装目录配置my.ini(mysql8在data目录) log-binmysql-bin&#xff08;开启日志并指定日志前缀&#xff…...

Node.js高频面试题精选及参考答案

目录 什么是 Node.js?它的主要特点有哪些? Node.js 的事件驱动和非阻塞 I/O 模型是如何工作的? 为什么 Node.js 适合处理高并发场景? Node.js 与传统后端语言(如 Java、Python)相比,有哪些优势和劣势? 简述 Node.js 的运行原理,包括 V8 引擎的作用。 什么是 Nod…...

TaskBuilder创建客户信息列表页面

3.4.1选择页面类型 点击上面创建的customer文件夹右侧的加号&#xff0c;打开“前端资源创建向导”对话框&#xff0c;选中“数据查询TFP”&#xff0c;资源名称会自动设置为index&#xff0c;这里我们不用改。 点“下一步”按钮&#xff0c;会弹出下图所示的“创建数据查询T…...

Linux Iptables示例一则

个人博客地址&#xff1a;Linux Iptables示例一则 | 一张假钞的真实世界 关于Iptables的介绍个人强烈推荐&#xff1a;iptables-朱双印博客-第2页。这位兄弟介绍的很详细。 我个人的需求是在同一个网络内从网络上把测试主机与正式环境主机间的网络进行隔离。我的思路是采用OU…...

新手小白如何挖掘cnvd通用漏洞之存储xss漏洞(利用xss钓鱼)

视频教程和更多福利在我主页简介或专栏里 &#xff08;不懂都可以来问我 专栏找我哦&#xff09; 如果对你有帮助你可以来专栏找我&#xff0c;我可以无偿分享给你对你更有帮助的一些经验和资料哦 目录&#xff1a; 一、XSS的三种类型&#xff1a; 二、XSS攻击的危害&#x…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...