1. 程式人生 > >樸素貝葉斯案例1:進行文件/評論分類(python實現)

樸素貝葉斯案例1:進行文件/評論分類(python實現)

    機器學習的一個重要應用就是文件的自動分類,比如一封電子郵件、新聞報道、使用者留言、政府公文等。在文件分類中,比如一封電子郵件就是一個例項,而電子郵件中的某些元素(詞語)則構成特徵。我們可以觀測文件中出現的詞,並把每個詞的出現或者不出現作為一個特徵,這樣得到的特徵數目就會跟詞彙表中的詞目一樣多。

    樸素貝葉斯是比較常用的演算法,樸素的含義是假設特徵之間相互獨立,為啥需要這個假設呢?

    假設詞彙表中有1000個單詞,要得到好的概率分佈,就需要足夠的資料樣本,假設每個特徵需要N個樣本,那麼對於1000特徵的詞彙,則需要N的1000次冪。隨著特徵數目增大樣本數會迅速增長。但如果假設特徵之間相互獨立,則樣本數可以由N的1000次冪減少到1000*N個。

    所謂的獨立指的是統計意義上的獨立,即一個特徵或者單次出現的可能性與它和其他單詞相鄰沒有關係。比如,單詞bacon出現在unhealthy和出現在delicious後面的概率相等,當然這個假設並不正確,兩者肯定不相等,這個假設正是樸素貝葉斯中的樸素的概念。樸素貝葉斯的另外一個假設是每個特徵同等重要。其實這個假設也有問題,如果要判斷留言板的留言是否恰當,可能並不需要看完所有的1000個單詞,而只需要看10-20個單詞(特徵)即可做出判斷。

    儘管樸素貝葉斯有這些小瑕疵,但是實際的效果仍然很好。

案例:

    以斑點狗論壇留言板為例,需要構建一個快速過濾器,遮蔽一些侮辱性的言論。對此類問題需要建立兩個類別,侮辱和非侮辱類,使用1和0分別表示。

1、將文字轉化為數字向量

    要從文字中獲取特徵,需要先拆分文字。將文字片段表示為一個詞條向量,其中值1表示詞條出現在文件中,0表示詞條未出現。

1)匯入資料

640?wx_fmt=png&wxfrom=5&wx_lazy=1

2)建立一個包含在所有文件中不重複的詞彙表

0?wx_fmt=png

執行案例如下:

0?wx_fmt=png

3)獲取詞彙表之後,就可以根據詞彙表以及樣本文件,輸出樣本的數字向量。

向量的每一個元素為0或者1,分別表示詞彙表中的單詞是否在輸入文件中出現。

0?wx_fmt=png

案例結果:

0?wx_fmt=png

將訓練文字全部轉為數字向量。

向量的每個元素0,或1 代表評論中的詞是否在詞彙表中出現,向量的長度為詞彙表的長度。

0?wx_fmt=png

2、訓練演算法,從詞向量計算概率。

    貝葉斯公式:p(h+|D)=p(D|h+)*p(h+)/P(D), h+代表侮辱性留言,

D表示評論。現在D裡面含有N個單詞d1、d2、d3...dn。如果將D展開為一個個特徵,可以將P(D|h+)寫成P(d1,d2,...dn | h+),這裡假設各個特徵d1...dn之間都相互獨立,該假設也稱為條件獨立性,它意味著可以將P(d1,d2,...dn | h+)轉化為P(d1 | h+)*P(d2 | h+)*...P(dn | h+),這就極大的簡化了計算過程。

程式思路:

計算每個類別彙總的文件數目

對每篇訓練文件:

  • 對每個類別:

        如果詞條出現在文件中,則增加該詞條的計數值

        增加所有詞條的計數值

  • 對每個詞條:

      將該詞條的數目除以總詞條數目得到條件概率

  • 返回每個類別的條件概率

0?wx_fmt=png

執行案例:

0?wx_fmt=png

3、根據樸素貝葉斯進行分類。

下面就是分別求出P(h+|D)、P(h-|D),然後根據兩者的大小,取值大的類別做決策。

P(h+|D) = P(D|h+) *P(h+) / P(D) =  (P(d1 | h+)*P(d2 | h+)*...P(dn | h+))*P(h+) / P(D)

P(h-|D) = P(D|h-) *P(h-) / P(D) =  (P(d1 | h-)*P(d2 | h-)*...P(dn | h-))*P(h-) / P(D)

    在計算P(d1 | h+)*P(d2 | h+)*...P(dn | h+)時,假設有一個P(di | h+)=0,那麼這個式子的乘積也會0,為降低這種影響,可將素有詞的出現數均初始化為1,將分母初始化為2

另外一個問題是下溢位,這是由於太多很小的數相乘,四捨五入會得到0,此時的解決辦法是對乘積取自然對數。主要參考是因為ln(a*b)=ln(a)+ln(b),因為為f(x)和ln(f(x))的曲線變化趨勢一致。雖然取值不一樣,但不影響我們的判斷。

0?wx_fmt=png

測試案例:

0?wx_fmt=png

相關推薦

樸素(NaiveBayes)針對小資料集中文文字分類預測

轉自相國大人的部落格, http://blog.csdn.net/github_36326955/article/details/54891204 做個筆記 程式碼按照1 2 3 4的順序進行即可: 1.py(corpus_segment.py) #!/usr/bin/e

基於樸素的關於網際網路金融新聞分類python實現

        中國網際網路金融發展迅速,2014年是中國網際網路金融起步的一年,但在短短的一年時間內,網際網路金融創業者們融資額度一再創高,雨後春筍般湧現出各類網際網路金融產品讓使用者眼花繚亂,隨著創業門檻的降低,在即將到來的2015年,網際網路金融必將在中國掀起熱潮。

