OpenCV機器學習(6)樸素貝葉斯分類器(Naive Bayes Classifier)cv::ml::NormalBayesClassifier的使用

  • 操作系統:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 編程語言:C++11

算法描述

cv::ml::NormalBayesClassifier 是 OpenCV 機器學習模塊中的一部分,用于實現樸素貝葉斯分類器(Naive Bayes Classifier)。這種分類器基于貝葉斯定理,并假設特征之間相互獨立(即“樸素”的假設),盡管這個假設在實際應用中往往不成立,但樸素貝葉斯分類器在很多情況下仍然表現良好,特別是在文本分類、垃圾郵件過濾等領域。

主要特點

  • 簡單且快速:訓練和預測過程都非常高效。
  • 適用于多分類問題:可以處理兩個或更多類別的分類任務。
  • 基于概率的決策:為每個類別計算后驗概率,并選擇具有最高概率的類別作為預測結果。

常用成員函數

以下是一些常用的 cv::ml::NormalBayesClassifier 類成員函數:

  • 創建模型實例
    • Ptr create():創建一個新的 NormalBayesClassifier 模型實例。
  • 訓練模型
    • train(const Ptr& trainData, int flags=0):使用提供的訓練數據進行訓練。
    • train(InputArray samples, int layout, InputArray responses):另一種形式的訓練函數,直接接受樣本和響應矩陣作為輸入。
  • 預測
    • predict(InputArray samples, OutputArray results=noArray(), int flags=0) const:對新樣本進行預測,并返回每個樣本的類別標簽或概率值(取決于標志)。
  • 保存與加載模型
    • save(const String& filename):將模型保存到文件。
    • load(const String& filename):從文件加載模型。

使用步驟

  • 準備數據:準備好你的訓練數據集,包括特征向量及其對應的標簽。
  • 初始化 NormalBayesClassifier 模型:使用 cv::ml::NormalBayesClassifier::create() 創建一個新的 NormalBayesClassifier 模型實例。
  • 訓練模型:調用 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 );// 確保數據和標簽是浮點數類型if ( samples.type() != CV_32F ){samples.convertTo( samples, CV_32F );}if ( responses.type() != CV_32S ){  // 注意:對于分類,通常使用整數類型標簽responses.convertTo( responses, CV_32S );}// 創建并配置 NormalBayesClassifier 模型Ptr< NormalBayesClassifier > nb_model = NormalBayesClassifier::create();// 訓練模型bool ok = nb_model->train( samples, ROW_SAMPLE, responses );if ( ok ){// 保存模型nb_model->save( "nb_model.yml" );// 對新樣本進行預測Mat sample     = ( Mat_< float >( 1, 2 ) << 1.6, 0.7 );float response = nb_model->predict( sample );cout << "The predicted response for the sample is: " << response << endl;}else{cerr << "Training failed!" << endl;}return 0;
}

運行結果

The predicted response for the sample is: 1

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

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

相關文章

LLaVA-CoT: Let Vision Language Models Reason Step-by-Step論文解讀

文章目錄 前言一、摘要一、引言二、文獻綜述1. Visual reasoning with large language models2. Chain-of-thought in large language models3. Inference time scaling 三、方法1. Enhancing Reasoning Capability through Structured Thinking1. Reasoning Stages2. Data Pre…

Linux 和 Windows 區別

1. 文件組織 (1)目錄結構 Linux:采用**單一根目錄(/)**結構,所有文件和設備都掛載在這個目錄下。 典型目錄: /home/(用戶目錄)/etc/(配置文件)/bin/(系統可執行文件)/dev/(設備文件)/mnt/(掛載點)Windows:采用多個驅動器(C:\, D:\),每個分區是一個獨立的…

java基礎語知識(8)

