Scikit-learn Python機器學習 - 分類算法 - 樸素貝葉斯

鋒哥原創的Scikit-learn Python機器學習視頻教程:

https://www.bilibili.com/video/BV11reUzEEPH

課程介紹
?

本課程主要講解基于Scikit-learn的Python機器學習知識,包括機器學習概述,特征工程(數據集,特征抽取,特征預處理,特征降維等),分類算法(K-臨近算法,樸素貝葉斯算法,決策樹等),回歸與聚類算法(線性回歸,欠擬合,邏輯回歸與二分類,K-means算法)等。

Scikit-learn Python機器學習 - 分類算法 - 樸素貝葉斯

什么是貝葉斯公式?

在學習樸素貝葉斯之前,我們必須先掌握貝葉斯公式

這個公式乍一看,你肯定很懵逼,不過不用怕,我們來解釋和分解下,你就懂了。

這些符號是什么意思?

  • P(A|B):在 B 已經發生的情況下,A 發生的概率。這是我們想求的,叫做后驗概率(更新后的信念)。

  • P(B|A):在 A 已經發生的情況下,B 發生的概率。這個通常我們從數據中能得到,叫做似然概率

  • P(A):在不知道任何證據(B)的情況下,A 發生的概率。這是我們最初的看法,叫做先驗概率

  • P(B):B 發生的總概率,叫做證據標準化常量

我們來推導一下貝葉斯公式

P(AB)=P(A)*P(B|A) A和B同時發生的概率等于P(A)乘以P(B|A),這個大家應該能理解。

同理 P(AB)=P(B)*P(A|B) A和B同時發生的概率也等于P(B)乘以P(A|B),相信這個大家也應該能理解。

所以我們能推導出 P(A) * P(B|A) = P(B) * P(A|B) 把右邊的P(B)放到 左邊去 就推導出了 貝葉斯公式。相當大家徹底理解了貝葉斯公式。

貝葉斯公式經典實例-疾病的檢測

這是一個非常著名且反直覺的例子,能完美展示貝葉斯思想的威力。

場景: 假設某種疾病在人群中的發病率是 1%(先驗知識)。現在有一種檢測方法:

  • 如果你確實有病,檢測結果呈陽性(True Positive)的概率是 99%(非常準)。

  • 如果你沒有病,檢測結果呈陽性(False Positive)的概率是 5%(有5%的誤診率)。

問題: 如果一個人去做了檢測,結果是陽性,那么他真正患病的概率到底是多少?

很多人會直覺地認為是99%或者95%,但貝葉斯定理會給我們一個出乎意料的答案。

首先,定義事件:

  • A: 真正患病

  • B: 檢測結果為陽性

我們要求的是:在檢測結果為陽性的情況下,真正患病的概率,即 P(患病 | 陽性),也就是 P(A|B)

根據公式,我們需要知道:

  1. P(A) - 先驗概率: 在不知道檢測結果時,一個人患病的概率 = 發病率 = 1% = 0.01

  2. P(B|A) - 似然概率: 如果一個人真有病,檢測為陽性的概率 = 99% = 0.99

  3. P(B) - 證據: 檢測結果為陽性的總概率。這個需要計算一下。

計算 P(B): 一個人檢測為陽性有兩種可能:

  • 他真有病,并且檢測對了:(0.01 * 0.99)

  • 他其實沒病,但被誤診了:((1 - 0.01) * 0.05)

所以,P(B) = (真有病且測出陽性) + (真沒病但誤診為陽性) P(B) = (0.01 * 0.99) + (0.99 * 0.05) P(B) = 0.0099 + 0.0495 P(B) = 0.0594

現在,將所有值代入貝葉斯公式:

P(A|B) =0.99/0.0594*0.01=0.1667

結論: 即使檢測結果是陽性,你真正患病的概率也只有大約 16.67%

什么是樸素貝葉斯算法?

