貝葉斯分類器

貝葉斯分類器

1. 引言

貝葉斯分類器是一種基于貝葉斯定理的分類算法,它利用特征之間的關系和類別的先驗概率來進行分類。貝葉斯分類器在文本分類、垃圾郵件過濾、醫學診斷等領域有著廣泛的應用。

貝葉斯分類算法是統計學的一種分類方法,是一類利用概率統計知識進行分類的方法。這類算法均以貝葉斯定理為基礎,統稱為貝葉斯分類。貝葉斯的核心思想為可以概括為:先驗概率+數據=后驗概率。(一般而言,先驗概率就是對于數據所在領域的歷史經驗,貝葉斯學派大膽假設先驗分布的模型,如正態分布、伯努利分布等)

在所有的機器學習分類算法當中,樸素貝葉斯和其他絕大多數的分類算法不同。對于大多數的分類算法,比如決策樹、邏輯回歸、支持向量機等,他們都是判別方法,也就是直接學習出特征輸出Y和特征X之間的關系,要么是決策函數 Y = f ( X ) Y=f(X) Y=f(X),要么是條件概率分布 P ( Y ∣ X ) P(Y|X) P(YX),但是樸素貝葉斯是生成方法,也就是直接找出特征輸出Y和特征X之間的聯合分布 P ( X , Y ) P(X, Y) P(X,Y),然后利用 P ( Y ∣ X ) = P ( X , Y ) P ( X ) P(Y|X) = \frac{P(X,Y)}{P(X)} P(YX)=P(X)P(X,Y)?得到。

2. 預備知識

為了理解貝葉斯分類器,我們需要了解一些基本的概念:

  • 貝葉斯定理:用于計算在觀測到數據后,類別的后驗概率。
  • 先驗概率:在觀測到數據之前,對類別的概率分布的估計。
  • 條件概率:在給定某個條件下,某個事件發生的概率。

2.1 貝葉斯定理

貝葉斯定理是一個關于條件概率的公式,又稱為“逆概率”或“后驗概率”。它表述了當我們已知某個條件下的觀察結果時,我們可以利用這些信息來更新對一個假設的概率估計。其公式為:
P ( H ∣ E ) = P ( E ∣ H ) P ( H ) P ( E ) P(H|E) = \frac{P(E|H)P(H)}{P(E)} P(HE)=P(E)P(EH)P(H)?
其中, P ( H ∣ E ) P(H|E) P(HE)表示在發生E的情況下, H H H發生的概率; P ( E ∣ H ) P(E|H) P(EH)表示在發生H的情況下,E發生的概率; P ( H ) P(H) P(H)表示H發生的先驗概率, P ( E ) P(E) P(E)表示E發生的概率。

2.2 最大似然估計

最大似然估計(Maximum Likelihood Estimation, MLE),也稱為極大似然估計,是用來估計概率模型參數的一種方法。它可以在已知隨機變量屬于某種概率分布的前提下,利用隨機變量的一些觀測值估計出分布的參數值。

對于函數 p ( x ∣ θ ) p(x|\theta) p(xθ),輸入有兩個: x x x表示某個具體數據, θ \theta θ表示模型的參數。

  • 如果 θ \theta θ已知, x x x是變量,則該函數稱為概率函數(probability function),描述對于不同的樣本點 x x x,其出現的概率是多少;
  • 如果 x x x已知, θ \theta θ是變量,該函數稱為似然函數(likelihood function),描述對于不同的模型參數,出現 x x x這個樣本點的概率是多少。

