樸素貝葉斯

樸素貝葉斯中的樸素一詞的來源是假設各特徵之間相互獨立。這一假設使得樸素貝葉斯算法變得簡單,但有時會犧牲必定的分類準確率。樸素貝葉斯常常會用於文本分類,它的思想是基於條件機率和聯合機率:python

條件機率:事件A在另一個事件B已經發生的條件下發生的機率算法

記做:P(A|B)
特性:P(A1,A2|B) = P(A1|B)P(A2|B)
注意:此條件機率的成立,是因爲A1,A2相互獨立的結果fetch

 

聯合機率:包含多個條件,且全部條件同時成立的機率
記做:P(A,B)
特性:P(A, B) = P(A)P(B)spa

 

貝葉斯公式:3d

W爲給定文檔的特徵值(頻數統計,預測文檔提供),C爲文檔類別orm

爲防止計算出的分類機率爲0,引入拉普拉斯平滑係數:blog

α爲指定的係數,通常爲1;m爲訓練文檔中統計出來的特徵詞個數事件

 

樸素貝葉斯算法在sklearn中的API:文檔

sklearn.naive_bayes.MultinomialNB(alpha = 1.0)
樸素貝葉斯分類
alpha:拉普拉斯平滑係數get

 

示例:20類新聞分類

數據集來源:sklearn.datasets新聞數據抓取器fetch_20newsgroups

 

 使用樸素貝葉斯分類步驟:

1. 獲取新聞的數據,20個類別

news = fetch_20newsgroups(subset='all')

 

2. 進行數據集分割

x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.3)

 

3. 對文本數據,進行特徵抽取

tf = TfidfVectorizer()
x_train = tf.fit_transform(x_train)
x_test = tf.transform(x_test)

 

4. estimator估計器訓練

 mlb = MultinomialNB(alpha=1.0)
 mlb.fit(x_train, y_train)

 

5. 進行預測

y_predict = mlb.predict(x_test)

 

完整代碼:

from sklearn.naive_bayes import MultinomialNB
from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer


def nbcls():
    """
    樸素貝葉斯對新聞數據集進行預測
    :return:
    """
    # 獲取新聞的數據,20個類別
    news = fetch_20newsgroups(subset='all')

    # 進行數據集分割
    x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.3)

    # 對於文本數據,進行特徵抽取
    tf = TfidfVectorizer()
    x_train = tf.fit_transform(x_train)
    x_test = tf.transform(x_test)

    # estimator估計器流程
    mlb = MultinomialNB(alpha=1.0)
    mlb.fit(x_train, y_train)

    # 進行預測
    y_predict = mlb.predict(x_test)

    print("預測每篇文章的類別:", y_predict[:100])
    print("真實類別爲:", y_test[:100])

    print("預測準確率爲:", mlb.score(x_test, y_test))

    return None


nbcls()

 

取前100篇新聞的預測的新聞分類結果及準確率:

相關文章
相關標籤/搜索