樸素貝葉斯(Naive Bayes)算法 是一種基于貝葉斯定理的分類方法,廣泛應用于文本分類(如垃圾郵件識別、情感分析等)和其他機器學習領域。它的核心假設是 特征與特征之間條件相互獨立,即在給定類別的條件下,特征之間沒有任何關系或依賴。

樸素貝葉斯公式

在給定數據集的條件下,樸素貝葉斯定理的公式可以用貝葉斯公式推導出來。假設我們有一個樣本

,這些是特征(例如文本中的單詞頻率、圖像的像素等)。目標是通過這些特征來預測一個類別 C 。

樸素貝葉斯的優缺點

優點:

  1. 簡潔高效:樸素貝葉斯方法實現簡單,訓練和預測速度都非常快。

  2. 適合高維數據:對于特征維度很高的數據(如文本分類),樸素貝葉斯特別適用,因為它能有效處理大量的特征。

  3. 良好的性能:在許多實際問題中,樸素貝葉斯能夠取得不錯的分類效果,特別是在數據特征間獨立性假設基本成立的情況下。

缺點:

  1. 條件獨立假設過于簡單:實際數據中,特征之間往往存在依賴關系,而樸素貝葉斯假設特征之間完全獨立,這可能會影響其性能。

  2. 對稀疏數據敏感:如果某個類別中某個特征從未出現過,樸素貝葉斯會計算出零概率,導致預測失敗。為了解決這個問題,通常采用平滑技術(如拉普拉斯平滑)來避免零概率的問題。

樸素貝葉斯算法 在實際應用中有著廣泛的使用,尤其適用于文本分類、垃圾郵件檢測、情感分析、推薦系統等任務。由于其計算簡單、高效并且能夠處理大規模數據,樸素貝葉斯常常成為一些領域中首選的算法之一。

樸素貝葉斯算法具體Scikit-learn實例-新聞文本分類預測

MultinomialNB 是 Scikit-learn 中用于多項式分布數據的樸素貝葉斯分類器,特別適合文本分類等離散特征計數的場景。下面我將詳細解釋其構造方法、參數、屬性和方法。

構造方法:

MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)

參數詳解:

  1. alpha : float, 默認=1.0

  • 含義:平滑參數(拉普拉斯平滑/Lidstone平滑)

  • 作用:防止概率計算中出現零值的問題

  • 詳細解釋

    • 當某個特征在某個類別中從未出現時,概率會變為0,導致整個后驗概率為0

    • alpha=1 是拉普拉斯平滑(加1平滑)

    • 0 < alpha < 1 是Lidstone平滑

    • alpha=0 表示不使用平滑(可能導致過擬合和零概率問題)

  • 數學公式

    • 平滑后的條件概率:P(x_i|y) = (N_{yi} + α) / (N_y + α × n)

    • 其中 N_{yi} 是特征 i 在類別 y 中的出現次數,N_y 是類別 y 中所有特征的出現次數,n 是特征數量

  • 建議值:通常使用1.0,可以通過交叉驗證調整

  1. fit_prior : bool, 默認=True

  • 含義:是否學習類別先驗概率

  • 作用:控制是否使用訓練數據中的類別分布

  • 詳細解釋

    • fit_prior=True:使用訓練數據中的類別頻率作為先驗概率

    • fit_prior=False:使用均勻先驗概率(所有類別概率相等)

  • 數學公式

    • fit_prior=True:P(y) = N_y / N

    • fit_prior=False:P(y) = 1 / k (k為類別數)

  • 適用場景

    • 當訓練集類別分布能代表真實分布時,使用True

    • 當訓練集類別不平衡或不能代表真實分布時,可考慮使用False

  1. class_prior : array-like of shape (n_classes,), 默認=None

  • 含義:類別的先驗概率

  • 作用:手動指定各類別的先驗概率

  • 詳細解釋

    • 如果指定了此參數,fit_prior參數將被忽略

    • 數組長度必須等于類別數量

    • 概率值應該總和為1(但算法會自動歸一化)

  • 示例:對于二分類問題,可以設置class_prior=[0.7, 0.3]