極大似然估計假設樣本集中的所有樣本都是獨立同分布的,樣本集合為 D D D,以此來估計參數向量 θ \theta θ。記已知的樣本集為: D = x 1 , x 2 , . . . , x N D={x_1, x_2, ..., x_N} D=x1?,x2?,...,xN?
似然函數(likelihood function):聯合概率密度函數 p ( D ∣ θ ) p(D|\theta) p(Dθ)稱為 D = { x 1 , . . . , x N } D=\{x_1, ..., x_N\} D={x1?,...,xN?}關于 θ \theta θ的似然函數。
L ( θ ) = p ( D ∣ θ ) = p ( x 1 , . . . , x N ∣ θ ) = ∏ i = 1 N p ( x i ∣ θ ) L(\theta) = p(D|\theta)=p(x_1,...,x_N|\theta)=\prod_{i=1}^N p(x_i|\theta) L(θ)=p(Dθ)=p(x1?,...,xN?θ)=i=1N?p(xi?θ)
值得注意的是,這里的 p ( x 1 , . . . , x N ∣ θ ) = ∏ i = 1 N p ( x i ∣ θ ) p(x_1,...,x_N|\theta)=\prod_{i=1}^N p(x_i|\theta) p(x1?,...,xN?θ)=i=1N?p(xi?θ)的前提是屬性之間相互獨立,這是樸素貝葉斯所作出的假設。

3. 算法介紹

貝葉斯分類器模型表述為
P ( c ∣ x ) = P ( x , c ) P ( x ) P(c|x)=\frac{P(x,c)}{P(x)} P(cx)=P(x)P(x,c)?

基于貝葉斯定理, P ( c ∣ x ) P(c|x) P(cx)可寫為
P ( c ∣ x ) = P ( c ) P ( x ∣ c ) P ( x ) P(c|x)=\frac{P(c)P(x|c)}{P(x)} P(cx)=P(x)P(c)P(xc)?
其中, P ( c ) P(c) P(c)是類“先驗”概率, P ( x ∣ c ) P(x|c) P(xc)是樣本 x x x相對于類標記c的類條件概率,或者稱之為“似然”;對于每個類別來說,分母都是相同的,因而在求解時可以只比較分子部分。

樸素貝葉斯模型的關鍵在于計算給定樣本時的每個類別的后驗概率,后驗概率最大的類別即為輸出類別。

D c D_c Dc?表示訓練集 D D D中第c個類別樣本組成的集合,假設這些樣本是獨立同分布的,則參數 θ c \theta_c θc?對于數據集 D c D_c Dc?的似然是

P ( D c ∣ θ c ) = ∏ x ∈ D c P ( x ∣ θ c ) P(D_c|\theta_c)=\prod _{x\in D_c}P(x|\theta_c) P(Dc?θc?)=xDc??P(xθc?)
θ c \theta_c θc?進行極大似然估計,就是去尋找能夠最大化似然 P ( D c ∣ θ c ) P(D_c|\theta_c) P(Dc?θc?)的參數值 θ c ^ \hat{\theta_c} θc?^?,直觀上看,極大似然估計是試圖在 θ c \theta_c θc?的所有可能取值中,找到一個能夠使得數據出現的“可能性”最大的值,也即
θ c ^ = a r g m a x θ c P ( D c ∣ θ c ) \hat{\theta_c} = argmax_{\theta_c}P(D_c|\theta_c) θc?^?=argmaxθc??P(Dc?θc?)
估計類條件概率的一種常用策略是先假定其具有某種確定的概率分布形式,再根據訓練樣本對概率分布的參數進行估計。
在連續屬性的情形下,假設概率密度函數 p ( x ∣ c ) ~ N ( μ c , σ c 2 ) p(x|_c)\sim N(\mu_c, \sigma_c^2) p(xc?)N(μc?,σc2?),則參數 μ c \mu_c μc? σ c 2 \sigma_c^2 σc2?的極大似然估計為
μ c ^ = 1 D c ∑ x ∈ D c x σ c 2 ^ = 1 D c ∑ x ∈ D c ( x ? μ c ^ ) ( x ? μ c ^ ) T \hat{\mu_c} = \frac{1}{D_c}\sum_{x\in D_c}x \\ \hat{\sigma_c^2} = \frac{1}{D_c}\sum_{x\in D_c}(x-\hat{\mu_c})(x-\hat{\mu_c}) ^T μc?^?=Dc?1?xDc??xσc2?^?=Dc?1?xDc??(x?μc?^?)(x?μc?^?)T
也就是說,通過極大似然法得到的正態分布均值就是樣本均值,方差就是 ( x ? μ c ^ ) ( x ? μ c ^ ) T (x-\hat{\mu_c})(x-\hat{\mu_c}) ^T (x?μc?^?)(x?μc?^?)T的均值。

