發布時間: 2019-05-12 00:20:17
1. 條件獨立性
兩個隨機變量X和Y,若對于所有x,y有P(X=x,Y=y)=P(X=x)P(Y=y)則稱隨機變量和是相互獨立的,記作X⊥Y。
如果關于X和Y的條件概率對于Z的每一個值有P(X=x,Y=y|Z=z)=P(X=x|Z=z)P(Y=y|Z=z),
則稱隨機變量X和Y在給定隨機變量Z時是條件獨立的,記作X⊥Y|Z。
2. 貝葉斯定理
貝葉斯定理是關于隨機事件A和B的條件概率(或邊緣概率)的一則定理。其中P(A|B)是在B發生的情況下A發生的可能性。
3. 樸素貝葉斯算法
基于貝葉斯定理與特征條件獨立假設的分類方法。對于給定的訓練數據集,首先基于特征條件獨立假設學習輸入/輸出的聯合概率分布,然后基于此模型,對給定的輸入x,利用貝葉斯定理求出后驗概率較大的輸出y。根據貝葉斯定理,對一個分類問題,給定樣本特征X,樣本屬于類別H的概率是
P(H│X)=(P(X|H)P(H))/(P(X))
其中,是數據元組,通常用個屬性集的測量值描述。為某種假設,如數據元組屬于某個特定類。(│) 是后驗概率,或在條件下,的后驗概率。()是先驗概率,或的先驗概率,()獨立于。()是的先驗概率。
因為樸素的假設,即特征條件獨立,根據全概率公式展開,得出樸素貝葉斯法分類的基本公式:
4. 樸素貝葉斯實例
4.1. 實例描述
訓練集統計結果(指定統計詞頻):
現有一篇被預測文檔:出現了影院,支付寶,云計算,計算屬于科技、娛樂的類別概率?
4.2. 實例公式
注:w為給定文檔的特征值(頻數統計,預測文檔提供),c為文檔類別
公式可以理解為:
其中c可以是不同類別
公式分為三個部分:
l P(C):每個文檔類別的概率(某類別文檔數/總文檔數)
l P(W|C):給定類別下特征(被預測文檔中出現的詞)的概率
計算方法:P(F1│C)=Ni/N(訓練文檔中去計算)
Ni為該F1詞在C類別所有文檔中出現的次數
N為所屬類別C下的文檔所有詞出現的次數和
l P(F1,F2,…) 預測文檔中每個詞的概率
4.3. 分析的結果
?
5. 拉普拉斯平滑系數
問題:從上面的例子我們得到娛樂概率為0,這是不合理的,如果詞頻列表里面有很多出現次數都為0,很可能計算結果都為零
解決方法:拉普拉斯平滑系數
P(F1│C)=(Ni+α)/(N+αm)
α為指定的系數一般為1,m為訓練文檔中統計出的特征詞個數
6. 樸素貝葉斯算法案例
6.1. 案例描述-實現新聞分類
sklearn20類新聞分類
20個新聞組數據集包含20個主題的18000個新聞組帖子
6.2. 案例開發流程
1、加載20類新聞數據,并進行分割
2、生成文章特征詞
3、樸素貝葉斯estimator流程進行預估
6.3. 代碼實現
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
def naviebayes():
"""
樸素貝葉斯進行文本分類
:return: None
"""
news = fetch_20newsgroups(subset='all')
# 進行數據分割
x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.25)
# 對數據集進行特征抽取
tf = TfidfVectorizer()
# 以訓練集當中的詞的列表進行每篇文章重要性統計['a','b','c','d']
x_train = tf.fit_transform(x_train)
print(tf.get_feature_names())
x_test = tf.transform(x_test)
# 進行樸素貝葉斯算法的預測
mlt = MultinomialNB(alpha=1.0)
print(x_train.toarray())
mlt.fit(x_train, y_train)
y_predict = mlt.predict(x_test)
print("預測的文章類別為:", y_predict)
# 得出準確率
print("準確率為:", mlt.score(x_test, y_test))
print("每個類別的精確率和召回率:", classification_report(y_test, y_predict, target_names=news.target_names))
return None
if __name__ == "__main__":
naviebayes()?
6.4. 案例結果
上一篇: PS教程_PS設計中色彩的基礎知識
下一篇: 華為培訓課程怎么樣_騰科老師為你解答