機器學習算法應用——樸素貝葉斯分類器

樸素貝葉斯分類器

樸素貝葉斯分類器(Naive Bayes Classifier)是一種基于貝葉斯定理和特征條件獨立假設的分類方法。它適用于分類任務,特別是文本分類、垃圾郵件識別等領域。

原理

樸素貝葉斯分類器基于以下兩個主要假設:

  1. 特征條件獨立:給定類別,特征之間是相互獨立的。這意味著一個特征的出現不依賴于其他特征的出現。雖然這在現實世界中往往不成立,但這個假設大大簡化了計算,使得樸素貝葉斯分類器在實際應用中表現良好。
  2. 貝葉斯定理:用于計算給定特征時某個類別出現的概率。

貝葉斯定理

對于兩個隨機變量X和Y,貝葉斯定理可以表示為:

[ P(Y|X) = \frac{P(X|Y) \cdot P(Y)}{P(X)} ]

其中:

  • ( P(Y|X) ) 是給定X時Y的后驗概率。
  • ( P(X|Y) ) 是給定Y時X的條件概率。
  • ( P(Y) ) 是Y的先驗概率。
  • ( P(X) ) 是X的邊際概率。

在分類任務中,X代表特征向量,Y代表類別。

樸素貝葉斯分類器的步驟

  1. 數據準備:收集帶有類別標簽的訓練數據。
  2. 計算先驗概率:計算每個類別的先驗概率 ( P(Y) )。
  3. 計算條件概率:對于每個類別和每個特征,計算給定類別時該特征的條件概率 ( P(X_i|Y) )。由于樸素貝葉斯假設特征條件獨立,這些計算可以獨立進行。
  4. 分類:對于新的、未標記的數據點,計算其在每個類別下的后驗概率 ( P(Y|X) )。選擇具有最大后驗概率的類別作為預測結果。

類型

  • 高斯樸素貝葉斯:當特征連續并且假設它們遵循高斯(正態)分布時使用。
  • 多項式樸素貝葉斯:用于離散特征,常用于文本分類任務,其中特征表示文檔中單詞的出現次數。
  • 伯努利樸素貝葉斯:也用于離散特征,但假設特征是二元的(例如,單詞是否出現)。

優點

  • 實現簡單且高效。
  • 對缺失和噪聲數據相對魯棒。
  • 在小數據集上表現良好。

缺點

  • 特征條件獨立假設往往不成立,這可能會影響分類性能。
  • 需要大量的訓練數據來估計概率。
  • 對于輸入數據的預處理很敏感(例如,文本中的停用詞和詞干提取)。

應用

樸素貝葉斯分類器在文本分類、垃圾郵件過濾、情感分析、新聞分類等領域有廣泛應用。

  1. 數據

Universal Bank 是一家業績快速增長的銀行。為了增加貸款業務,該銀行探索將儲蓄客戶轉變成個人貸款客戶的方式。銀行收集了5000條客戶數據,包括客戶特征(age、experience、income、family、 CCAvg、education、Zip Code)、客戶對上一次貸款營銷活動的響應( Personal Loan )、客戶和銀行的關系( mortgage,securities account.online.CD account、credit card)共13個特征,目標值是 Personal Loan,即客戶是否接受了個人貸款。

ID

Age

Experience

Income

ZIP?Code

賬戶

年齡

經驗

收入

郵政編碼

Family

CCAvg

Education

Mortgage

Securities Account

家庭成員人數

信用卡月平均消費

教育水平

按揭貸款數目

證券賬戶

CD Account

Online

CreditCard

Personal Loan

定期存款

在線

信用卡

個人貸款

(目標值)

在5000個客戶中,僅480個客戶接受了提供給他們的個人貸款。

數據實例:

IDAgeExperienceIncomeZIP CodeFamilyCCAvgEducationMortgagePersonal LoanSecurities AccountCD AccountOnlineCreditCard
1251499110741.61001000
24519349008931.51001000
339151194720111000000
43591009411212.72000000
53584591330412000001
63713299212140.4215500010
75327729171121.52000010
85024229394310.33000001
93510819008930.6210400010
103491809302318.93010000
1165391059471042.43000000
12295459027730.12000010
1348231149310623.83001000
145932409492042.52000010
15674111291741121001000
166030229505411.53000011
1738141309501044.7313410000
184218819430542.41000000
1946211939160428.13010000
205528219472010.52001001
215631259401540.9211100010
2257276390095323000010
23295629027711.2126000010
244418439132020.7116301000
2536111529552123.9115900001
264319299430530.519700010
274016839506440.23000000

