天天看點

機器學習:樸素貝葉斯算法對新聞分類機率基礎樸素貝葉斯舉例:改進方法新聞分類代碼示例

機率基礎

機率定義:一件事情發生的可能性

1、聯合機率

包含多個條件,且所有條件同時成立的機率

記作: P(A,B)= P(A)P(B)

2、條件機率

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

記作: P (A∣B)

特性: P (A1 ,A2∣B) = P (A1∣B) P (A2∣B)

注意:此條件機率的成立,是由于A1,A2互相獨立的結果

樸素 貝葉斯

特征獨立

機器學習:樸素貝葉斯算法對新聞分類機率基礎樸素貝葉斯舉例:改進方法新聞分類代碼示例

說明:

W為給定文檔的特征值(頻數統計,預測文檔提供)

C為文檔類别

機器學習:樸素貝葉斯算法對新聞分類機率基礎樸素貝葉斯舉例:改進方法新聞分類代碼示例

舉例:

訓練集統計結果

特征  科技類(30)  娛樂類(60)  彙總(90)
商場    9           51          60
影院    8           56          64
支付寶  20          15          35
雲計算  63          0           63
彙總    100         121         221      

現有預測文檔,出現詞彙:影院 ,支付寶,雲計算

計算屬于科技,娛樂的類别機率

P(科技|影院,支付寶,雲計算) 
= P(影院,支付寶,雲計算|科技)P(科技)
= P(影院|科技)P(支付寶|科技)P(雲計算|科技)P(科技)
= (8/100)(20/100)(63/100)(30/90)
= 0.0034


P(娛樂|影院,支付寶,雲計算) 
= P(影院,支付寶,雲計算|娛樂)P(娛樂)
= P(影院|娛樂)P(支付寶|娛樂)P(雲計算|娛樂)P(娛樂)
= (56/121)(15/121)(0/121)(60/90)
= 0      

娛樂的機率為0,這是不合理的

改進方法

拉普拉斯平滑系數

P(F1|C) = (Ni + a)/(N + am)

a為指定的系數,一般為1

m為訓練文檔中統計出的特征詞個數

作用:防止分類機率為0

改進計算

P(科技|影院,支付寶,雲計算) 
= ((8+1)/(100+1*4))*((20+1)/(100+1*4))*((63+1)/(100+1*4))*(30/90)
= 0.0036


P(娛樂|影院,支付寶,雲計算) 
= ((56+1)/(121+1*4))*((15+1)/(121+1*4))*((0+1)/(121+1*4))*(60/90)
= 0.0003      

新聞分類

20newsgroups 資料集下載下傳位址:

http://qwone.com/~jason/20Newsgroups/20news-bydate.tar.gz

如果直接拷貝pkl檔案,需要注意python版本

代碼示例

# -*- coding: utf-8 -*-

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

import ssl

ssl._create_default_https_context = ssl._create_unverified_context

# 如果擷取不到就下載下傳
data = fetch_20newsgroups(subset="all")

# 資料分割
X_train, X_test, y_train, y_test = train_test_split(
    data.data, data.target, test_size=0.33, random_state=42
)

# 特征抽取
tfidf = TfidfVectorizer()

# 以訓練集中的詞清單對每篇文章做重要性統計
X_train = tfidf.fit_transform(X_train)
print(tfidf.get_feature_names())

X_test = tfidf.transform(X_test)

# 樸素貝葉斯算法預測,alpha是拉普拉斯平滑系數
mlt = MultinomialNB(alpha=1.0)
mlt.fit(X_train, y_train)
score = mlt.score(X_test, y_test)
print("socre: {}".format(score))
# socre: 0.83
      

特點:

訓練誤差大,結果肯定不好

不需要調參

優點:

1、樸素貝葉斯模型發源于古典數學理論,有穩定的分類效率

2、對缺失資料不太敏感,算法也比較簡單,常用于文本分類

3、分類準确度高,速度快

缺點:

假設文章中一些詞語和另一些詞語是獨立關系,不太靠譜

由于使用了樣本屬性獨立性的假設,是以樣本屬性有關聯時,效果不好

訓練集中進行統計詞,會對結果造成幹擾

文本分類

-樸素貝葉斯

-神經網絡(效果更好)