樸素貝葉斯算法學習心得

樸素貝葉斯模型發源於古典數學理論,有穩定的分類效率。
對缺失數據不太敏感,算法也比較簡單,常用於文本分類。
分類準確度高,速度快。
樸素貝葉斯的模型是基於條件概率和聯合概率爲基礎的。 求分類時,有個前提要求是 條件是獨立的。
公式如下:
在這裏插入圖片描述
w 爲給定文檔的特徵值.
文檔中的特徵有很多(word1,word2,word3…) p(w)=p(word1)*p(word2)*p(word2…).這個值是固定的
c爲文檔的類別
p(w|c) 意思是在C類別文檔中,出現w特徵值的概率即:
p(w|c)=p(word1|c)*p(word2|c)*p(word2|c)
p(word1|c)=該詞在c類別中出現的次數 除以 c類別下所有詞出現的次數之和.
p© :某個文檔類別詞數 除以 總文檔詞數

當然,假設某個詞在某文檔中出現的次數爲0,統計出來的某類別概率爲0,這個是不科學的。 爲解決這個問題添加了拉普拉斯平滑係數.

案例:

from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import classification_report
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)

    # test=x_train[1].toarray() #轉換成列表查看
    # with open('a.txt','w') as f:
    #     for i in test[0]:
    #         f.write(str(i))

    x_test =tf.transform(x_test)

    #進行樸素貝葉斯算法統計
    mlt=MultinomialNB(alpha=1.0)

    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()

這裏面有個超參數 alpha 代表的是拉普拉斯平滑係數.
可以通過網格搜索,交叉驗證,進行調參.
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章