03_樸素貝葉斯分類

描述

樸素貝葉斯分類器與線性模型非常相似的一種分類器,但它的訓練速度往往更快。這種高效率所付出的代價是,樸素貝葉斯模型的泛化能力要比線性分類器(如LogisticRegression 和 LinearSVC)稍差。

樸素貝葉斯模型高效的原因:它通過單獨查看每個特征來學習參數,并從每個特征中收集簡單的類別統計數據。

scikit-learn 中實現了三種樸素貝葉斯分類器:GaussianNB、BernoulliNB 和 MultinomialNB。GaussianNB 可 應 用 于 任 意 連 續 數 據, 而BernoulliNB 假定輸入數據為二分類數據,MultinomialNB 假定輸入數據為計數數據(即每個特征代表某個對象的整數計數,比如一個單詞在句子里出現的次數)。BernoulliNB 和MultinomialNB 主要用于文本數據分類。

分類器

GaussianNB

高斯樸素貝葉斯(GaussianNB)是一種基于貝葉斯定理的概率分類器,特別適用于連續數據或特征變量符合高斯分布的情況。在機器學習中,GaussianNB經常被用于分類任務,如文本分類、垃圾郵件檢測等。

當特征變量是連續的,它們的先驗概率通常假設為高斯分布。這意味著在給定類別中,特征的值遵循正態分布。高斯樸素貝葉斯利用每個特征的均值和方差來估計每個類別的條件概率。對于給定的特征值,GaussianNB遵循以下公式:

P ( x i = X i ( t e s t ) ∣ Y = C k ) = ( 1 / s q r t ( 2 ? p i ? σ k 2 ) ) ? e x p ( ? ( X i ( t e s t ) ? μ k ) 2 / ( 2 ? σ k 2 ) ) P(x_i = X_i(test) | Y = C_k) = (1 / sqrt(2 * pi * σ_k^2)) * exp(- (X_i(test) - μ_k)^2 / (2 * σ_k^2)) P(xi?=Xi?(test)Y=Ck?)=(1/sqrt(2?pi?σk2?))?exp(?(Xi?(test)?μk?)2/(2?σk2?))

μ k μ_k μk? σ k 2 σ_k^2 σk2?分別是正態分布的期望和方差。GaussianNB的目標是最大化 P ( x i = X i ( t e s t ) ∣ Y = C k ) P(x_i = X_i(test) | Y = C_k) P(xi?=Xi?(test)Y=Ck?),以確定樣本更接近哪個類別的值。

from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_digitsdigits = load_digits() # 是一種8x8的圖像像素數據,目的識別數字
X_train,X_test,Y_train,Y_test = train_test_split(digits.data,digits.target,random_state=42)
gnb = GaussianNB().fit(X_train,Y_train)print(gnb.score(X_train,Y_train),gnb.score(X_test,Y_test)) # 打印訓練、測試得分

var_smoothing 參數:為了保證估計的穩定性,在估計方差時會將所有特征的方差中最大的方差以一定比例添加到估計的方差中。這個比例由var_smoothing參數控制,默認值為1e-9 (目的是排除極大值對模型的干擾)

BernoulliNB

伯努利樸素貝葉斯分類器是一種基于樸素貝葉斯原理的機器學習算法,專門用于處理二項分布數據。在伯努利模型中,特征的條件概率分布假設滿足二項分布,即每個特征都是二分類的,可以用布爾變量表示。這種分類器適用于離散數據,尤其是二進制或布爾特征的情況。

伯努利樸素貝葉斯分類器在處理文本數據時表現良好,尤其是在文檔較短的數據集上。與多項式樸素貝葉斯分類器相比,伯努利樸素貝葉斯更注重特征的存在與否,而不是特征的出現頻率。

binarize參數:用于將樣本特征二值化(映射為布爾值)的閾值。如果為None,則假定輸入已經由二分類向量組成。

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import BernoulliNBtrain_text=['I love this book','This book is great','I hate this book']
train_label =[1,1,0] # 1 表示正面評論,0表示負面評論vectorizer = CountVectorizer(binary=True) # 分詞向量器
train_feature = vectorizer.fit_transform(train_text)
test_feature = vectorizer.transform(['I like this book','This book is terrible'])clf = BernoulliNB().fit(train_feature,train_label)
clf.predict(test_feature)

MultinomialNB

多項式樸素貝葉斯分類器適用于具有離散特征的分類(例如,文本分類的詞頻)。多項式分布通常需要整數特征計數。

MultinomialNB在文本分類領域有著廣泛的應用,如垃圾郵件檢測、情感分析、新聞分類等。它特別適合處理高維稀疏數據,如文本數據,并且對噪聲數據有一定的魯棒性?1。此外,MultinomialNB還可以用于多標簽分類任務,即一個樣本可能屬于多個類別?。

注意:MultinomialNB的訓練集數據不能為負數

# 文本處理方式與BernoulliNB 的例子相識
# 這里舉一個鳶尾花的例子
import pandas as pd
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNBiris = pd.read_csv(r'..\..\seaborn-data\iris.csv') # 加載數據
iris_class_dic = {'setosa':0, 'versicolor':1, 'virginica':2}
iris_class = ['setosa', 'versicolor', 'virginica']
iris_tz_array=iris.select_dtypes(include='number')
iris_class_array=iris['species'].map(iris_class_dic)X_train,X_test,Y_train,Y_test = train_test_split(iris_tz_array,iris_class_array,random_state=42)
mnb = MultinomialNB().fit(X_train,Y_train)
print(mnb.score(X_train,Y_train),mnb.score(X_test,Y_test)) #打印得分(結果還可以)
iris_class[int(mnb.predict([[5,2.8,1,0.3]])[0])] # 預測新類型

優點、缺點和參數

MultinomialNB 和 BernoulliNB 都只有一個參數 alpha,用于控制模型復雜度。alpha 的工作原理是,算法向數據中添加 alpha 這么多的虛擬數據點,這些點對所有特征都取正值。這可以將統計數據“平滑化”(smoothing)。alpha 越大,平滑化越強,模型復雜度就越低。算法性能對 alpha 值的魯棒性(健壯性系統在受到外部擾動或內部參數攝動等不確定性因素干擾時,系統扔保持其結構和功能穩定。)相對較好,也就是說,alpha 值對模型性能并不重要。但調整這個參數通常都會使精度略有提高。

GaussianNB 主要用于高維數據,而另外兩種樸素貝葉斯模型則廣泛用于稀疏計數數據,比如文本。MultinomialNB 的性能通常要優于 BernoulliNB,特別是在包含很多非零特征的數據集(即大型文檔)上。

樸素貝葉斯模型的訓練和預測速度都很快,訓練過程也很容易理解。該模型對高維稀疏數據的效果很好,對參數的魯棒性也相對較好。樸素貝葉斯模型是很好的基準模型,常用于非常大的數據集,在這些數據集上即使訓練線性模型可能也要花費大量時間。

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

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

相關文章

Cabot:開源免費的 PagerDuty 替代品,讓系統監控更簡單高效

在當今復雜的IT環境中,及時發現并解決系統問題至關重要。而Cabot作為一款開源免費的監控工具,為開發和運維團隊提供了強大而簡單的解決方案。本文將詳細介紹Cabot的核心功能、優勢以及快速部署方法,幫助你更好地保障系統穩定性。 Cabot簡介 Cabot是一個功能類似PagerDuty的開…

AI-02a5a5.神經網絡-與學習相關的技巧-權重初始值

權重的初始值 在神經網絡的學習中,權重的初始值特別重要。實際上,設定什么樣的權重初始值,經常關系到神經網絡的學習能否成功。 不要將權重初始值設為 0 權值衰減(weight decay):抑制過擬合、提高泛化能…

TCP首部格式及三次握手四次揮手

TCP協議詳解:首部格式與連接管理 一、TCP首部格式 TCP首部最小20字節,最大60字節,包含以下字段: | 源端口號(16bit) | 目的端口號(16bit) | | 序列號(32bit) | | 確認號(32bit) | | 數據偏移(4bit)| 保留(6bit) |U|A|P|R|S|…

Pytorch的Dataloader使用詳解

PyTorch 的 DataLoader 是數據加載的核心組件,它能高效地批量加載數據并進行預處理。 Pytorch DataLoader基礎概念 DataLoader基礎概念 DataLoader是PyTorch基礎概念 DataLoader是PyTorch中用于加載數據的工具,它可以:批量加載數據&#xf…

HTML、CSS 和 JavaScript 基礎知識點

HTML、CSS 和 JavaScript 基礎知識點 一、HTML 基礎 1. HTML 文檔結構 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.…

亞遠景-對ASPICE評估體系的深入研究與分析

一、ASPICE評估體系的定義與背景 ASPICE&#xff08;Automotive Software Process Improvement and Capability Determination&#xff09;即汽車軟件過程改進及能力測定模型&#xff0c;是由歐洲20多家主要汽車制造商共同制定的&#xff0c;專門針對汽車行業的軟件開發過程評…

灰度圖像和RGB圖像在數據大小和編碼處理方式差別

技術背景 好多開發者對灰度圖像和RGB圖像有些認知差異&#xff0c;今天我們大概介紹下二者差別。灰度圖像&#xff08;Grayscale Image&#xff09;和RGB圖像在編碼處理時&#xff0c;數據大小和處理方式的差別主要體現在以下幾個方面&#xff1a; 1. 通道數差異 圖像類型通道…

從爬蟲到網絡---<基石9> 在VPS上沒搞好Docker項目,把他卸載干凈

1.停止并刪除所有正在運行的容器 docker ps -a # 查看所有容器 docker stop $(docker ps -aq) # 停止所有容器 docker rm $(docker ps -aq) # 刪除所有容器如果提示沒有找到容器&#xff0c;可以忽略這些提示。 2.刪除所有鏡像 docker images # 查看所有鏡像 dock…

