基於貝葉斯的文字分類實戰

2021-09-07 22:50:11 字數 2655 閱讀 4057

2015-03-31

本文介紹如何使用scikit-learn工具包下的貝葉斯工具進行文字分類。

資料集是有8個分類的文字資料集,使用了結巴分詞對每個文字分詞,每個單詞當作特徵,再利用二元詞串構造更多特徵,然後去掉停用詞,去掉出現次數太多和太少的特徵,得到了19630個特徵。取1998個樣本用於訓練,509個用於測試。基於詞袋模型的思路將每個文字轉換為向量,訓練集和測試集分別轉換為矩陣,並用python numpy模組將其儲存為npy格式。這個預處理後的資料集儲存在了

使用樸素貝葉斯分類器劃分郵件

樸素貝葉斯的三個常用模型:高斯、多項式、伯努利

$ ls

test_data.npy test_labels.npy training_data.npy training_labels.npy

$ ipython

>>> import numpy as np

>>> training_data = np.load("training_data.npy") >>> training_data.shape (1998, 19630) >>> training_labels = np.load("training_labels.npy") >>> training_labels array([6, 6, 6, ..., 2, 2, 2]) >>> training_labels.shape (1998,) >>> test_data = np.load("test_data.npy") >>> test_data.shape (509, 19630) >>> test_labels = np.load("test_labels.npy") >>> test_labels.shape (509,)

>>> from sklearn.*****_bayes import multinomialnb

>>> clf =multinomialnb()

>>> clf.fit(training_data, training_labels) # 訓練模型 multinomialnb(alpha=1.0, class_prior=none, fit_prior=true) >>> predict_labels = clf.predict(test_data) # **訓練集 >>> sum(predict_labels == test_labels) # **對了幾個? 454 >>> len(predict_labels) # 訓練樣本個數 509 >>> 454./509 # 正確率 0.8919449901768173 # 效果不錯 >>> from sklearn.metrics import confusion_matrix >>> confusion_matrix(test_labels, predict_labels) # 混淆矩陣 array([[ 39, 0, 0, 1, 0, 1, 0, 0], [ 0, 32, 1, 0, 0, 4, 0, 1], [ 0, 0, 50, 0, 0, 8, 0, 4], [ 0, 0, 1, 44, 0, 10, 0, 0], [ 1, 0, 0, 0, 66, 0, 0, 1], [ 2, 2, 1, 6, 1, 144, 1, 1], [ 0, 0, 0, 0, 0, 2, 25, 0], [ 0, 0, 1, 2, 2, 1, 0, 54]])

>>> from sklearn.*****_bayes import bernoullinb

>>> clf2 = bernoullinb()

>>> clf2.fit(training_data, training_labels) # 訓練模型 bernoullinb(alpha=1.0, binarize=0.0, class_prior=none, fit_prior=true) >>> predict_labels = clf2.predict(test_data) # **訓練集 >>> sum(predict_labels == test_labels) # **對了幾個? 387 >>> 387./509 # 正確率 0.7603143418467584

這個和下面的效果是一樣的:

>>> clf2 = bernoullinb()

>>> clf2.fit(training_data>0, training_labels)

bernoullinb(alpha=1.0, binarize=0.0, class_prior=none, fit_prior=true) >>> predict_labels = clf2.predict(test_data>0) >>> sum(predict_labels == test_labels) 387

>>> from sklearn.*****_bayes import gaussiannb

>>> clf3 = gaussiannb()

>>> clf3.fit(training_data, training_labels) # 訓練模型 gaussiannb() >>> predict_labels = clf3.predict(test_data) # **訓練集 >>> sum(predict_labels == test_labels) # **對了幾個? 375 >>> 375./509 # 正確率 0.7367387033398821

樸素貝葉斯實現的文字分類

參考文章 樸素貝葉斯實現的文字分類原理 coding utf 8 created on 2017 author xyj import jieba import os import random import math deftextprocessing floder path,train size ...

樸樹貝葉斯 sklean 文字分類實現

讀取本地檔案進行分析,分詞中英文都支援,可以換結巴分詞。訓練樣本可以自己定義,目錄結構就是當前專案的 data log資料夾,一級目錄是類別,二級目錄是檔案即可。博主訓練集合 僅供參考 from sklearn.datasets import load files 載入資料集 training da...

基於概率的分類 貝葉斯分類

分類指 乙個給定的無標籤點的類標籤 貝葉斯分類器使用貝葉斯定理來 使得後驗概率最大的類標籤,主要任務是估計每乙個類的聯合概率密度函式,並通過多元正態分步來建模 令訓練資料集 d 包含 n 個 d 維空間中的點xi 也就是說有n個樣本資料,d個指標 令 yi 表示每個點的類標籤,即最終 的類別,其中y...