歸納為步驟:

  1. 計算每個類別的先驗概率。
  2. 對于每個特征,計算在給定類別的條件下的類條件概率。
  3. 根據貝葉斯定理計算后驗概率。
  4. 根據后驗概率選擇類別。

4. 代碼調用

下面是一個簡單的Python代碼實現貝葉斯分類器的示例:

from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 加載數據集
data = load_iris()
X = data.data
y = data.target# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 創建貝葉斯分類器模型
model = GaussianNB()# 在訓練集上訓練模型
model.fit(X_train, y_train)# 在測試集上進行預測
y_pred = model.predict(X_test)# 計算準確率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

參考文獻

  1. https://mp.weixin.qq.com/s/AQnMNOJznAbnTy5QnALaCw
  2. https://blog.csdn.net/yinyu19950811/article/details/78060267
  3. 周志華《機器學習》

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

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

相關文章

vite打包構建時環境變量(env)生成可配置的js文件

現實需求 在vite開發過程中,一些變量可以放在.env(基礎公共部分變量).env.dev(開發環境)、.env.production(生產環境)中管理,通常分成開發和生產兩個不同的配置文件管理&#xff0c…

方法區的垃圾收集

方法區的垃圾收集 主要回收兩部分內容廢棄的常量和不再使用的類型 廢棄的常量: 假如一個字符串“java”曾經進入常量池中,但是當前系統又沒有任何一個字符串對象的值是“java”,換句話說,已經沒有任何字符串對象引用常量池中的“…

三天學會阿里分布式事務框架Seata-應用seata AT模式方案解決分布式事務問題

鋒哥原創的分布式事務框架Seata視頻教程: 實戰阿里分布式事務框架Seata視頻教程(無廢話,通俗易懂版)_嗶哩嗶哩_bilibili實戰阿里分布式事務框架Seata視頻教程(無廢話,通俗易懂版)共計10條視頻&…

dolphinscheduler海豚調度(四)釘釘告警

在之前的博文中,我們已經介紹了DolphinScheduler海豚調度的基本概念和工作流程,以及Shell任務和SQL任務的實踐。今天,讓我們來學習DolphinScheduler中的另一個重要功能:釘釘告警。 釘釘群添加機器人 在釘釘群添加機器人&#xf…

SpringBoot 使用@Async 注解實現異步任務

前言 在現代應用程序中,異步編程已經成為了必備的技能。異步編程使得應用程序可以同時處理多個請求,從而提高了應用程序的吞吐量和響應速度。在 SpringBoot 中,我們可以使用 Async 注解來實現異步編程。本文將介紹 Async 注解的使用方法和注…

從http到websocket

閱讀本文之前,你最好已經做過一些websocket的簡單應用 從http到websocket HTTP101HTTP 輪詢、長輪詢和流化其他技術1. 服務器發送事件2. SPDY3. web實時通信 互聯網簡史web和httpWebsocket協議1. 簡介2. 初始握手3. 計算響應健值4. 消息格式5. WebSocket關閉握手 實…

Redis 緩存數據庫

redis 中文網 http://www.redis.cn/ redis.net.cn 兩種數據庫陣營 1.關系型數據庫 MySQL Oracle DB2 SQL Server 等基于二維表結構存儲數據的文件型磁盤數據庫 缺點: 因為數據庫的特征是磁盤文件型數據庫, 就造成每次查詢都有IO操作, 海量數據查詢速度較慢 2.NoSQL數據庫 …

C++中的常對象、常函數

一、常對象的概念 常對象就是用 const 修飾的對象,常對象必須初始化且不可被修改。 //以日期類對象為例 const Date d1(2004, 5, 25); 二、常對象只能調用常函數 常對象只能調用常函數,不能調用其他函數。 以日期類為例,類中有成員函數P…

lv20 QT 常用控件 2

1 QT GUI 類繼承簡介 布局管理器 輸出控件 輸入控件 按鈕 容器 2 按鈕示例 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QCheckBox> #include <QLineEdit> #include <QPushButton>class Widget : public QWidget {Q_OBJECTpublic…

SLAM面試代碼題:點云去畸變