Centos 上安裝Klish(clish)的編譯和測試總結

1&#xff0c;介紹 clish是一個類思科命令行補全與執行程序&#xff0c;它可以幫助程序員在nix操作系統上實現功能導引、命令補全、命令執行的程序。支持&#xff1f;&#xff0c;help, Tab按鍵。本文基于klish-2.2.0介紹編譯和測試。 2&#xff0c;klish的編譯 需要安裝的庫&…

理解計算機系統_并發編程(3)_基于I/O復用的并發(二):基于I/O多路復用的并發事件驅動服務器

前言 以<深入理解計算機系統>(以下稱“本書”)內容為基礎&#xff0c;對程序的整個過程進行梳理。本書內容對整個計算機系統做了系統性導引,每部分內容都是單獨的一門課.學習深度根據自己需要來定 引入 接續上一帖理解計算機系統_并發編程(2)_基于I/O復用的并發…

系統可靠性分析:指標解析與模型應用全覽

以下是關于系統可靠性分析中可靠性指標、串聯系統與并聯系統、混合系統、系統可靠性模型的相關內容&#xff1a; 一、可靠性指標 可靠度&#xff1a;是系統、設備或元件在規定條件和規定時間內完成規定功能的概率。假設一個系統由多個部件組成&#xff0c;每個部件都有其自身…

數字高程模型(DEM)公開數據集介紹與下載指南

數字高程模型&#xff08;DEM&#xff09;公開數據集介紹與下載指南 數字高程模型&#xff08;Digital Elevation Model, DEM&#xff09;廣泛應用于地理信息系統&#xff08;GIS&#xff09;、水文模擬、城市規劃、環境分析、災害評估等領域。本文系統梳理了主流的DEM公開數據…

Python+大模型 day01

Python基礎 計算機系統組成 基礎語法 如:student_num 4.標識符要做到見名知意,增強代碼的可讀性 關鍵字 系統或者Python定義的,有特殊功能的字符組合 在學習過程中,文件名沒有遵循標識符命名規則,是為了按序號編寫文件方便查找復習 但是,在開發中,所有的Python文件名稱必須…

C++引用編程練習

#include <iostream> using namespace std; double vals[] {10.1, 12.6, 33.1, 24.1, 50.0}; double& setValues(int i) { double& ref vals[i]; return ref; // 返回第 i 個元素的引用&#xff0c;ref 是一個引用變量&#xff0c;ref 引用 vals[i] } // 要調用…

機密虛擬機的威脅模型

本文將介紹近年興起的機密虛擬機&#xff08;Confidential Virtual Machine&#xff09;技術所旨在抵御的威脅模型&#xff0c;主要關注內存機密性&#xff08;confidentiality&#xff09;和內存完整性&#xff08;integrity&#xff09;兩個方面。在解釋該威脅可能造成的問題…

【Rust trait特質】如何在Rust中使用trait特質,全面解析與應用實戰

?? 歡迎大家來到景天科技苑?? &#x1f388;&#x1f388; 養成好習慣&#xff0c;先贊后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者簡介&#xff1a;景天科技苑 &#x1f3c6;《頭銜》&#xff1a;大廠架構師&#xff0c;華為云開發者社區專家博主&#xff0c;…

Simulink模型回調

Simulink 模型回調函數是一種特殊的 MATLAB 函數&#xff0c;可在模型生命周期的特定階段自動執行。它們允許用戶自定義模型行為、執行初始化任務、驗證參數或記錄數據。以下是各回調函數的詳細說明&#xff1a; 1. PreLoadFcn 觸發時機&#xff1a;Simulink 模型加載到內存之…

FPGA:Xilinx Kintex 7實現DDR3 SDRAM讀寫

在Xilinx Kintex 7系列FPGA上實現對DDR3 SDRAM的讀寫&#xff0c;主要依賴Xilinx提供的Memory Interface Generator (MIG) IP核&#xff0c;結合Vivado設計流程。以下是詳細步驟和關鍵點&#xff1a; 1. 準備工作 硬件需求&#xff1a; Kintex-7 FPGA&#xff08;如XC7K325T&…

Python爬蟲實戰:研究進制流數據,實現逆向解密

1. 引言 1.1 研究背景與意義 在現代網絡環境中,數據加密已成為保護信息安全的重要手段。許多網站和應用通過二進制流數據傳輸敏感信息,如視頻、金融交易數據等。這些數據通常經過復雜的加密算法處理,直接分析難度較大。逆向工程進制流數據不僅有助于合法的數據獲取與分析,…

Java Spring Boot項目目錄規范示例

以下是一個典型的 Java Spring Boot 項目目錄結構規范示例&#xff0c;結合了分層架構和模塊化設計的最佳實踐&#xff1a; text 復制 下載 src/ ├── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── myapp/ │…