類之間的關系 在類之間&#xff0c;最常見的關系有&#xff1a; 依賴&#xff08;“uses-a”&#xff09;;聚合&#xff08;“has-a”&#xff09;;繼承&#xff08;“is-a”&#xff09;。 依賴&#xff1a;一種使用關系&#xff0c;即一個類的實現需要另一個類的協助&#x…

Linux系統中常見的詞GNU是什么意思?

GNU 是 “GNU’s Not Unix” 的遞歸縮寫&#xff0c;它是一個自由軟件項目&#xff0c;旨在創建一個完全自由的操作系統。這個名字反映了GNU項目的核心理念&#xff1a;它試圖創建一個類Unix的系統&#xff0c;但不是Unix本身。 GNU 項目由 理查德斯托曼&#xff08;Richard S…

安卓burp抓包,bypass ssl pinning

好久好久沒有發東西了。主要是懶。。。 這幾天在搞apk滲透&#xff0c;遇到了burp無法抓包問題&#xff0c;覺得可以寫下來。 問題描述 1. 一臺安卓手機&#xff0c;裝了面具&#xff0c;可以拿到root 2. 電腦上有burp&#xff0c;設置代理 3.手機和電腦連同一個網段&…

抖音試水AI分身;騰訊 AI 戰略調整架構;百度旗下小度官宣接入DeepSeek...|網易數智日報

抖音試水AI分身&#xff0c;字節旗下AI智能體平臺扣子已與抖音打通&#xff0c;相關功能內測中 2月19日消息&#xff0c;鈦媒體App獨家獲悉&#xff0c;字節旗下AI智能體開發平臺扣子&#xff08;Coze&#xff09;已與抖音打通&#xff0c;抖音創作者可在扣子智能體平臺打造AI分…

Python爬蟲實戰:爬取豆瓣電影

目錄 引言 1. 爬蟲基礎 1.1 什么是爬蟲&#xff1f; 1.2 Python爬蟲常用庫 2. 實戰&#xff1a;抓取豆瓣電影Top250 2.1 安裝依賴庫 2.2 發送HTTP請求 ?編輯 2.3 解析HTML ?編輯 2.4 存儲數據 2.5 完整代碼 3. 進階&#xff1a;處理分頁和動態內容 3.1 抓取多頁…

請談談 Vue 中的響應式原理,如何實現?

一、Vue2響應式原理&#xff1a;Object.defineProperty的利與弊 實現原理&#xff1a; // 數據劫持核心實現 function defineReactive(obj, key, val) {const dep new Dep(); // 依賴收集容器Object.defineProperty(obj, key, {get() {if (Dep.target) { // 當前Watcher實例…

第6章:基于LangChain如何開發Agents,附帶客戶支持智能體示例

本文主要介紹了 LangChain4j 中的 Agent&#xff08;代理&#xff09; 概念&#xff0c;以及如何使用 LangChain4j 構建代理系統&#xff0c;重點提供了一個客戶支持系統的智能體樣例 代理&#xff08;Agents&#xff09;| LangChain4j 注意&#xff1a; 請注意&#xff0c;“A…

Android 中使用 FFmpeg 進行音視頻處理