我們來看下具體示例:

from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import accuracy_score, classification_report
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB# 1,加載數據
news = fetch_20newsgroups(subset='all')# 2,數據預處理
X_train, X_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.2)  # 劃分訓練集和測試集tfidfVectorizer = TfidfVectorizer()  # 特征抽取 TF-IDF
X_train_scaled = tfidfVectorizer.fit_transform(X_train)  # fit計算生成模型
X_test_scaled = tfidfVectorizer.transform(X_test)  # # 使用訓練集的參數轉換測試集# 3,創建和訓練LogisticRegression模型
model = MultinomialNB()
model.fit(X_train_scaled, y_train)  # 使用訓練數據擬合(訓練)模型# 4,進行預測并評估模型
y_pred = model.predict(X_test_scaled)  # 在測試集上進行預測
print('模型預測值:', y_pred)
print('正確值   :', y_test)accuracy = accuracy_score(y_test, y_pred)  # 計算準確率
print(f'測試集準確率:{accuracy:.2f}')
print('分類報告:\n', classification_report(y_test, y_pred, target_names=news.target_names))

運行結果:

模型預測值: [ 0 18 11 ...  5 15 10]
正確值   : [ 0 18 11 ...  5  2  9]
測試集準確率:0.85
分類報告:precision    recall  f1-score   supportalt.atheism       0.91      0.73      0.81       170comp.graphics       0.87      0.77      0.81       193comp.os.ms-windows.misc       0.87      0.80      0.83       192
comp.sys.ibm.pc.hardware       0.68      0.88      0.77       181comp.sys.mac.hardware       0.97      0.86      0.91       205comp.windows.x       0.95      0.86      0.90       205misc.forsale       0.90      0.70      0.79       185rec.autos       0.93      0.89      0.91       205rec.motorcycles       0.95      0.96      0.95       206rec.sport.baseball       0.95      0.94      0.94       194rec.sport.hockey       0.91      0.98      0.94       200sci.crypt       0.78      0.97      0.86       200sci.electronics       0.92      0.86      0.89       188sci.med       0.97      0.86      0.92       200sci.space       0.89      0.97      0.93       199soc.religion.christian       0.56      0.99      0.72       203talk.politics.guns       0.69      0.97      0.81       163talk.politics.mideast       0.95      0.97      0.96       205talk.politics.misc       1.00      0.53      0.69       158talk.religion.misc       1.00      0.21      0.35       118accuracy                           0.85      3770macro avg       0.88      0.84      0.84      3770weighted avg       0.88      0.85      0.85      3770Process finished with exit code 0

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

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

相關文章

如何免費股票數據API(第13期):滬深A股《最新分時交易》數據獲取大全:附Python、Java等多語言實戰教程與接口文檔說明

在金融科技迅猛發展的今天&#xff0c;股票量化分析以其嚴謹的科學性和強大的系統性&#xff0c;正日益成為投資領域的主流方法論。任何卓越的量化模型的誕生&#xff0c;都離不開全面、精準、及時的數據支撐。無論是躍動著的實時交易數據、沉淀了歷史規律的K線走勢&#xff0c…

國標GB28181視頻EasyGBS視頻監控平臺:一網聯全城,交通道路可視化、視頻巡檢、應急指揮“三合一”。

一、方案背景?人車暴漲&#xff0c;路口告急&#xff1a;高峰堵、事故慢、取證難&#xff0c;老辦法已拖不動城市交通。破局之道&#xff0c;先看攝像頭——EasyGBS 嚴格遵循 GB28181 國標&#xff0c;一站式完成直播、存儲、檢索、轉碼&#xff0c;把萬千路口秒級搬上云端&am…

單元測試(白盒測試方法)