題目 假設已知一幀點云每個點的時間戳和它的位姿,要求對點云去畸變 解題思路 定義一個點云的struct利用時間戳,把一幀內每個時刻的點云都變換到這一幀的起始時間處位置使用線性插值,旋轉使用球面非線性插值// 點云去畸變 #include <iostream> #include <Eigen/Co…

擊鼓傳花游戲

有N個小朋友圍成一圈玩擊鼓傳花游戲&#xff0c;將小朋友編號為1-N&#xff0c;從1號開始傳花&#xff0c;每次傳3個&#xff0c;拿到花的小朋友表演節目后退出。任給N&#xff0c;問最后一個表演的小朋友編號是多少&#xff1f;例如&#xff1a;輸入5&#xff0c;從1號開始傳花…

基于springboot+vue的共享汽車管理系統(前后端分離)

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

Linux中的echo命令

echo?命令是在Linux系統中常用的用于輸出文本或變量內容的命令。它可以將指定的文本或變量的值輸出到終端上。下面是關于 ?echo?命令的使用說明和示例&#xff1a; 1. 基本語法&#xff1a; echo [選項] [字符串或變量] 2. 使用示例&#xff1a; 輸出文本內容&#xff1…

3d模型版本轉換器注意事項---模大獅模型網

在使用3D模型版本轉換器時&#xff0c;有一些注意事項可以幫助您順利完成模型轉換并避免不必要的問題&#xff1a; 數據完整性&#xff1a;在進行模型轉換之前&#xff0c;確保您的原始3D模型文件沒有損壞或缺失數據。損壞的文件可能導致轉換器無法正常處理或輸出錯誤的結果。 …

力扣經典題目解析--滑動窗口最大值

原題地址: . - 力扣&#xff08;LeetCode&#xff09; 給你一個整數數組 nums&#xff0c;有一個大小為 k 的滑動窗口從數組的最左側移動到數組的最右側。你只可以看到在滑動窗口內的 k 個數字。滑動窗口每次只向右移動一位。 返回 滑動窗口中的最大值 。 示例 1&#xff1a;…

小程序自定義組件

自定義組件 1. 創建-注冊-使用組件 組件介紹 小程序目前已經支持組件化開發&#xff0c;可以將頁面中的功能模塊抽取成自定義組件&#xff0c;以便在不同的頁面中重復使用&#xff1b; 也可以將復雜的頁面拆分成多個低耦合的模塊&#xff0c;有助于代碼維護。 開發中常見的…

111790-37-5 ,生物素-氨基,一種生物素化合物,可與-NHS、-COOH反應

您好&#xff0c;歡迎來到新研之家 文章關鍵詞&#xff1a;111790-37-5 &#xff0c;生物素-氨基&#xff0c;生物素氨基&#xff0c;Biotin-NH2&#xff0c;Biotin-amine 一、基本信息 【產品簡介】&#xff1a;Biotin-NH2 provides a convenient biotinylation method for…

OSCP靶場--DVR4

OSCP靶場–DVR4 考點(1.windows&#xff1a;路徑遍歷獲取私鑰getshell 2.ssh shell中runas切換用戶) 1.nmap掃描 ┌──(root?kali)-[~/Desktop] └─# nmap -sV -sC -p- 192.168.161.179 --min-rate 2000 Starting Nmap 7.92 ( https://nmap.org ) at 2024-02-29 07:14 EST…

Springboot接口參數校驗

在設計接口時我們通常需要對接口中的非法參數做校驗&#xff0c;以降低在程序運行時因為一些非法參數而導致程序發生異常的風險&#xff0c;例如登錄的時候需要校驗用戶名密碼是否為空&#xff0c;創建用戶的時候需要校驗郵件、手機號碼格式是否準確。如果在代碼中對接口參數一…

系統集成Prometheus+Grafana

根據產品需求在自己的系統中添加一個系統監控的頁面&#xff0c;其中有主機信息的顯示&#xff0c;也有一些業務信息的顯示。調研后的方案是 主機信息通過Prometheus采集和存儲&#xff0c;業務信息通過自己系統的調度任務統計后存儲在Mysql中&#xff0c;使用Grafana對接Prome…