機率基礎
機率定義:一件事情發生的可能性
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、分類準确度高,速度快
缺點:
假設文章中一些詞語和另一些詞語是獨立關系,不太靠譜
由于使用了樣本屬性獨立性的假設,是以樣本屬性有關聯時,效果不好
訓練集中進行統計詞,會對結果造成幹擾
文本分類
-樸素貝葉斯
-神經網絡(效果更好)