統計學習四1.樸素

isp 基本 基礎 ase 問題 math ots 特征 正數 全文引用自《統計學習方法》(李航) 樸素貝葉斯(naive Bayes)法 是以貝葉斯定理為基礎的一中分類方法,它的前提條件是假設特征條件相互獨立。對於給定的訓練集,它首先基於特征條件假設的前提條件,去學習

樸素分類算法介紹及python代碼實現案例

urn bus 人的 元素 1.2 -s index 代碼 步驟 樸素貝葉斯分類算法 1、樸素貝葉斯分類算法原理 1.1、概述 貝葉斯分類算法是一大類分類算法的總稱 貝葉斯分類算法以樣本可能屬於某類的概率來作為分類依據 樸素貝葉斯分類算法是貝葉斯分類算法中最簡單的一種 註:

機器學習之路 python 樸素分類器 預測新聞類別

groups group news ckey put epo test electron final 使用python3 學習樸素貝葉斯分類api 設計到字符串提取特征向量 歡迎來到我的git下載源代碼: https://github.com/linyi0604/kag

機器學習分類——高樸素分類器代碼實現

mod ces 數據 大於等於 即使 平均值 方差 很多 mode 一 高斯樸素貝葉斯分類器代碼實現 網上搜索不調用sklearn實現的樸素貝葉斯分類器基本很少,即使有也是結合文本分類的多項式或伯努利類型,因此自己寫了一遍能直接封裝的高斯類型NB分類器,當然與真正的源碼相

分類樸素分類方法

       樸素貝葉斯分類方法的特點是基於概率方法實現分類,這在諸多的分類方法中比較少見。貝葉斯方法都有所耳聞,之所以稱為“樸素”貝葉斯方法,是因為在分類時,假定了“各變數間相互獨立”的條件,這個條件算是比較強的了,大大簡化了分類時的計算,但同時也丟失了一些

學習筆記樸素在Web安全中的六個應用

一、檢測Web異常操作        1.資料蒐集:一樣        2.特徵化             使用詞集模型,統計全部操作命令,去重後形

機器學習筆記樸素分類

一、概述 1.1 簡介 樸素貝葉斯(Naive Bayesian)是基於貝葉斯定理和特徵條件獨立假設的分類方法,它通過特徵計算分類的概率,選取概率大的情況進行分類,因此它是基於概率論的一種機器學習分類方法。因為分類的目標是確定的,所以也是屬於監督學習。 Q1:什麼是基於概率論的方

大資料之Spark--- Spark機器學習,樸素,酒水評估和分類案例學習,垃圾郵件過濾學習案例,電商商品推薦,電影推薦學習案例

一、Saprk機器學習介紹 ------------------------------------------------------------------ 1.監督學習 a.有訓練資料集,符合規範的資料 b.根據資料集,產生一個推斷函式

樸素實戰

文字分類問題 下面我們來看一個文字分類問題,經典的新聞主題分類,用樸素貝葉斯怎麼做。 #coding: utf-8 import os import time import random import jieba #處理中文 #import nltk #處理英文 imp

《機器學習實戰》筆記樸素

4.1 基於貝葉斯決策理論的分類方法 樸素貝葉斯是貝葉斯決策理論的一部分,貝葉斯決策理論的的核心思想,即選擇具有最高概率的決策。若p1(x,y)和p2(x,y)分別代表資料點(x,y)屬於類別1,2的概率,則判斷新資料點(x,y)屬於哪一類別的規則是: 4.3 使用條件概率來分類

分類樸素、半樸素

貝葉斯分類器在預先給定代價的情況下平均風險最小的分類器。 分類原理:通過某物件的先驗概率,利用貝葉斯公式計算出其後驗概率。 貝葉斯分類器的基礎 貝葉斯公式 P

樸素應用垃圾郵件分類

  import nltk nltk.download() from nltk.corpus import stopwords from nltk.stem import WordNetLemmatizer #預處理 def preprocessing(text): tokens

樸素應用垃圾郵件分類(更新)

#讀取資料集 import csv file_path=r'jiangnan.txt' sms=open(file_path,'r',encoding='utf-8') sms_data=[] sms_label=[] text=csv.reader(sms,delimiter='\t') text

第十二次作業——樸素應用垃圾郵件分類

text = "Everybody knows waste paper and used coke cans are discarded everywhere. You might have seen plastic bags flying in the sky and getting caught i

python和機器學習入門3】樸素1——過濾惡意留言

參考部落格:(po主Jack-Cui,《——大部分內容轉載自 參考書籍:《機器學習實戰》——第四章4.5 一 樸素貝葉斯理論 二 demo:過濾網站惡意留言 以線上社群留言為例。為了不影響社群的發展,我們要遮蔽侮辱性的言論,所以要構建一個快速過濾器,如果某

機器學習2Naive Bayes樸素

參考:https://blog.csdn.net/syoya1997/article/details/78618885貝葉斯模型的講解 貝葉斯模型 ,二分類中展開為 P(H) – 已知的先驗概率 P(H|E) – 我們想求的後驗概率,即在B事件發生後對於事件A概率的評估

機器學習(3):基於概率論的分類方法樸素

概述 優點:在資料較少的情況下仍然有效,可以處理多類別問題。 缺點:對於輸入資料的準備方式較為敏感。 使用資料型別:標稱型資料。 貝葉斯決策理論的核心思想:選擇具有最高概率的決策。 使用條件概率來分類 對於某個資料點x,y: 如果,那麼屬於類別 如果,那麼屬於類