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

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

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

相关文章

在 Mac ARM 架构 (Apple Silicon,例如 M1, M2, M3 芯片) 上使用官方安装包安装 MySQL

在 Mac ARM 架构 (Apple Silicon&#xff0c;例如 M1, M2, M3 芯片) 上使用官方安装包安装 MySQL&#xff0c;步骤与在 Intel Mac 上类似&#xff0c;但需要确保下载的是 ARM 架构兼容的版本。以下是详细的安装步骤&#xff1a; 步骤 1: 下载 MySQL Community Server DMG 安装…

以ChatGPT为例解析大模型背后的技术

目录 1、大模型分类 2、为什么自然语言处理可计算&#xff1f; 2.1、One-hot分类编码&#xff08;传统词表示方法&#xff09; 2.2、词向量 3、Transformer架构 3.1、何为注意力机制&#xff1f; 3.2、注意力机制在 Transformer 模型中有何意义&#xff1f; 3.3、位置编…

AI训练中的常用指令

以下是一些常用于深度学习训练的 Linux 指令&#xff0c;可以帮助你高效管理和执行训练任务&#xff1a; 文件管理 查看当前目录内容&#xff1a;ls进入目录&#xff1a;cd 路径/到/目录创建新目录&#xff1a;mkdir 新目录名称删除文件或目录&#xff1a; 删除文件&#xff…

【ARM入门指南】一文搞懂什么是ARM

在单片机与嵌入式系统的浩瀚宇宙中&#xff0c;ARM架构犹如一颗耀眼的星辰&#xff0c;持续引领着技术创新的潮流。对于刚刚踏入这一领域的初学者而言&#xff0c;深入了解ARM是迈入嵌入式开发大门的关键一步。ARM&#xff0c;这个名字背后&#xff0c;不仅代表着一家在半导体设…

接口测试-API测试中常用的协议(下)

一、RPC RPC&#xff08;Remote Procedure Call&#xff09;即远程过程调用协议&#xff0c;它允许程序调用位于其他计算机上的程序中的过程或函数&#xff0c;就像调用本地程序中的过程一样。下面从其概念、工作原理、特点、应用场景等方面详细介绍&#xff1a; 概念起源与核…

Go Web 项目实战:构建 RESTful API、命令行工具及应用部署

Go Web 项目实战&#xff1a;构建 RESTful API、命令行工具及应用部署 Go 语言因其简洁高效、并发支持强大等特点&#xff0c;已经成为了后端开发的热门选择之一。本篇文章将通过实战案例带领你学习如何使用 Go 构建一个简单的 RESTful API&#xff0c;开发命令行工具&#xf…

Http升级为Https - 开发/测试服环境

1.应用场景 主要用于开发/测试服环境将http升级为https, 防止前端web(浏览器)出现Mixed Content报错; 2.学习/操作 1.文档阅读 deepseek 问答; 2.整理输出 报错信息: Mixed Content: The page at <URL> was loaded over HTTPS, but requested an insecure XMLHttpRequ…

使用 AIStor 和 OpenSearch 增强搜索功能

在这篇文章中&#xff0c;我们将探讨搜索&#xff0c;特别是 OpenSearch 如何帮助我们识别模式或查看不断增长的数据中的趋势。例如&#xff0c;如果您正在查看运营数据&#xff0c;如果您的服务似乎是随机的&#xff0c;那么您需要尽可能回溯以识别模式并找出原因。这不仅适用…

Python——生成AIGC图像

文章目录 一、背景介绍 二、效果图展示 三、完整代码 四、分步解释 五、实用建议 1&#xff09;提示词技巧 2&#xff09;性能优化 3&#xff09;常见问题处理 4&#xff09;扩展功能建议 六、注意事项 1. 硬件要求 2. 法律合规 3. 模型安全 一、背景介绍 AIGC&a…

多任务(20250210)

1. 进程的概念 (1) 程序:是一段存放在外存中代码的集合(静态的) (2) 进程:是一个程序动态执行的过程,包括创建、调度、消亡(动态的) 2. 如何实现多任务 Linux中&#xff0c;通过进程、线性实现多任务 3. 进程 正在执行的程序&#xff08;动态&#xff09;&#xff0c;需…

【2025最新版】Chrome谷歌浏览器如何能恢复到之前的旧版本

背景 今天程序突然出了bug&#xff0c;无法自动测试了&#xff0c;显示Chrome版本不匹配&#xff0c;一看&#xff0c;Chrome居然在我已经关闭升级的情况下&#xff0c;又给我升级了&#xff0c;然后就悲剧了&#xff0c;我的代码不能用了。 于是&#xff0c;做了以下几步&…

解决OpenEuler系统修改句柄无效的问题

本文测试基于OpenEuler的操作系统&#xff0c;比如BC-Linux。 想要使修改文件句柄&#xff08;即最大打开文件数&#xff09;永久生效&#xff0c;通常需要编辑 /etc/security/limits.conf 文件。但可能出现修改了文件之后&#xff0c;并未生效的情况&#xff0c;下面就介绍下可…

自制AirTag,支持安卓/鸿蒙/PC/Home Assistant,无需拥有iPhone

苹果的AirTag很贵&#xff0c;虽然某强北有平价代替品&#xff0c;但是仍需要苹果设备才能绑定&#xff0c;才能查看位置。不支持安卓/鸿蒙/PC&#xff0c;也不支持集成到Home Assistant中。 AirTag 的原理 每个AirTag都会发送一个蓝牙信号&#xff0c;其可以被临近的苹果设备…

双重差分学习笔记

双重差分适用的研究场景&#xff1a; 研究某项政策或者冲击造成的影响 例如&#xff0c;某某小学在2024.12.12日颁布了小红花激励措施&#xff0c;我们要研究这项措施对学生成绩的影响&#xff0c;此时&#xff0c;就可以使用双重差分模型。 双重差分适用的数据类型&#xf…

python入门笔记5-集合与字典

元组 Python 的元组&#xff08;tuple&#xff0c;简写为tup&#xff09;与列表类似&#xff0c;不同之处在于元组的元素不能修改。 元组使用小括号​()​&#xff0c;列表使用方括号​[]​。 好处就是节省内存。 集合 集合是无序、不重复元素的容器。 用 {} 或 set() 创建…

DevOps自动化部署详解:从理念到实践

在软件开发日益快速迭代的今天&#xff0c;如何以高效、稳定且可重复的方式将代码变更从开发环境自动部署到生产环境成为企业竞争的重要因素。DevOps 正是在这一背景下应运而生&#xff0c;它打破开发、测试、运维之间的壁垒&#xff0c;通过自动化工具和流程&#xff0c;实现持…

Python 将PPT幻灯片和形状转换为多种图片格式(JPG, PNG, BMP, SVG, TIFF)

目录 安装所需的库 使用Python将PowerPoint幻灯片转换为JPG、PNG和BMP图片 按实际尺寸将幻灯片保存为图片 按自定义尺寸将幻灯片保存为图片 使用Python将PowerPoint幻灯片转换为SVG图片 使用Python将PowerPoint幻灯片转换为多页TIFF图片 使用Python将PowerPoint幻灯片中…

【设计模式】【创建型模式】工厂方法模式(Factory Methods)

&#x1f44b;hi&#xff0c;我不是一名外包公司的员工&#xff0c;也不会偷吃茶水间的零食&#xff0c;我的梦想是能写高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f44d; 欢迎点赞、收藏、关注&#xff0c;跟上我的更新节奏 &#x1f3b5; 当你的天空突…

基于STM32的智能工业设备健康监测系统

1. 引言 工业设备故障导致的生产停滞问题日益突出&#xff0c;传统人工巡检方式效率低且难以捕捉早期隐患。本文设计了一款基于STM32的智能工业设备健康监测系统&#xff0c;通过振动分析、温度监测与声纹识别技术&#xff0c;实现设备状态实时评估、故障预警与维护决策支持&a…

第4章:在LangChain中如何实现响应式流(Response Streaming)

文章介绍了 LangChain4j 中的 响应流式传输&#xff08;Response Streaming&#xff09; 功能&#xff0c;展示了如何通过低层次的 LLM&#xff08;大语言模型&#xff09;API 实现逐个令牌&#xff08;token&#xff09;的流式响应。 响应式流&#xff08;Response Streaming&…