一、單元測試1.單元測試是對軟件的基本組成單元進行的測試&#xff0c;如函數、類或類的方法。單元測試是對軟件的最小可測試單元&#xff08;即可獨立編譯或匯編的程序模塊&#xff09;進行的測試活動&#xff0c;也稱為模塊測試二、白盒測試方法實例代碼public static int te…

2010-2022 同等學力申碩國考:軟件工程簡答題真題匯總

2010年簡答題 給出數據流圖的定義&#xff0c;并舉例說明數據流圖的四個基本構成成份。 數據流圖&#xff08;Data Flow Diagram, DFD&#xff09;是一種用于描述系統中數據流動和處理過程的圖形工具。它通過直觀的方式展示了系統的輸入數據如何經過一系列處理變換為輸出數據&a…

海外盲盒APP開發:如何用技術重構“驚喜經濟”

當盲盒的神秘感遇上技術的確定性&#xff0c;一場關于消費體驗的革命正在海外市場悄然發生。從概率算法的公平性到AR虛擬開箱的沉浸感&#xff0c;從跨境物流的實時追蹤到多語言支持的無縫切換&#xff0c;海外盲盒APP的開發是一場技術、設計與商業邏輯的深度融合。概率算法&am…

Aosp13 手機sim卡信號格顯示修改

工作中&#xff0c;客戶要求對信號格顯示偏弱不夠友好為由&#xff0c;提出修改&#xff0c;要求使其顯示信號強一些。在此記錄 一問題&#xff1a;修改系統sim卡顯示的信號格&#xff0c;在設備其他配置不變的情況下&#xff0c;使其信號格顯示比原有的要優秀二 …

硬件開發2-匯編2(ARMv7-A)- 裸機開發

一、指令1、b&#xff08;Branch&#xff09;原型&#xff1a;B<c> <label>作用&#xff1a;實現無條件跳轉&#xff0c;常用于不返回的跳轉場景特點&#xff1a;僅跳轉到目標地址&#xff0c;不保存返回地址示例&#xff1a;b reset ;跳轉到reset標號處執…

清源 SCA 社區版更新(V4.2.0)|漏洞前置感知、精準修復、合規清晰,筑牢軟件供應鏈安全防線!

隨著數字化進程加速&#xff0c;軟件供應鏈安全威脅日益復雜&#xff0c;公開漏洞響應滯后、0day 攻擊防不勝防、組件升級編譯失敗、安全與合規風險混雜......這些痛點讓企業安全團隊、運維人員及研發團隊疲于應對。自 2025 年 7 月 1 日安勢清源 SCA 社區版首次正式發布以及在…

氚燃料增殖里程碑:MIT新型BABY包層技術實驗驗證

● 導語 5月20日&#xff0c;麻省理工學院&#xff08;MIT&#xff09;發文稱&#xff0c;BABY實驗首次獲取了氚在裝置內增殖的實測數據&#xff0c;驗證了核心模型&#xff0c;并為未來核聚變電廠的燃料自循環奠定了重要基礎。 原文&#x1f447;&#x1f3fb; https://m…

python+springboot+uniapp微信小程序題庫系統 在線答題 題目分類 錯題本管理 學習記錄查詢系統

目錄技術棧介紹具體實現截圖系統設計研究方法&#xff1a;設計步驟設計流程核心代碼部分展示研究方法詳細視頻演示試驗方案論文大綱源碼獲取/詳細視頻演示技術棧介紹 Django-SpringBoot-php-Node.js-flask 本課題的研究方法和研究步驟基本合理&#xff0c;難度適中&#xff0…

Office轉PDF轉換器v1.0.py

軟件介紹 這是批量將word、Excel、PPT轉換為PDF格式的軟件&#xff0c;不過PPT轉換為PDF需要電腦安裝了office&#xff0c;目前這個我還沒有解決沒有office也可以安裝的方法。 軟件使用 軟件使用是比較簡單的&#xff0c;導入文件/文件夾&#xff0c;在自定義輸出路徑 點擊這…

