首頁 >後端開發 >Python教學 >Python中的樸素貝葉斯實例

Python中的樸素貝葉斯實例

王林
王林原創
2023-06-09 23:36:06968瀏覽

Python是一種簡單易學的程式語言,擁有豐富的科學計算庫和資料處理工具。其中,樸素貝葉斯(Naive Bayes)演算法作為一種經典的機器學習方法,在Python語言中也擁有廣泛的應用。本文將結合實例,介紹Python中樸素貝葉斯的使用方法與步驟。

  1. 樸素貝葉斯介紹

樸素貝葉斯演算法是一種基於貝葉斯定理的分類演算法,它的核心思想是透過已知訓練數據集的特徵,來推論新資料的分類結果。在實際應用中,樸素貝葉斯演算法常用於文字分類、垃圾郵件過濾、情緒分析等場景。

樸素貝葉斯演算法的特徵在於它假設各個特徵之間是互相獨立的,這種假設在實際情況中往往不成立,因此樸素貝葉斯演算法有「樸素」之稱。儘管有這種假設,樸素貝葉斯在短文本分類等問題上的表現仍然很好。

  1. 使用樸素貝葉斯分類器

在Python中,使用樸素貝葉斯分類器的步驟可以歸納為以下幾個:

2.1 準備資料

首先需要準備待分類的訓練資料和測試資料。這些數據可以是文字、圖片、音訊等形式,但需要將其轉換為能夠被電腦理解的形式。在文字分類問題中,通常需要將文字轉換為向量表示。

2.2 訓練模型

接下來,需要使用訓練資料集來建立樸素貝葉斯分類器。 Python中常用的樸素貝葉斯分類器有三種:

  • GaussianNB:適用於連續資料的分類。
  • BernoulliNB:適用於二元資料的分類。
  • MultinomialNB:適用於多元資料的分類。

以文字分類為例,可以使用sklearn函式庫提供的TfidfVectorizer類別將文字轉換為向量表示,並使用MultinomialNB分類器進行訓練。

2.3 測試模型

訓練完成後,需要使用測試資料集來評估模型的效能。通常情況下,測試資料集和訓練資料集是獨立的。要注意的是,在測試過程中不能使用訓練資料集中的資料。可以使用sklearn函式庫提供的accuracy_score函數來計算模型的準確率。

  1. 範例:基於樸素貝葉斯的文本分類

為了示範樸素貝葉斯分類器的實際應用,本文以基於樸素貝葉斯的文本分類為例。

3.1 準備資料

首先,從網路上找到兩個文字資料集,分別為“體育新聞”和“科技新聞”,每個資料集包含1000個文字。將兩個資料集放到不同的資料夾中,並將這些文字分別標註為「體育」和「科技」。

3.2 使用sklearn函式庫進行分類

接下來,使用sklearn函式庫提供的樸素貝葉斯分類器進行分類。

(1)導入相關函式庫

from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score
import os

(2)讀取文字資料及其標註

def read_files(path):
    text_list = []
    label_list = []
    for root, dirs, files in os.walk(path):
        for file in files:
            file_path = os.path.join(root, file)
            with open(file_path, 'r', encoding='utf-8') as f:
                text = ''.join(f.readlines())
                text_list.append(text)
                if '体育' in file_path:
                    label_list.append('体育')
                elif '科技' in file_path:
                    label_list.append('科技')
    return text_list, label_list

(3)將文字轉換為向量表示

def text_vectorizer(text_list):
    vectorizer = TfidfVectorizer()
    X = vectorizer.fit_transform(text_list)
    return X, vectorizer

(4)訓練模型並返回準確率

def train(text_list, label_list):
    X, vectorizer = text_vectorizer(text_list)
    y = label_list
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    clf = MultinomialNB()
    clf.fit(X_train, y_train)
    y_pred = clf.predict(X_test)
    acc = accuracy_score(y_test, y_pred)
    return clf, vectorizer, acc

(5)測試模型

def predict(clf, vectorizer, text):
    X = vectorizer.transform(text)
    y_pred = clf.predict(X)
    return y_pred[0]

3.3 結果分析

運行上述程式碼,可以得到分類器的準確率為0.955。在進行實際分類時,只需要將待分類文字輸入predict函數,即可傳回其所屬類別。例如,輸入一則文字「iPhone 12終於發布了!」即可回到「科技」類別。

  1. 總結

樸素貝葉斯演算法作為一種簡單而有效的分類演算法,在Python中也有著廣泛的應用。本文介紹了樸素貝葉斯分類器的使用方法和步驟,並以基於樸素貝葉斯的文本分類為例,示範了分類器的實際應用。在實際應用過程中,還需要對資料進行預處理、特徵選擇等操作,以提高分類器的準確率。

以上是Python中的樸素貝葉斯實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn