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]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70213.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70213.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70213.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

過于依賴chatgpt編程會有哪些弊端?

過于依賴ChatGPT編程可能會帶來以下問題&#xff1a; 1. 基礎不扎實&#xff0c;容易“變菜” 以前遇到代碼還會琢磨哪里不懂、怎么改&#xff0c;現在直接復制粘貼&#xff0c;時間長了可能連基本的語法和邏輯都搞不清楚。就像考試總抄答案&#xff0c;真讓你自己寫的時候腦子…

紅隊視角出發的k8s敏感信息收集——Kubernetes API 擴展與未授權訪問

針對 Kubernetes 第三方組件與 Operator 的詳細攻擊視角分析&#xff0c;涵蓋 Service Mesh、Helm Releases 和 Database Operators 的潛在風險及利用方法。 攻擊鏈示例 1. 攻擊者通過未授權的 Tiller 服務部署惡意 Helm Chart → 2. 創建后門 Pod 并橫向移動至 Istio 控制平…

3D與2D機器視覺機械臂引導的區別

3D與2D機器視覺在機械臂引導中的主要區別如下&#xff1a; 數據維度 2D視覺&#xff1a;僅處理平面圖像&#xff0c;提供X、Y坐標信息&#xff0c;無法獲取深度&#xff08;Z軸&#xff09;數據。 3D視覺&#xff1a;處理三維空間數據&#xff0c;提供X、Y、Z坐標及物體的姿態…

日常開發中,使用JSON.stringify來實現深拷貝的坑

使用JSON.stringify的方式來實現深拷貝的弊端 弊端一&#xff1a;無法拷貝NaN、Infinity、undefined這類值 無法拷貝成功的原因&#xff1a; 對于JSON來說&#xff0c;它支持的數據類型只有null、string、number、boolean、Object、Array&#xff0c;所以對于它不支持的數據類…

AI大模型(如GPT、BERT等)可以通過自然語言處理(NLP)和機器學習技術,顯著提升測試效率

在軟件測試中,AI大模型(如GPT、BERT等)可以通過自然語言處理(NLP)和機器學習技術,顯著提升測試效率。以下是幾個具體的應用場景及對應的代碼實現示例: 1. 自動生成測試用例 AI大模型可以根據需求文檔或用戶故事自動生成測試用例。 代碼示例(使用 OpenAI GPT API): …

【Linux】Ubuntu Linux 系統——Node.js 開發環境

??大家好&#xff0c;我是練小杰&#xff0c;今天星期五了&#xff0c;同時也是2025年的情人節&#xff0c;今晚又是一個人的舉個爪子&#xff01;&#xff01; &#x1f642; 本文是有關Linux 操作系統中 Node.js 開發環境基礎知識&#xff0c;后續我將添加更多相關知識噢&a…

Dockerfile 編寫推薦

一、導讀 本文主要介紹在編寫 docker 鏡像的時候一些需要注意的事項和推薦的做法。 雖然 Dockerfile 簡化了鏡像構建的過程&#xff0c;并且把這個過程可以進行版本控制&#xff0c;但是不正當的 Dockerfile 使用也會導致很多問題。 docker 鏡像太大。如果你經常使用鏡像或者…

mysql 學習16 視圖,存儲過程,存儲函數,觸發器

視圖&#xff0c; 存儲過程&#xff0c; 存儲函數 觸發器

SpringBoot+Vue+數據可視化的動漫妝造服務平臺(程序+論文+講解+安裝+調試+售后等)

感興趣的可以先收藏起來&#xff0c;還有大家在畢設選題&#xff0c;項目以及論文編寫等相關問題都可以給我留言咨詢&#xff0c;我會一一回復&#xff0c;希望幫助更多的人。 系統介紹 在當今數字化高速發展的時代&#xff0c;動漫產業迎來了前所未有的繁榮&#xff0c;動漫…

rtsp rtmp 跟 http 區別

SDP 一SDP介紹 1. SDP的核心功能 會話描述&#xff1a;定義會話的名稱、創建者、時間范圍、連接地址等全局信息。媒體協商&#xff1a;明確媒體流的類型&#xff08;如音頻、視頻&#xff09;、傳輸協議&#xff08;如RTP/UDP&#xff09;、編碼格式&#xff08;如H.264、Op…

