当前位置: 首页 > 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
http://www.lryc.cn/news/540042.html

相关文章:

  • 3.1 actor基本框架(c#的Akka.Actor模式)
  • Git使用[同一电脑多个账户ssh-key的管理]
  • 使用Python结合`stable-baselines3`库(包含PPO和TD3算法)以及`gym`库来实现分层强化学习的示例代码
  • 【论文笔记】MambaGlue: Fast and Robust Local Feature Matching With Mamba
  • 基于 Stanford CoreNLP 的中文自然语言处理
  • python 量化交易入门到提升详细教程,python量化交易教程
  • 如何设置爬虫的访问频率?
  • 前端循环全解析:JS/ES/TS 循环写法与实战示例
  • 大气体育直播模板赛事扁平自适应模板源码
  • vue3学习1
  • java机器学习计算指标动态阈值
  • mac os设置jdk版本
  • Python正则表达式学习
  • ShenNiusModularity项目源码学习(10:ShenNius.FileManagement项目分析)
  • mysql查看binlog日志
  • Node.js高频面试题精选及参考答案
  • TaskBuilder创建客户信息列表页面
  • Linux Iptables示例一则
  • 新手小白如何挖掘cnvd通用漏洞之存储xss漏洞(利用xss钓鱼)
  • 【CXX】4 跨平台构建系统特性对比
  • MySQL 如何使用EXPLAIN工具优化SQL
  • 沃丰科技大模型标杆案例|周大福集团统一大模型智能服务中心建设实践
  • 代码随想录day16
  • 常见的软件测试模型及特点
  • tailwindcss学习01
  • C语言复杂度分析
  • DeepSeek服务器繁忙 多种方式继续优雅的使用它
  • Bootstrap Blazor UI 中 <Table> 组件 <TableColumn> 使用备忘01:EF Core 外码处理
  • 云原生数据抽象与弹性加速:Fluid开源系统的技术解析
  • 【Python爬虫(29)】爬虫数据生命线:质量评估与监控全解