1. FFmpeg 基礎知識 1.1 什么是 FFmpeg? FFmpeg 是一個開源的多媒體處理工具,支持音視頻的編碼、解碼、轉碼、裁剪、合并、濾鏡、流媒體等功能。它是一個命令行工具,支持多種音視頻格式和編解碼器。1.2 為什么在 Android 中使用 FFmpeg? Android 自帶的多媒體 API(如 Med…

Matplotlib 高級圖表繪制與交互式可視化(ipywidgets)

目錄: ipywidgets 介紹 1. 什么是 ipywidgets 直接開始: 動態調整正弦波頻率 隨機散點圖 啟用交互式模式 使用滑塊和下拉菜單調整圖表樣式 使用布局管理器創建復雜界面 使用動畫創建動態圖表 最后: 綜合示例:動態儀表盤 ipywidgets 介紹 1. 什么是 ipywidgets i…

【FAQ】HarmonyOS SDK 閉源開放能力 —Live View Kit (1)

1.問題描述&#xff1a; 客戶端創建實況窗后&#xff0c;通過Push kit更新實況窗內容&#xff0c;這個過程是自動更新的還是客戶端解析push消息數據后填充數據更新&#xff1f;客戶端除了接入Push kit和創建實況窗還需要做什么工作&#xff1f; 解決方案&#xff1a; 通過Pu…

uvm中的激勵是如何發送出去的

在UVM中&#xff0c;Sequence生成的激勵&#xff08;Transaction&#xff09;通過以下協作流程發送到Driver并最終驅動到DUT&#xff0c;其核心機制如下&#xff1a; --------------- --------------- ------------ ----- | Sequence | → | Seque…

SpringAI系列 - ToolCalling篇(二) - 如何設置應用側工具參數ToolContext(有坑)

目錄 一、引言二、集成ToolContext示例步驟1: 在`@Tool`標注的工具方法中集成`ToolConext`參數步驟2:`ChatClient`運行時動態設置`ToolContext`參數三、填坑一、引言 在使用AI大模型的工具調用機制時,工具參數都是由大模型解析用戶輸入上下文獲取的,由大模型提供參數給本地…

【RabbitMQ業務冪等設計】RabbitMQ消息是冪等的嗎?

在分布式系統中&#xff0c;RabbitMQ 自身不直接提供消息冪等性保障機制&#xff0c;但可通過業務邏輯設計和技術組合實現消息處理的冪等性。以下是 8 種核心實現方案及最佳實踐&#xff1a; 一、消息唯一標識符 (Message Deduplication) 原理 每條消息攜帶全局唯一ID&#xff…

網絡可靠性要求

目錄 一、背景介紹 二、環路引發的危害 1、廣播風暴 2、MAC 地址表震蕩 三、STP生成樹 1、STP的作用 2、STP工作過程 3、根橋選舉 4、根端口選舉 5、指定端口選舉 6、BPDU報文分析 7、計時器 8、端口狀態轉化 總結 一、背景介紹 為了提高網絡可靠性&#xff0c;交換網絡…

《STL 六大組件之容器探秘:深入剖析 string》

目錄 一、string 類簡介二、string 類的常用接口1. 構造函數&#xff08;constructor function&#xff09;2. 與容量相關的接口&#xff08;capacity&#xff09;3. 與迭代器有關的接口&#xff08;iterator&#xff09;4. 與元素訪問有關的接口&#xff08;element access&am…

Unreal5從入門到精通之在編輯器中更新 UserWidgets

前言 在虛幻中創建越來越復雜和靈活的 UserWidget 藍圖時,一個問題是它們在編輯器中的外觀與它們在游戲中的最終外觀可能有很大不同。 庫存面板示例 假設你想創建一個通用的庫存顯示小部件。我們可以在整個 UI 中使用它,無論我們需要在哪里顯示某些內容。 標題,描述所顯示…

計算機網絡-OSI七層參考模型與數據封裝,網絡安全零基礎入門到精通實戰教程!

目錄 一、網絡 1、網絡的定義 2、網絡的分類 3、網絡的作用 4、網絡的數據傳輸方式 5、網絡的數據通訊方式 二、OSI七層參考模型 1、網絡參考模型定義 2、分層的意義 3、分層與功能 4、TCP\IP五層模型 三、參考模型的協議 1、物理層 2、數據鏈路層 3、網絡層 4…

Python正則替換終極指南:用re.sub玩轉字符串魔法

Python正則替換終極指南&#xff1a;用re.sub玩轉字符串魔法 一、為什么re.sub是文本處理的瑞士軍刀&#xff1f; 在Python的re模塊中&#xff0c;re.sub()的周下載量突破5800萬次&#xff08;2025年PyPI數據&#xff09;&#xff0c;它實現了&#xff1a; &#x1f4cd; 模…