Containerd 簡介、安裝與使用指南

1. Containerd 簡介 Containerd 是一個開源的容器運行時&#xff0c;專注于管理容器的生命周期。它最初是 Docker 的一部分&#xff0c;后來被分離出來成為一個獨立的項目&#xff0c;并成為 Kubernetes 和其他容器平臺的底層運行時。Containerd 提供了容器的創建、啟動、停止…

開源語音克隆項目 OpenVoice V2 本地部署

#本機環境 WIN11 I5 GPU 4060ti 16G 內存 32G #開始 git clone https://github.com/myshell-ai/OpenVoice.git conda create -n opvenv python3.9 -y conda activate opvenv pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/…

【Prometheus】prometheus結合domain_exporter實現域名監控

?? 歡迎大家來到景天科技苑?? ???? 養成好習慣,先贊后看哦~???? ?? 作者簡介:景天科技苑 ??《頭銜》:大廠架構師,華為云開發者社區專家博主,阿里云開發者社區專家博主,CSDN全棧領域優質創作者,掘金優秀博主,51CTO博客專家等。 ??《博客》:Python全…

rustdesk編譯修改名字

最近&#xff0c;我用Rust重寫了一個2W行C代碼的linux內核模塊。在此記錄一點經驗。我此前沒寫過內核模塊&#xff0c;認識比較疏淺&#xff0c;有錯誤歡迎指正。 為什么要重寫&#xff1f; 這個模塊2W行代碼量看起來不多&#xff0c;卻在線上時常故障&#xff0c;永遠改不完。…

在linux系統中安裝Anaconda,并使用conda

系統 : ubuntu20.04 顯卡&#xff1a;NVIDIA GTX1650 目錄 安裝Anaconda第一步&#xff1a;下載合適版本的Anconda1. 查看自己Linux的操作系統及架構命令&#xff1a;uname -a2. 下載合適版本的Anconda 第二步&#xff1a;安裝Aanconda1. 為.sh文件設置權限2. 執行.sh文件2.1 .…

(前端基礎)HTML(一)

前提 W3C:World Wide Web Consortium&#xff08;萬維網聯盟&#xff09; Web技術領域最權威和具有影響力的國際中立性技術標準機構 其中標準包括&#xff1a;機構化標準語言&#xff08;HTML、XML&#xff09; 表現標準語言&#xff08;CSS&#xff09; 行為標準&#xf…

【ISO 14229-1:2023 UDS診斷(會話控制0x10服務)測試用例CAPL代碼全解析③】

ISO 14229-1:2023 UDS診斷【會話控制0x10服務】_TestCase03 作者&#xff1a;車端域控測試工程師 更新日期&#xff1a;2025年02月15日 關鍵詞&#xff1a;UDS診斷、0x10服務、診斷會話控制、ECU測試、ISO 14229-1:2023 TC10-003測試用例 用例ID測試場景驗證要點參考條款預期…

TDengine 客戶端連接工具 taos-Cli

簡介工具獲取運行命令行參數 基礎參數高級參數 數據導出/導入 數據導出數據導入 執行 SQL 腳本使用小技巧 TAB 鍵自動補全設置字符列顯示寬度其它 錯誤代碼表 簡介 TDengine 命令行工具&#xff08;以下簡稱 TDengine CLI&#xff09;是用戶操作 TDengine 實例并與之交互最簡…

Git高級用法

GIT高級用法及實戰案例解析 前言 作為現代開發者的必備工具&#xff0c;Git的基礎操作&#xff08;add/commit/push&#xff09;早已深入人心。但當面對復雜場景時&#xff0c;掌握Git的高級用法將極大提升開發效率。本文將深入解析Git的高級功能&#xff0c;并配合真實場景案…

9個用于測試自動化的最佳AI測試工具(2024)

選擇一款優質的基于生成式AI人工智能的測試工具能夠確保測試過程的準確性和效率&#xff0c;從而加速整個軟件測試周期。相反&#xff0c;設計不佳的測試工具可能無法發現錯誤&#xff0c;并可能存在安全問題。它們可能產生誤報或漏報&#xff0c;誤導開發與測試團隊&#xff0…