貝葉斯統(tǒng)計(jì)學(xué)
? ? 基于(總體信息+樣本信息+先驗(yàn)信息)進(jìn)行統(tǒng)計(jì)推斷的方法和理論
先驗(yàn)信息:抽樣之前,有關(guān)推斷問題中未知參數(shù)的一些信息,通常來自于經(jīng)驗(yàn)或歷史資料
貝葉斯定理:
????
給定觀測(cè)數(shù)據(jù)樣本
,假設(shè)
是成立的概率,是后驗(yàn)概率,比如一份特定郵件中,
是垃圾郵件的概率
是
的先驗(yàn)概率,比如總體郵件中垃圾郵件的概率,
是
的先驗(yàn)概率,比如總體郵件中帶有特定特征的郵件概率
可以通過抽樣來計(jì)算先驗(yàn)概率
eg:
總體100,正常70,垃圾30,辦證在正常郵件中出現(xiàn)10次,垃圾郵件中出現(xiàn)15次。
設(shè)X為辦證,H為垃圾郵件
包含辦證這個(gè)詞的郵件屬于垃圾郵件的概率為
多個(gè)特征會(huì)使統(tǒng)計(jì)量巨大,所有特征需要計(jì)算次,n是特征數(shù)
樸素貝葉斯(Naive Bayes)
? ? 假設(shè):特征之間都是相互獨(dú)立的
多項(xiàng)式模型:重復(fù)的詞語我們視其出現(xiàn)多次('a','b','c','a','d','a')
eg:
伯努利模型:重復(fù)的詞我們視其為出現(xiàn)一次('a','b','c','d')
eg:
混合模型:在計(jì)算句子概率時(shí),不考慮重復(fù)詞語出現(xiàn)的次數(shù),但是在統(tǒng)計(jì)計(jì)算詞語的概率時(shí),卻考慮重復(fù)詞語出現(xiàn)的次數(shù)
高斯模型:連續(xù)型變量,轉(zhuǎn)換成離散型的值
詞袋模型(Bag of Words)
BoW模型最早出現(xiàn)在自然語言處理(Natural Language Processing)和信息檢索(Information Retrieval)領(lǐng)域。該模型忽略掉文本的語法和語序等要素,將其僅僅看作是若干個(gè)詞匯的集合,文檔中每個(gè)單詞的出現(xiàn)都是獨(dú)立的。BoW使用一組無序的單詞來表達(dá)一段文字或一個(gè)文檔。
eg:John likes to watch movies,Marry likes too.John also likes to watch football games.
構(gòu)成詞典:
{"John" : 1 , "likes" 2 , "to" : 3 , "watch" : 4 , "movies" : 5 , "also" : 6 , "football" : 7 , "games" : 8 , "Marry" : 9 , "too" : 10}
則上述兩個(gè)文本可用向量表示:
[ 1 , 2 , 1 , 1 , 1 , 0 , 0 , 0 , 1 , 1 ]
[ 1 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 0 , 0 ]
向量與原來文本中單詞出現(xiàn)的順序無關(guān),而是詞典中每個(gè)單詞在文本中出現(xiàn)的頻率
python中使用CountVictorizer方法構(gòu)建單詞的字典,每個(gè)單詞實(shí)例被轉(zhuǎn)換為向量的一個(gè)數(shù)值特征,每個(gè)元素是特定單詞在文本中出現(xiàn)的次數(shù)
from sklearn.feature-extraction.text import CountVectorizer
TF-IDF
提取文章關(guān)鍵詞:
1、提取詞頻(Term Frequency,TF),但出現(xiàn)最多的詞可能是“的,是,在”等對(duì)文章分類或搜索沒有幫助的停用詞(stop words)
2、假設(shè)停用詞都過濾掉了,但仍會(huì)有關(guān)鍵詞排序問題,比如“中國”,“蜜蜂”,“養(yǎng)殖”三個(gè)詞TF相同,但相對(duì)而言,后兩個(gè)比前一個(gè)不那么常見,對(duì)于一篇文章,三者TF相同,那么在關(guān)鍵詞排序上,后兩者應(yīng)該在“中國”之前,所以需要一個(gè)重要性調(diào)整系數(shù),衡量一個(gè)詞是否是常見詞。常見詞的權(quán)重 < 不常見詞的權(quán)重,這個(gè)權(quán)重叫做“逆文本頻率(Inverse Document Frequency,IDF)”其大小與一個(gè)詞的常見程度成反比。
詞頻(TF) = 某個(gè)詞在文章中的出現(xiàn)次數(shù)
詞頻(TF) =?
詞頻(TF) =?
TF-IDF = TF * IDF
sklearn實(shí)現(xiàn),可以使用 TfidfVectorizer()
from sklearn.feature-extraction.text import TfidfVectorizer
代碼:
import numpyas np
from sklearnimport datasets
from sklearn.model_selectionimport train_test_split
from sklearn.metricsimport classification_report, confusion_matrix
from sklearn.naive_bayesimport MultinomialNB, BernoulliNB, GaussianNB
# 載入數(shù)據(jù)
iris = datasets.load_iris()
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target)
mul_nb = MultinomialNB()
mul_nb.fit(x_train, y_train)
print(classification_report(mul_nb.predict(x_test), y_test))
print(confusion_matrix(mul_nb.predict(x_test), y_test))
Ber_nb = BernoulliNB()
Ber_nb.fit(x_train, y_train)
print(classification_report(Ber_nb.predict(x_test), y_test))
print(confusion_matrix(Ber_nb.predict(x_test), y_test))
Gau_nb = GaussianNB()
Gau_nb.fit(x_train, y_train)
print(classification_report(Gau_nb.predict(x_test), y_test))
print(confusion_matrix(Gau_nb.predict(x_test), y_test))