OpenCV机器学习(4)k-近邻算法(k-Nearest Neighbors, KNN)cv::ml::KNearest类
- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
cv::ml::KNearest 是 OpenCV 机器学习模块中的一部分,它提供了实现 k-近邻算法(k-Nearest Neighbors, KNN)的方法。KNN 是一种简单但功能强大的分类和回归算法,基于实例的学习方法,即根据最近邻的类别来预测新样本的类别。
主要特点
- 分类与回归:既可以用于分类任务也可以用于回归任务。
- 参数设置:可以指定邻居的数量(k)、是否使用投票机制(对于分类)或平均值(对于回归)等。
- 距离度量:支持不同的距离度量方式,默认为欧几里得距离。
常用成员函数
以下是一些常用的 cv::ml::KNearest 类成员函数:
- 创建模型实例:
create():创建一个新的 KNearest 模型实例。 - 训练模型:
- train(const Ptr& trainData, int flags=0):使用提供的训练数据进行训练。
- train(const Mat& samples, int layout, const Mat& responses):另一种形式的训练函数,直接接受样本和响应矩阵作为输入。
- 预测:
- findNearest(InputArray samples, int k, OutputArray results, OutputArray neighborResponses=noArray(), OutputArray dist=noArray()) -
-const:找到最近的 k 个邻居,并返回结果、邻居的响应及距离(可选)。 - 保存与加载模型:
- save(const String& filename):将模型保存到文件。
- load(const String& filename):从文件加载模型。
使用步骤
- 准备数据:准备好你的训练数据集,包括特征向量及其对应的标签(对于分类任务)或目标值(对于回归任务)。
- 初始化 KNearest 模型:使用 cv::ml::KNearest::create() 创建一个新的 KNearest 模型实例,并根据需要设置参数。
- 训练模型:调用 train() 方法,传入你的训练数据来进行模型训练。
- 评估模型:可以通过交叉验证或者在独立的测试集上评估模型性能。
- 预测新数据:使用训练好的模型对新的未见过的数据进行预测,并获取其所属类别的概率分布或回归值。
代码示例
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 );// 创建并配置 KNearest 模型Ptr< KNearest > knn_model = KNearest::create();knn_model->setDefaultK( 3 ); // 设置默认的邻居数量为3knn_model->setIsClassifier( true ); // 设置为分类模式// 训练模型bool ok = knn_model->train( samples, ROW_SAMPLE, responses );if ( ok ){// 保存模型knn_model->save( "knn_model.yml" );// 对新样本进行预测Mat sample = ( Mat_< float >( 1, 2 ) << 1.6, 0.7 );Mat result, neighborResponses, dist;float response = knn_model->findNearest( sample, 3, result, neighborResponses, dist );cout << "The predicted response for the sample is: " << response << endl;cout << "Neighbor responses: " << neighborResponses << endl;cout << "Distances: " << dist << endl;}else{cerr << "Training failed!" << endl;}return 0;
}
运行结果
The predicted response for the sample is: 1
Neighbor responses: [1, 1, 0]
Distances: [0.19999997, 0.49999997, 1]
相关文章:
OpenCV机器学习(4)k-近邻算法(k-Nearest Neighbors, KNN)cv::ml::KNearest类
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::ml::KNearest 是 OpenCV 机器学习模块中的一部分,它提供了实现 k-近邻算法(k-Nearest Neighbors, KNN)的…...
JVM中的线程池详解:原理→实践
一、为什么需要线程池? 在多线程编程中,频繁地创建和销毁线程会带来显著的性能开销。 想象一下,如果你经营一家西餐厅,每次有顾客到来你都雇佣新的服务员,顾客吃完结账后就解雇——这种模式是不是非常效率低下且成本高…...
SNARKs 和 UTXO链的未来
1. 引言 SNARKs 经常被视为“解决”扩容问题的灵丹妙药。虽然 SNARKs 可以提供令人难以置信的好处,但也需要承认其局限性——SNARKs 无法解决区块链目前面临的现有带宽限制。 本文旨在通过对 SNARKs 对比特币能做什么和不能做什么进行(相对)…...
JavaScript设计模式 -- 外观模式
在实际开发中,往往会遇到多个子系统协同工作时,直接操作各个子系统不仅接口繁琐,还容易导致客户端与内部实现紧密耦合。**外观模式(Facade Pattern)**通过为多个子系统提供一个统一的高层接口,将复杂性隐藏…...
百达翡丽(Patek Philippe):瑞士制表的巅峰之作(中英双语)
百达翡丽(Patek Philippe):瑞士制表的巅峰之作 在钟表界,百达翡丽(Patek Philippe) 一直被誉为“世界三大名表”之一,并且常被认为是其中的至高存在。一句“没人能真正拥有一枚百达翡丽&#x…...
阿里云一键部署DeepSeek-V3、DeepSeek-R1模型
目录 支持的模型列表 模型部署 模型调用 WebUI使用 在线调试 API调用 关于成本 FAQ 点击部署后服务长时间等待 服务部署成功后,调用API返回404 请求太长导致EAS网关超时 部署完成后,如何在EAS的在线调试页面调试 模型部署之后没有“联网搜索…...
分享一款AI绘画图片展示和分享的小程序
🎨奇绘图册 【开源】一款帮AI绘画爱好者维护绘图作品的小程序 查看Demo 反馈 github 文章目录 前言一、奇绘图册是什么?二、项目全景三、预览体验3.1 截图示例3.2 在线体验 四、功能介绍4.1 小程序4.2 服务端 五、安装部署5.1 快速开始~~5.2 手动部…...
【练习】【双指针】力扣热题100 283. 移动零
题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0] 输出…...
QT 互斥锁
一、概述 1、在多线程编程中,为了防止多个线程同时访问共享资源而导致的不确定性和错误,经常会使用互斥锁(Mutex)进行保护。 2、QMutex是Qt提供的一个互斥锁类,用于确保在同一时间只有一个线程访问共享资源。 3、QM…...
什么是算法的空间复杂度和时间复杂度,分别怎么衡量。
1. 时间复杂度 时间复杂度衡量的是算法运行时间与输入规模之间的关系。它通常用大O记号(Big O Notation)表示,例如 O(1)、O(n)、O(n2) 等。 衡量方法: 常数时间复杂度 O(1):无论输入规模如何,算法的执行时…...
VMware Workstation 17.0 Pro创建虚拟机并安装Ubuntu22.04与ubuntu20.04(双版本同时存在)《包含小问题总结》
目录 一、创建虚拟机 二、下载安装22.04 三、一些配置问题总结(小屏,网络,复制贴贴等) 1、网络问题 2、sudo apt install net-tools出现无法定为软件包 3、小屏与ubuntu虚拟机与windows系统之间复制粘贴 4、安装终端:Termi…...
Windows 10 ARM工控主板CAN总线实时性能测试
在常规的Windows系统中支持CAN总线应用,需要外接CAN总线适配器,通常为USB转CAN模块或PCI接口CAN卡。实时性本身是CAN总线的显著特性之一,但由于Windows并非实时操作系统,应用程序容易受到系统CPU负载影响,导致调度周期…...
如何在不依赖函数调用功能的情况下结合工具与大型语言模型
当大型语言模型(LLM)原生不支持函数调用功能时,如何实现智能工具调度?本文通过自然语言解析结构化输出控制的方法来实现。 GitHub代码地址 核心实现步骤 定义工具函数 使用tool装饰器声明可调用工具: from langcha…...
【Linux AnolisOS】关于Docker的一系列问题。尤其是拉取东西时的网络问题,镜像源问题。
AnolisOS 8中使用Docker部署(全)_anolis安装docker-CSDN博客 从在虚拟机安装龙蜥到安装docker上面这篇文章写的很清晰了,我重点讲述我解决文章里面问题一些的方法。 问题1: docker: Get https://registry-1.docker.io/v2/: net/h…...
【Elasticsearch】Mapping概述
以下是Elasticsearch中提到的关于Mapping的各模块概述: --- 1.Dynamic mapping(动态映射) 动态映射是指Elasticsearch在索引文档时,自动检测字段类型并创建字段映射的过程。当你首次索引一个文档时,Elasticsearch会根…...
GPT-4o悄然升级:能力与个性双突破,AI竞技场再掀波澜
在大模型竞技场中,GPT-4o悄悄发布了全新版本,凭借其卓越的多项能力,迅速超越了DeepSeek-R1,成功登上并列第一的位置。这次更新不仅在数学(第6名)上有所突破,还在创意写作、编程、指令遵循、长文…...
如何选择合适的超参数来训练Bert和TextCNN模型?
选择合适的超参数来训练Bert和TextCNN模型是一个复杂但关键的过程,它会显著影响模型的性能。以下是一些常见的超参数以及选择它们的方法: 1. 与数据处理相关的超参数 最大序列长度(max_length) 含义:指输入到Bert模…...
C# SpinLock 类 使用详解
总目录 前言 SpinLock 是 C# 中一种轻量级的自旋锁,属于 System.Threading 命名空间,专为极短时间锁竞争的高性能场景设计。它通过忙等待(自旋)而非阻塞线程来减少上下文切换开销,适用于锁持有时间极短(如…...
【linux】在 Linux 上部署 DeepSeek-r1:32/70b:解决下载中断问题
【linux】在 Linux 上部署 DeepSeek-r1:32/70b:解决下载中断问题 【承接商业广告,如需商业合作请+v17740568442】 文章目录 【linux】在 Linux 上部署 DeepSeek-r1:32/70b:解决下载中断问题问题描述:解决方法方法一:手动中断并重启下载方法二:使用 Bash 脚本自动化下载在…...
机器学习所需要的数学知识【01】
总览 导数 行列式 偏导数 概理论 凸优化-梯度下降 kkt条件...
QMCDecode技术解析:3种方法实现QQ音乐加密文件跨平台播放
QMCDecode技术解析:3种方法实现QQ音乐加密文件跨平台播放 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默…...
别再交智商税了!贵的数码真未必比平价好用,用过才懂全是套路
以前我固执地以为:数码产品一分钱一分货,价格越贵,体验越好,一分溢价一分质感。为了这句执念,前几年闭眼冲各种大牌旗舰、原装顶配、网红高端数码单品,钱包掏空一大半,家里堆了一堆价格不菲、却…...
豆包写的1万字生物论文维普AI率95.7%,用率零8分钟降到3.7%!
很多同学问"维普和万方场景下的降 AI 工具应该怎么选"——这背后是一个被低估的需求场景。 知网是国内最主流的 AIGC 检测平台,但维普和万方使用率仅次于知网——部分学校(特别是部分地方高校、专业类院校)把维普或万方作为官方系…...
TypeScript + CocosCreator:封装一个可复用的微信用户信息管理模块(WechatManager.ts)
TypeScript CocosCreator:构建高可用微信用户信息管理模块 在当今移动游戏开发领域,微信小游戏因其庞大的用户基础和便捷的社交分享能力,已成为开发者不可忽视的平台。然而,微信API的复杂性和平台特殊性常常让开发者陷入重复造轮…...
如何使用Dawn主题打造现代化电商体验:Online Store 2.0核心功能详解
如何使用Dawn主题打造现代化电商体验:Online Store 2.0核心功能详解 【免费下载链接】dawn Shopifys first source available reference theme, with Online Store 2.0 features and performance built-in. 项目地址: https://gitcode.com/gh_mirrors/da/dawn …...
【Flutter for OpenHarmony】第三方库intl 国际化与多语言支持的鸿蒙化适配与实战指南
【Flutter for OpenHarmony】intl 国际化与多语言支持的鸿蒙化适配与实战指南 欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net一、为什么我要做国际化? 我是 IntMainJhy,上海某高校大一计算机专业的学生。说起国际化…...
PX4 Offboard模式避坑指南:从心跳机制到失效保护,让你的外部控制更稳定
PX4 Offboard模式深度解析:心跳机制与失效保护的实战优化 当你的无人机在Offboard模式下突然失控或意外退出时,那种感觉就像在高速公路上突然失去方向盘控制。这不是简单的代码问题,而是对PX4底层机制理解不足的表现。本文将带你深入Offboard…...
手持式雷达测速仪 车辆测速仪
手持式雷达测速仪核心依托多普勒效应工作,测速精准、稳定性强。设备主动向车辆、厂区移动设备等目标物体发射无线电波,当电波接触到移动目标后,部分电波能量会回弹至设备天线。设备通过精准捕捉返回信号的频率差异,智能运算测算出…...
3大核心方案:彻底解决DouyinLiveRecorder中PandaTV录制失败的终极指南
3大核心方案:彻底解决DouyinLiveRecorder中PandaTV录制失败的终极指南 【免费下载链接】DouyinLiveRecorder 可循环值守和多人录制的直播录制软件,支持抖音、TikTok、Youtube、快手、虎牙、斗鱼、B站、小红书、pandatv、sooplive、flextv、popkontv、twi…...
专业级歌词制作工具:歌词滚动姬的技术解析与应用指南
专业级歌词制作工具:歌词滚动姬的技术解析与应用指南 【免费下载链接】lrc-maker 歌词滚动姬|可能是你所能见到的最好用的歌词制作工具 项目地址: https://gitcode.com/gh_mirrors/lr/lrc-maker 在数字音乐时代,精准的歌词同步已成为提…...
