這篇文章給大家分享的是有關大數據中樸素貝葉斯法的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
最為廣泛的兩種分類模型是決策樹模型(Decision Tree Model)和樸素貝葉斯模型(Naive Bayesian Model,NBM),本案例采用樸素貝葉斯模型。樸素貝葉斯法是基于貝葉斯定理與特征條件獨立假設的分類方法,本節對此算法作了重點分析。
一、 垃圾消息識別算法-樸素貝葉斯
和決策樹模型相比,樸素貝葉斯分類器(Naive Bayes Classifier, NBC)發源于古典數學理論,有著堅實的數學基礎,以及穩定的分類效率。同時,NBC模型所需估計的參數較少,對缺失數據不太敏感,算法也比較簡單。
理論上,NBC模型與其他分類方法相比具有最小的誤差率。但是實際上并非總是如此,這是因為NBC模型假設屬性之間相互獨立,這個假設在實際應用中往往是不成立的,這給NBC模型的正確分類帶來了一定影響。
這個在250多年前發明的算法,在信息領域內有著無與倫比的地位。貝葉斯分類是一系列分類算法的總稱,這類算法均以貝葉斯定理為基礎,故統稱為貝葉斯分類。樸素貝葉斯算法(Naive Bayesian) 是其中應用最為廣泛的分類算法之一。
1.實現基礎機器學習貝葉斯分類的核心
分類是將一個未知樣本分到幾個預先已知類的過程。數據分類問題的解決是一個兩步過程:第一步,建立一個模型,描述預先的數據集或概念集。通過分析由屬性描述的樣本(或實例、對象等)來構造模型。假定每一個樣本都有一個預先定義的類,由一個被稱為類標簽的屬性確定。為建立模型而被分析的數據元組形成訓練數據集,該步也稱作有指導的學習。
在眾多的分類模型中,應用最為廣泛的兩種分類模型是決策樹模型和樸素貝葉斯模型。決策樹模型通過構造樹來解決分類問題。首先利用訓練數據集來構造一棵決策樹,一旦樹建立起來,它就可為未知樣本產生一個分類。
在分類問題中使用決策樹模型有很多的優點,決策樹便于使用,而且高效;根據決策樹可以很容易地構造出規則,而規則通常易于解釋和理解;決策樹可很好地擴展到大型數據庫中,同時它的大小獨立于數據庫的大??;決策樹模型的另外一大優點就是可以對有許多屬性的數據集構造決策樹。決策樹模型也有一些缺點,比如處理缺失數據時的困難,過度擬合問題的出現,以及忽略數據集中屬性之間的相關性等。
解決這個問題的方法一般是建立一個屬性模型,對于不相互獨立的屬性,把他們單獨處理。例如中文文本分類識別的時候,我們可以建立一個字典來處理一些詞組。如果發現特定的問題中存在特殊的模式屬性,那么就單獨處理。
這樣做也符合貝葉斯概率原理,因為我們把一個詞組看作一個單獨的模式,例如英文文本處理一些長度不等的單詞,也都作為單獨獨立的模式進行處理,這是自然語言與其他分類識別問題的不同點。
實際計算先驗概率時候,因為這些模式都是作為概率被程序計算,而不是自然語言被人來理解,所以結果是一樣的。
在屬性個數比較多或者屬性之間相關性較大時,樸素貝葉斯模型的分類效率比不上決策樹模型。但這點有待驗證,因為具體的問題不同,算法得出的結果不同,同一個算法對于同一個問題,只要模式發生變化,也存在不同的識別性能。這點在很多國外論文中已經得到公認,算法對于屬性的識別情況決定于很多因素,例如訓練樣本和測試樣本的比例影響算法的性能。
決策樹對于文本分類識別,要看具體情況。在屬性相關性較小時,樸素貝葉斯模型的性能相對較好。屬性相關性較大的時候,決策樹算法性能較好。
2.樸素貝葉斯分類的表達式描述
貝葉斯定理由英國數學家貝葉斯 ( Thomas Bayes 1702-1761 ) 發展,用來描述兩個條件概率之間的關系,比如 P(A|B) 和 P(B|A)。按照乘法法則,可以立刻導出:P(A∩B) = P(A)*P(B|A)=P(B)*P(A|B)。如上公式也可變形為:P(B|A) = P(A|B)*P(B) / P(A)。
通常,事件A在事件B(發生)的條件下的概率,與事件B在事件A的條件下的概率是不一樣的;然而,這兩者是有確定的關系,貝葉斯法則就是這種關系的陳述。貝葉斯法則是關于隨機事件A和B的條件概率和邊緣概率的。其中P(A|B)是在B發生的情況下A發生的可能性。
在貝葉斯法則中,每個名詞都有約定俗成的名稱:
Pr(A)是A的先驗概率或邊緣概率。之所以稱為“先驗”是因為它不考慮任何B方面的因素。
Pr(A|B)是已知B發生后A的條件概率,也由于得自B的取值而被稱作A的后驗概率。
Pr(B|A)是已知A發生后B的條件概率,也由于得自A的取值而被稱作B的后驗概率。
Pr(B)是B的先驗概率或邊緣概率,也作標準化常量(normalized constant)。
按這些術語,Bayes法則可表述為:
后驗概率 = (似然度 * 先驗概率)/標準化常量,也就是說,后驗概率與先驗概率和似然度的乘積成正比。
另外,比例Pr(B|A)/Pr(B)也有時被稱作標準似然度(standardised likelihood),Bayes法則可表述為:
后驗概率 = 標準似然度 * 先驗概率。
二、 進行分布式貝葉斯分類學習時的全局計數器
在單機環境中完成基于簡單貝葉斯分類算法的機器學習案例時,只需要完整加載學習數據后套用貝葉斯表達式針對每個單詞計算統計比率信息即可,因為所需的各種參數均可以在同一個數據文件集中直接匯總統計獲取,但是當該業務遷移到MapReduce分布式環境中后,情況發生了本質的變化。從圖14.9貝葉斯分類表達式在垃圾消息識別中的使用方式:
可以看出,在進行數據學習統計時需要計算幾個主要比例參數:可以看出,在進行數據學習統計時需要計算幾個主要比例參數:
所有消息中包含某個特定單詞的比率;
消息為垃圾消息的比率;
消息為垃圾消息并且垃圾消息中存在特定單詞的比例。
因此,需要對所有的學習數據匯總,至少需要明確學習數據中消息的總數,學習數據中垃圾消息的數量,學習數據中有效消息的數量等數據,由于MapReduce任務的數據輸入來源來自于HDFS,而HDFS會將超大的數據文件自動切分成大小相等的塊存放到不同的數據節點,同時MapRedece任務也將滿足“數據在哪個節點,計算任務就在哪個節點啟動”的基本原則,因此整個學習數據的分析統計任務會并行在不同的Java虛擬機甚至不同的任務計算節點中,使用傳統的共享變量方式來解決這個匯總統計問題就成了不可能完成的任務。
要想使用MapReduce完成計數器的功能可以有以下幾種選擇:
(1)使用MapReduce內置的Counter組件,MapReduce的Counter計數器會自動記錄一些通用的統計信息,如本次MapReduce總共處理的數據分片數量等,開發人員也可以自定義不同類型的Counter計數器并在Map或Reduce任務中設置/累加/計數器的值,但是MapReduce內置的Counter計數器工具有一個明顯的缺陷,它并不支持Map任務中累加計數器的值后在Reduce中直接獲取。
也就是說,在Reduce任務中第一次獲取相關計數器的值永遠都為0,盡管在整個任務結束后,MapReduce會將對應計數器在Map和Reduce兩個任務過程中分別設置的值進行最終的累加操作,由于在本案例中需要在Reduce任務中獲取有效/垃圾消息的總數量以計算比率信息,而這些數量需要在Map任務中統計,因此MapReduce內置的Counter計數器并不是適合本案例的應用環境。
(2)Hadoop生態中的特殊組件Zookeeper對這類跨越節點的統一計數器提供了API支持,但是如果僅僅是因為需要設置少量幾個以數字形式存在的計數器就額外部署一套Zookeeper集群顯然開銷太大,因此這種解決方法也不適用于當前案例。
(3)自行實現簡單的統一計數器。統一計數器的實現比較簡單,僅需在單獨的節點中定義數字變量,在需要設置、累加或獲取計數器時通過都通過網絡訪問這個節點中的這些數字變量。在普通環境中,實現這樣一個計數器服務相對較為繁瑣,因為需要大量的網絡數據交換操作,但是在實現了自定義的RPC調用組件之后,基于網絡的數據設置和獲取操作就顯得異常簡單,就類似于在本機上完成一次普通Java方法一樣方便,因此可以按照以下的結構來完成計數器服務的實現:
注意:由于多個數據處理節點會并發的向計數器服務發起設值請求,因此需要注意計數器變量的安全性,在最為簡單的設計中,使計數器服務的設置值、累加值、獲取值方法保持同步即可。
三、數據清洗分析結果存儲
MapReduce是典型的非實時數據處理引擎,這就意味著不能將其作為需要實時反饋的場景。所以MapReduce任務只能在后臺完成復雜數據的處理操作,供終端實時運算提供支撐的中間結果,而且由于HDFS文件系統的Metadata檢索服務和數據網絡傳輸都需要大量的IO開銷,如果中間結果集的量級并不需要分布式的文件存儲支持而又使用HDFS存儲中間結果,反倒會對最終的服務效率帶來消極影響。因此在完成好數據的統一清洗分析后,中間結果一般都選擇以下的幾種保存策略:
如果清洗后的結果是量級較小的規則性數據,則可以將其直接存放到Redis之類的Key-Value高速緩存體系中;
如果清洗后的結果集比較大,那么可以在Reduce任務中將其存放到傳統的RDBMS中,供業務系統使用SQL語句完成實時查詢;
如果清洗后的結果仍然是海量數據,則可以將其存放到HBase之類的分布式數據庫中以提供高效的大數據實施查詢。
本項目采用Redis緩存數據,并使用了Redis連接池。和RDBMS一樣,Redis也可以通過連接池方式提高數據訪問效率和吞吐量,其原理如下:
感謝各位的閱讀!關于“大數據中樸素貝葉斯法的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。