62_基于深度學習的海洋垃圾檢測識別系統(yolo11、yolov8、yolov5+UI界面+Python項目源碼+模型+標注好的數據集)

目錄 項目介紹&#x1f3af; 功能展示&#x1f31f; 一、環境安裝&#x1f386; 環境配置說明&#x1f4d8; 安裝指南說明&#x1f3a5; 環境安裝教學視頻 &#x1f31f; 二、數據集介紹&#x1f31f; 三、系統環境&#xff08;框架/依賴庫&#xff09;說明&#x1f9f1; 系統環…

深入淺出 全面剖析消息隊列(Kafka,RabbitMQ,RocketMQ 等)

消息隊列 一、概念 消息隊列&#xff08;MQ&#xff09;&#xff1a;一種異步通信機制&#xff0c;通過“消息”的形式讓不同系統或模塊解耦核心思想&#xff1a;發送方&#xff08;生產者Producer&#xff09;只負責發送消息&#xff0c;接收方&#xff08;消費者Consumer&…

Flux Images Generation API 對接說明

本文將介紹一種 Flux Images Generation API 對接說明&#xff0c;它是可以通過輸入自定義參數來生成Flux官方的圖片。 接下來介紹下 Flux Images Generation API 的對接說明。 申請流程 要使用 API&#xff0c;需要先到 Flux Images Generation API 對應頁面申請對應的服務…

CSS布局 - 網格布局 -- 筆記3

目錄網格布局基礎網格網格剖析CSS 提供了一些控制網頁布局的幾個重要工具&#xff0c;這里介紹網格布局。 網格布局 CSS 網格可以定義由行和列組成的二維布局&#xff0c;然后將元素放置到網格中。有些元素可能只占據網格的一個單元&#xff0c;另一些元素則可能占據多行或多…

合約開發完后部署測試

一 編譯npx hardhat compile二 測試npx hardhat test三部署注意部署的時候2.0和3版本有所區別&#xff0c;3.0如下# 部署到本地網絡&#xff08;如已運行 npx hardhat node&#xff09; npx hardhat ignition deploy ./ignition/modules/MyModule.ts --network localhost# 部署…

產品無法正確解析復雜表格和流程圖,有什么替代方案或優化方法?

在真實辦公場景中&#xff0c;文檔內的元素往往不具備標準化和格式化特征&#xff0c;像雙欄表格、無線圖表等復雜元素十分常見。而傳統 OCR 工具在面對這類復雜文檔時&#xff0c;存在明顯的能力短板&#xff1a;它無法準確判斷復雜表格的結構邏輯以及內容的順序邏輯&#xff…

《Html模板》HTML數學題目生成器 - 讓數學練習更簡單(附源碼)

目錄專欄導讀&#x1f9ee; HTML數學題目生成器 - 讓數學練習更簡單項目簡介? 核心功能&#x1f3af; 靈活的運算類型選擇&#x1f4ca; 智能題目生成算法?? 個性化參數設置&#x1f5a8;? 專業打印優化&#x1f3a8; 用戶體驗設計現代化界面交互體驗&#x1f6e0;? 技術實…

Go語言設計模式(七)組合模式

組合模式是指將一組相似對象當做一個單一對象的設計模式.1.組成角色:1.1組件:組合中的對象聲明接口,主要用于訪問和管理其子組件.1.2葉子節點:定義組合中原始對象行為的類.葉子節點表示組合中的葉對象.1.3組合:又稱為容器,存儲子組件并在組件接口中實現與子組件有關的類.1.4客戶…

AI 3D 生成工具知識庫:當前產品格局與測評總結

聚焦于 AI 3D 生成領域的領軍產品、功能比較及實測性能。內容分為產品格局、通用功能、測評系統與基準測試&#xff0c;以及單視圖生成實測結果。所有信息基于腳本分析&#xff0c;并交叉驗證了產品名稱、團隊背景&#xff08;如 VAST AI 的 TripoSR/Meshy 的 Meshy-1、影眸科技…