Python是一種簡單易學的程式語言,擁有豐富的科學計算庫和資料處理工具。其中,樸素貝葉斯(Naive Bayes)演算法作為一種經典的機器學習方法,在Python語言中也擁有廣泛的應用。本文將結合實例,介紹Python中樸素貝葉斯的使用方法與步驟。
樸素貝葉斯演算法是一種基於貝葉斯定理的分類演算法,它的核心思想是透過已知訓練數據集的特徵,來推論新資料的分類結果。在實際應用中,樸素貝葉斯演算法常用於文字分類、垃圾郵件過濾、情緒分析等場景。
樸素貝葉斯演算法的特徵在於它假設各個特徵之間是互相獨立的,這種假設在實際情況中往往不成立,因此樸素貝葉斯演算法有「樸素」之稱。儘管有這種假設,樸素貝葉斯在短文本分類等問題上的表現仍然很好。
在Python中,使用樸素貝葉斯分類器的步驟可以歸納為以下幾個:
2.1 準備資料
首先需要準備待分類的訓練資料和測試資料。這些數據可以是文字、圖片、音訊等形式,但需要將其轉換為能夠被電腦理解的形式。在文字分類問題中,通常需要將文字轉換為向量表示。
2.2 訓練模型
接下來,需要使用訓練資料集來建立樸素貝葉斯分類器。 Python中常用的樸素貝葉斯分類器有三種:
以文字分類為例,可以使用sklearn函式庫提供的TfidfVectorizer類別將文字轉換為向量表示,並使用MultinomialNB分類器進行訓練。
2.3 測試模型
訓練完成後,需要使用測試資料集來評估模型的效能。通常情況下,測試資料集和訓練資料集是獨立的。要注意的是,在測試過程中不能使用訓練資料集中的資料。可以使用sklearn函式庫提供的accuracy_score函數來計算模型的準確率。
為了示範樸素貝葉斯分類器的實際應用,本文以基於樸素貝葉斯的文本分類為例。
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終於發布了!」即可回到「科技」類別。
樸素貝葉斯演算法作為一種簡單而有效的分類演算法,在Python中也有著廣泛的應用。本文介紹了樸素貝葉斯分類器的使用方法和步驟,並以基於樸素貝葉斯的文本分類為例,示範了分類器的實際應用。在實際應用過程中,還需要對資料進行預處理、特徵選擇等操作,以提高分類器的準確率。
以上是Python中的樸素貝葉斯實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!