注意:數據集中的編號(ID)和郵政編碼(ZIP CODE)特征因為在分類模型中無意義,所以在數據預處理階段將它們刪除。

  1. 使用高斯樸素貝葉斯分類器(特征為連續型變量)對數據進行分類
  • 使用留出法劃分數據集,訓練集:測試集為7:3
  • #1. 讀入數據
    df = pd.read_csv('universalbank.csv')
    y = df['Personal Loan']
    X = df.drop(['ID', 'ZIP Code', 'Personal Loan'], axis = 1)
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state = 0)
    
  • 使用高斯樸素貝葉斯分類器對訓練集進行訓練
  • #2. 訓練高斯樸素貝葉斯模型
    gnb = GaussianNB()
    gnb.fit(X_train, y_train)

  • 使用訓練好的模型對測試數據集進行預測并輸出預測結果模型準確度
  • # 3. 評估模型
    y_pred = gnb.predict(X_test)
    print('測試數據的預測結果:', y_pred)acc = gnb.score(X_test, y_test)
    print('GaussianNB模型的準確度:',acc)
    

  1. 使用多項式樸素貝葉斯(特征為離散型變量)對數據進行分類
  • 篩選出數據中的離散型特征
  • # 1. 讀入數據
    y = df['Personal Loan']
    X = df[['Family', 'Education', 'Securities Account', 
    'CD Account', 'Online', 'CreditCard']]              #只選用6個特征
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 0)
    

  • 使用留出法劃分數據集,訓練集:測試集為7:3。
  • X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 0)

  • 使用多項式樸素貝葉斯分類器對訓練集進行訓練
  • #2. 訓練多項式樸素貝葉斯模型
    mnb = MultinomialNB()
    mnb.fit(X_train, y_train)
  • 使用訓練好的模型對測試數據集進行預測并輸出預測結果模型準確度
  • y_pred = mnb.predict(X_test)
    print('測試數據的預測結果:', y_pred)acc = mnb.score(X_test, y_test)
    print('MultinomialNB模型的準確度:',acc)
    

代碼:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.naive_bayes import MultinomialNB#1. 讀入數據
df = pd.read_csv('universalbank.csv')
y = df['Personal Loan']
X = df.drop(['ID', 'ZIP Code', 'Personal Loan'], axis = 1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state = 0)#2. 訓練高斯樸素貝葉斯模型
gnb = GaussianNB()
gnb.fit(X_train, y_train)# 3. 評估模型
y_pred = gnb.predict(X_test)
print('測試數據的預測結果:', y_pred)acc = gnb.score(X_test, y_test)
print('GaussianNB模型的準確度:',acc)# 1. 讀入數據
y = df['Personal Loan']
X = df[['Family', 'Education', 'Securities Account', 
'CD Account', 'Online', 'CreditCard']]              #只選用6個特征
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 0)#2. 訓練多項式樸素貝葉斯模型
mnb = MultinomialNB()
mnb.fit(X_train, y_train)y_pred = mnb.predict(X_test)
print('測試數據的預測結果:', y_pred)acc = mnb.score(X_test, y_test)
print('MultinomialNB模型的準確度:',acc)

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

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

相關文章

JS_ES6(1)

作用域鏈: 作用域鏈是底層變量查找的機制:當函數執行時,優先查找當前函數作用域中有無需要用到的變量,如果找不到,逐級查找父級,直到全局 > 嵌套關系形成作用域鏈,同一作用域鏈從小到大查找…

taro3兼容支付寶/微信小程序的自定義拖拽排序組件

描述:列表可以完成拖拽排序 此組件是根據支付寶原生文檔改編成taro-vue3的形式,只保留了拖拽的部分,其他功能都去除了,測試下來可以兼容支付寶和微信小程序。 支付寶原生文檔: https://opendocs.alipay.com/support/…

BGP(border gateway protocol)邊界網關協議初識篇

BGP它是一種路徑矢量協議,用于決定數據包在互聯網中的最佳路徑。 1、工作原理: 自治系統(AS)間路由: BGP主要用于連接不同自治系統之間的路由器,其中每個自治系統(AS)代表一組具有共同路由的網…

編譯 fdk-aac

文章目錄 關于 fdk-aac編譯 fdk-aac在 FFMpeg 編譯中啟用 關于 fdk-aac A standalone library of the Fraunhofer FDK AAC code from Android. github : https://github.com/mstorsjo/fdk-aac代碼托管 : https://sourceforge.net/projects/opencore-am…

最新巨量X-Bogus、_signature參數逆向分析與算法還原

文章目錄 1. 寫在前面2. 接口分析3. 斷點分析4. 扣代碼補環境5. 數據解密 【🏠作者主頁】:吳秋霖 【💼作者介紹】:擅長爬蟲與JS加密逆向分析!Python領域優質創作者、CSDN博客專家、阿里云博客專家、華為云享專家。一路…

# 從淺入深 學習 SpringCloud 微服務架構(十六)

從淺入深 學習 SpringCloud 微服務架構(十六) 一、SpringCloudStream:自定義消息通道 1、在子工程 stream_product (子模塊)中,創建 自定義的消息通道類 MyProcessor.java /*** spring_cloud_demo\stream_product…

JavaEE概述 + Maven

文章目錄 一、JavaEE 概述二、工具 --- Maven2.1 Maven功能 倉庫 坐標2.2 Maven之項目構建2.3 Maven之依賴管理 三、插件 --- Maven Helper 一、JavaEE 概述 Java SE、JavaEE: Java SE:指Java標準版,適用于各行各業,主要是Java…

【負載均衡式在線OJ項目day5】OJ服務模塊概要

前言 經過四天的努力已經完成了編譯運行這個大模塊,今天將要進入OJ服務模塊設計,該模塊的本質就是建立一個小型網站 一.功能 為用戶提供題目列表頁面為用戶提供網站首頁(用題目列表充當首頁)為用戶提供指定題目的編輯頁面為用戶提供提交代碼判題功能&a…

FFmpeg常用API與示例(二)—— 解封裝與轉封裝

封裝層 封裝格式(container format)可以看作是編碼流(音頻流、視頻流等)數據的一層外殼,將編碼后的數據存儲于此封裝格式的文件之內。 封裝又稱容器,容器的稱法更為形象,所謂容器,就是存放內容的器具,飲料是內容&…

【QT學習】補充:qt使用已經存在的類

1.右鍵項目--》添加現有文件 注意:不是添加新文件!!! 2.添加配置

掌握Android Fragment開發之魂:Fragment的深度解析(上)

Fragment是Android開發中用于構建動態和靈活界面的基石。它不僅提升了應用的模塊化程度,還增強了用戶界面的動態性和交互性,允許開發者將應用界面劃分為多個獨立、可重用的部分,每個部分都可以獨立于其他部分進行操作。本文將從以下幾個方面深…

信息系統項目管理師0102:可行性研究的內容(7項目立項管理—7.2項目可行性研究—7.2.1可行性研究的內容)

點擊查看專欄目錄 文章目錄 7.2項目可行性研究7.2.1可行性研究的內容1.技術可行性分析2.經濟可行性分析3.社會效益可行性分析4.運行環境可行性分析5.其他方面的可行性分析記憶要點總結7.2項目可行性研究 可行性研究是在項目建議書被批準后,從技術、經濟、社會和人員等方面的條…

OpenWrt項目UCI配置介紹

UCI(Unified Configuration Interface)是 OpenWrt 項目中使用的一種配置管理系統。它旨在為嵌入式設備提供一個統一且易于理解的配置接口。UCI 主要用于簡化 OpenWrt 系統的各種配置過程,使得管理網絡、服務和其他系統參數變得更加方便。 1 …

String的substring()方法導致的內存泄露問題

JDK 6的實現 String(int offset, int count, char value[]) {this.value value;this.offset offset;this.count count; }public String substring(int beginIndex, int endIndex) {//check boundaryreturn new String(offset beginIndex, endIndex - beginIndex, value);…

r語言數據分析案例-北京市氣溫預測分析與研究

一、選題背景 近年來,人類大量燃燒煤炭、天然氣等含碳燃料導致溫室氣 體過度排放,大量溫室氣體強烈吸收地面輻射中的紅外線,造 成溫室效應不斷累積,使得地球溫度上升,造成全球氣候變暖。 氣象溫度的預測一直以來都是…

[算法][差分][延遲相差][leetcode]2960. 統計已測試設備

題目地址: https://leetcode.cn/problems/count-tested-devices-after-test-operations/description/ 解法一:暴力解法 class Solution {public int countTestedDevices(int[] batteryPercentages) {//特殊條件判斷if(null batteryPercentages || ba…

JavaScript DOM 對元素進行的操作

DOM(Document Object Model)是一種用于訪問和操作HTML和XML文檔的編程接口。JavaScript通過DOM提供的方法和屬性可以對網頁的元素進行各種操作,比如修改元素的內容、樣式、屬性等。 下面是一些常見的對DOM元素的操作以及相應的代碼示例&…

@RequestMapping path正則規范

RequestMapping 注解是 Spring MVC 中用于映射 HTTP 請求的注解之一。它可以用于處理各種 HTTP 請求,包括 GET、POST、PUT、DELETE 等,并且可以指定請求的路徑、請求方法、請求參數等信息。 在使用 RequestMapping 注解時,可以使用正則表達式…

51單片機入門:串口通信

串行通信的初步認識 通信方式分類 1、按照數據傳送方式: 并行通信:通信時數據的各個位同時傳送,可以實現字節為單位的通信。 但是通信線多,占用資源多,成本高。 串行通信:一次只能發送一位&#xff0c…

python把png轉成jpg

在Python中,你可以使用PIL(Python Imaging Library,也稱為Pillow)庫來讀取PNG圖片并將其轉換為JPG格式。下面是一個簡單的示例代碼: from PIL import Image# 打開PNG圖片 png_image Image.open(input.png)# 保存為JP…