




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、算法三:樸素貝葉斯算法 前兩個算法都被要求做出一個艱難的決定,給出數(shù)據所屬分類的明確答案,但往往因為分類特征統(tǒng)計不足,或者分類特征選擇有誤導致了錯誤的分類結果,哪怕是訓練集也有可能出現(xiàn)不能正確分類的情形。這時,前兩種方法都如同現(xiàn)實生活一樣是用“少數(shù)服從多數(shù)”的辦法來做出決策。正如帕斯卡指出的:“少數(shù)服從多數(shù)未必是因為多數(shù)人更正義,而是多數(shù)人更加強力”,所以為了保證“少數(shù)人的權利”,我們要求分類器給出一個最優(yōu)的猜測結果,同時給出猜測的概率估計值。貝葉斯統(tǒng)計基礎在說樸素貝葉斯算法之前,還是要說說貝葉斯統(tǒng)計,關于貝葉斯統(tǒng)計,這里只給出最最最基本的簡述,其余的還請參閱further read
2、ing中的數(shù)學之美番外篇:平凡而又神奇的貝葉斯方法先說貝葉斯公式:定義:設A、B是兩個事件,且P(A)>0,稱P(B|A)=P(AB)/P(A)為在事件A發(fā)生的條件下事件B發(fā)生的條件概率。相關公式:乘法公式 P(XYZ)=P(Z|XY)P(Y|X)P(X)全概率公式 P(X)=P(X|Y1)+ P(X|Y2)+ P(X|Yn)貝葉斯公式: 如上所示,其中P(A|B)是在B發(fā)生的情況下A發(fā)生的可能性。在貝葉斯定理中,每個名詞都有約定俗成的名稱:P(A)是A的先驗概率或邊緣概率。之所以稱為"先驗"是因為它不考慮任何B方面的因素。P(A|B)是已知B發(fā)生后A的條件
3、概率(直白來講,就是先有B而后=>才有A),也由于得自B的取值而被稱作A的后驗概率。P(B|A)是已知A發(fā)生后B的條件概率(直白來講,就是先有A而后=>才有B),也由于得自A的取值而被稱作B的后驗概率。P(B)是B的先驗概率或邊緣概率,也作標準化常量。按這些術語,Bayes定理可表述為:后驗概率 = (相似度*先驗概率)/標準化常量,也就是說,后驗概率與先驗概率和相似度的乘積成正比。另外,比例 P(B|A)/P(B)也有時被稱作標準相似度,Bayes定理可表述為:后驗概率 =標準相似度*先驗概率。樸素貝葉斯再說說樸素貝葉斯,樸素貝葉斯在英文中叫做naive Bayes,是不是這個貝
4、葉斯方法too simple,sometimes naive呢?我們一起來看看他的基本假設:條件獨立性。給定類標號A,樸素貝葉斯分類器在估計類條件概率時假設屬性之間條件獨立。條件獨立假設可以形式化的表達如下:P(B|A)=P(b1|A)*P(b2|A)*P(bn|A)其中每個訓練樣本可用一個屬性向量B=(b1,b2,b3,bn)表示,各個屬性之間條件獨立。比如,對于一篇文章,“Good good study, Day day up.”可以用一個文本特征向量來表示,x=(Good, good, study, Day, day , up)。一般各個詞語之間肯定不是相互獨立的,有一定的上下文聯(lián)系。但
5、在樸素貝葉斯文本分類時,我們假設個單詞之間沒有聯(lián)系,可以用一個文本特征向量來表示這篇文章,這就是“樸素”的來歷。有了條件獨立假設,就不必計算X和Y的每一種組合的類條件概率,只需對給定的Y,計算每個xi的條件概率。后一種方法更實用,因為它不需要很大的訓練集就能獲得較好的概率估計。其實這種條件獨立也不是在日常中看不到,比如Markov過程,再比如我們前面說的脊椎動物數(shù)據集的各個指標都可以看作條件獨立的(前者是嚴格的,后者是近似的)我們?yōu)榱苏f明這個問題,使用Tom Mitchell的機器學習一書的playing tennis數(shù)據集(點擊這里下載本文所有代碼及用到數(shù)據集)來說明這個問題。R代碼如下:d
6、ata <-read.csv("D:/R/data/playing tennis.csv")data<-data,-1#去掉了日期這一個沒有可作為分類變量價值的變量prior.yes<-sum(data,5 ="Yes") / length(data,5);prior.no<-sum(data,5 ="No") / length(data,5); bayespre<- function(condition) post.yes <-sum(data,1 = condition1) &
7、 (data,5 = "Yes") /sum(data,5 = "Yes") *sum(data,2 = condition2) & (data,5 = "Yes") /sum(data,5 = "Yes") *sum(data,3 = condition3) & (data,5 = "Yes") /sum(data,5 = "Yes") *sum(data,4 = condition4) & (data,5 = "Yes") /s
8、um(data,5 = "Yes") *prior.yes; post.no <-sum(data,1 = condition1) & (data,5 = "No") /sum(data,5 = "No") *sum(data,2 = condition2) & (data,5 = "No") /sum(data,5 = "No") *sum(data,3 = condition3) & (data,5 = "No") /sum(dat
9、a,5 = "No") *sum(data,4 = condition4) & (data,5 = "No") /sum(data,5 = "No") *prior.no;return(list(prob.yes = post.yes,prob.no = post.no,prediction = ifelse(post.yes>=post.no, "Yes", "No"); 測試:bayespre(c("Rain","Hot",&q
10、uot;High","Strong")bayespre(c("Sunny","Mild","Normal","Weak")bayespre(c("Overcast","Mild","Normal","Weak")上面三個測試集輸出結果為:>bayespre(c("Rain","Hot","High","Strong")$p
11、rob.yes1 0.005291005$prob.no1 0.02742857$prediction1 "No" >bayespre(c("Sunny","Mild","Normal","Weak")$prob.yes1 0.02821869$prob.no1 0.006857143$prediction1 "Yes" >bayespre(c("Overcast","Mild","Normal
12、","Weak")$prob.yes1 0.05643739$prob.no1 0$prediction1 "Yes"我們同樣可以來訓練一下我們之前提到的脊椎動物數(shù)據集(略去代碼),來看看分類效果:>bayespre(animals,c("no","yes","no","sometimes","yes")$prob.mammals1 0$prob.amphibians1 0.1$prob.fishes1 0$prob.reptiles1 0
13、.0375$prediction1 amphibiansLevels: amphibians birds fishesmammals reptiles這里我們仍然沒有區(qū)分出是兩棲動物還是爬行動物,但是至少它告訴我們選擇時要考慮到爬行動物這種可能,而不是像決策樹那樣告訴你他是兩棲動物。>bayespre(animals,c("no","yes","no","yes","no")$prob.mammals1 0.0004997918$prob.amphibians1 0$prob.fishes
14、1 0.06666667$prob.reptiles1 0$prediction1 fishesLevels: amphibians birds fishesmammals reptiles這個是第三條數(shù)據作為測試數(shù)據的,也就是得到了正確分類,他告訴我們有極小的可能他是哺乳動物,我們可以忽略它,畢竟兩個概率相差太大了> bayespre(animals,c("yes","no","no","yes","no")$prob.mammals1 0.0179925$prob.amphibians
15、1 0$prob.fishes1 0.01666667$prob.reptiles1 0$prediction1 mammalsLevels: amphibians birds fishesmammals reptiles這個分類相當不好,兩個分類的概率也相差無幾,我們確實需要考慮。這至少告訴了我們兩個事實:這個學習器的分類效果不太好;這個數(shù)據集的生物特征統(tǒng)計信息不夠。除此以外,我們還發(fā)現(xiàn)這個學習器處理不了他沒見過的情況,以playing tennis數(shù)據為例:假設有來了一個新樣本 x1= (Outlook = Foggy,Temprature = Hot,Humidity = High,Wi
16、nd =Strong),要求對其分類。我們來開始計算:>bayespre(c("foggy","Hot","High","Strong")$prob.yes1 0$prob.no1 0$prediction1 "Yes"計算到這里,大家就會意識到,這里出現(xiàn)了一個新的屬性值,在訓練樣本中所沒有的。如果有一個屬性的類條件概率為0,則整個類的后驗概率就等于0,我們可以直接得到后驗概率P(Yes | x1)= P(No | x1)=0,這時二者相等,無法分類。(雖說程序設定時我遵從疑罪從無的思想偏
17、向了正例)當訓練樣本不能覆蓋那么多的屬性值時,都會出現(xiàn)上述的窘境。簡單的使用樣本比例來估計類條件概率的方法太脆弱了,尤其是當訓練樣本少而屬性數(shù)目又很大時。如何解決?引入m估計(m-estimate)方法來估計條件概率:P(xi|yj)=(nc+mp)/(n+m)n是類yj中的樣本總數(shù),nc是類yj中取值xi的樣本數(shù),m是稱為等價樣本大小的參數(shù),而p是用戶指定的參數(shù)。如果沒有訓練集(即n=0),則P(xi|yj)=p, 因此p可以看作是在類yj的樣本中觀察屬性值xi的先驗概率。等價樣本大小決定先驗概率和觀測概率nc/n之間的平衡,提高了估計的穩(wěn)健性。樸素貝葉斯方法是一個很特別的方法,所以值得介紹
18、一下。在眾多的分類模型中,應用最為廣泛的兩種分類模型是決策樹模型(Decision Tree Model)和樸素貝葉斯模型(Naive Bayes Model,NBC)。樸素貝葉斯模型發(fā)源于古典數(shù)學理論,有著堅實的數(shù)學基礎,以及穩(wěn)定的分類效率。同時,NBC模型所需估計的參數(shù)很少,對缺失數(shù)據不太敏感,算法也比較簡單。理論上,NBC模型與其他分類方法相比具有最小的誤差率。但是實際上并非總是如此,這是因為NBC模型假設屬性之間相互獨立,這個假設在實際應用中往往是不成立的,這給NBC模型的正確分類帶來了一定影響。在屬性個數(shù)比較多或者屬性之間相關性較大時,NBC模型的分類效率比不上決策樹模型。而在屬性相
19、關性較小時,NBC模型的性能最為良好。(所以在文本分類時能夠用關鍵詞就更好了) R語言中Naive Bayes的實現(xiàn)函數(shù)R的e1071包的naiveBayes函數(shù)提供了naive bayes的具體實現(xiàn),其用法如下:# S3 method for class 'formula'naiveBayes(formula, data, laplace = 0, ., subset, na.action = na.pass)# Default S3 method:naiveBayes(x, y, laplace = 0, .)我們以titanic數(shù)據集為例,看看titanic上的
20、符合怎樣條件的人更容易得救:data(Titanic)m <- naiveBayes(Survived ., data = Titanic)m R中的文本處理工具在介紹貝葉斯文本挖掘之前,我想我們先得把R處理文本的一些工具簡單的介紹一下,比如處理文本的tm包,R語言處理正則表達式之類的,關于tm包你可以參閱的是tm的幫助文檔Introduction to the tm Package Text Mining in R,關于正則表達式可以參閱furtherreading 的文本(字符串)處理與正則表達式先說tm包,在tm 中導入數(shù)據需要函數(shù)Co
21、rpus(或VCorpus),函數(shù)的用法如下:Corpus(x,readerControl = list(reader = x$DefaultReader, language = "en"),.)對于這些資料來源(x),tm 包提供了一些相關的函數(shù),比如:DirSource(處理目錄)、 VectorSource(由文檔構成的向量)、 DataframeSource(數(shù)據框)等。一旦導入了訓練文檔,需要后續(xù)文檔處理,比如填充、停止詞去除。(在英文里,有些單詞是會發(fā)生變化,比如我們要識別cat 這個字符,但還可能有cats 等單詞,這時候就需要進行填充(stemming)將他
22、們視為一個詞,但遺憾的是在tm包中英文中有些不規(guī)則的動詞過去式可能沒法識別為一個詞)在tm 包里,這些函數(shù)都歸到信息轉化里面,其主要函數(shù)就是tm_map(),這個函數(shù)可以通過maps 方式將轉化函數(shù)實施到每一個單詞上。tm_map()的主要用法如下:tm_map(x, FUN, ., useMeta = FALSE, lazy = FALSE)提供的FUN常用的有as.PlainTextDocument(將xml轉化為純文本)、stripWhitespace(去除多余空白)、tolower(轉化為小寫)、removeWords(去除停止詞)、stemDocument(填充)等。Dictiona
23、ry() 函數(shù)常用于在文本挖掘中展現(xiàn)相關的詞條時。當將字典(Dictionary)傳遞到DocumentTermMatrix() 以后,生成的矩陣會根據字典提取計算詞匯出現(xiàn)在每篇文檔的頻率。(這個在之后會有例子,就不多說了)再介紹字符串的處理,分割函數(shù):strsplit。使用格式為:strsplit(x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE)主要參數(shù)說明:X:字串向量,每個元素都將單獨進行拆分。Split:為拆分位置的字串向量,默認為正則表達式匹配(fixed=FALSE)fixed=TRUE,表示使用普通文本匹配或正則表達
24、式的精確匹配。Perl:表示可以選擇是否兼容Perl的正則表達式的表述方式。 樸素貝葉斯在文本挖掘中的算法下面開始介紹Naive Bayes算法: 計算每個類別中的文檔數(shù)目:for每篇訓練文檔:for每個類別:if 詞條in 文檔:增加該詞條計數(shù)值,增加所有詞條計數(shù)值For 每個類別:For 每個詞條Prob=詞條數(shù)目/總詞條數(shù)目Return prob 舉例說明,比如我要對我最近閱讀的文獻,有spc與doe兩類,他們的關鍵詞列表如下(部分關鍵詞)docIdKey wordclass1“Adaptive weighting” “run length” “contro
25、l chart”spc2“run length” “control chart” spc3“control chart” “EWMA” “run length”spc4“D-Efficiency” ”Main Effect” “Quadratic Effect”doe 給定一個新樣本”control chart” “run length”main effect” “EWMA”,對其進行分類。該文本用屬性向量表示為d=(”control chart” ,“run length” ,”main effect” ,“EWMA”),類別集合為Y=spc,doe。類spc下總共有8個單詞,類d
26、oe下總共有3個單詞,訓練樣本單詞總數(shù)為11,因此P(spc)=8/11, P(doe)=3/11。部分類條件概率計算如下(使用m估計):P(”control chart”| spc)=(3+1)/(8+7)=4/15=2/7P(”main effect”| spc) = (0+1)/(8+7)=1/15P(”control chart”|doe)=(0+1)/(7+3)=0.1分母中的8,是指spc類別下訓練樣本的關鍵詞總數(shù),7是指訓練樣本有有7個不同的關鍵詞,3是指doe類下共有3個關鍵詞詞。利用類條件概率,開始計算后驗概率,P(spc |d)=4/15*4/15*1/15*8/110.0
27、03447811P(doe|d)= 0.1*0.1*0.2*0.1*3/115.454545e-05因此,這個文檔屬于類別spc?;跇闼刎惾~斯的郵件分類下面來說說樸素貝葉斯分類器在文本分類中的應用。下面是一個使用Naive Bayes分類垃圾郵件的很小的例子,數(shù)據來自機器學習實戰(zhàn),數(shù)據集已上傳至百度云盤。這個郵件集合分為兩個文件夾ham,spam,各有25封郵件。其中spam中的是廣告郵件。這里我們從各文件夾中抽取2封作為測試集,其余作為訓練集。作為垃圾郵件分類器,我們總假定不能判決(即兩個類別的概率相差不足一個數(shù)量級的,這個判別標準需要根據訓練的情況確定)的為正常郵件。R代碼:1、建立詞袋
28、:library(tm)txt1<-"D:/R/data/email/ham"txtham<-Corpus(DirSource(txt1),readerControl=list(language= "en") txtham<-tm_map(txtham,stripWhitespace)txtham<-tm_map(txtham,tolower)txtham<-tm_map(txtham,removeWords,stopwords("english")txtham<-tm_map(txtha
29、m,stemDocument) txt2<-"D:/R/data/email/spam"txtspam<-Corpus(DirSource(txt2),readerControl=list(language= "en") txtspam<-tm_map(txtspam,stripWhitespace)txtspam<-tm_map(txtspam,tolower)txtspam<-tm_map(txtspam,removeWords,stopwords("english")txtspa
30、m<-tm_map(txtspam,stemDocument) 2、詞匯計數(shù)(包括詞類數(shù)目與詞量數(shù)目)dtm1<-DocumentTermMatrix(txtham)n1<-length(findFreqTerms(dtm1,1)dtm2<-DocumentTermMatrix(txtspam)n2<-length(findFreqTerms(dtm2,1) setwd("D:/R/data/email/spam")name<-list.files(txt2)data1<-paste("spam&quo
31、t;,1:23)lenspam<-0for(i in 1:length(names)assign(data1i,scan(namei,"character")lenspam<-lenspam+length(get(datai) setwd("D:/R/data/email/ham")names<-list.files(txt1)data<-paste("ham",1:23)lenham<-0for(i in 1:length(names)assign(datai,scan(namesi,&quo
32、t;character")lenham<-lenham+length(get(datai)3、naive Bayes模型建立(使用m估計,p=1/m,m為詞匯總數(shù))prob<-function(char,corp,len,n)d<-Dictionary(char)re<-DocumentTermMatrix(corp, list(dictionary = d);as.matrix(re)dtm<-DocumentTermMatrix(corp)n<-length(findFreqTerms(dtm, 1)prob<-(sum(re,1)+1)/(n+len)return(prob) testingNB<-function(sentences)pro1<-0.5pro2<-0.5for(i in1:length(sentences)pro1<-pro1*prob(sentencesi,txtham,lenham,n1)for(i in1:length(sentences)pro2<-pro2*prob(sentencesi,txtspam,lenspam,n2)return(list(prob.ham =
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學生欺凌和暴力行為分析工作流程
- 【真題】人教版三年級下冊期末自測評價數(shù)學試卷(含解析)2024-2025學年北京市東城區(qū)第一六六中學
- 部編版九年級歷史班級復習督促計劃
- 特殊教育中數(shù)學核心素養(yǎng)培育心得體會
- 2025年初中物理實驗室工作總結范文
- 鋼結構施工樣板計劃
- 二年級培優(yōu)輔差科技輔導計劃
- 特殊教育班主任教學心得體會范文
- 以實踐為翼:高中物理教學中STS教育的深度融合與拓展
- 以威利斯模式賦能職高英語閱讀教學:理論、實踐與創(chuàng)新
- 2023-2024學年貴州省貴陽市小學語文三年級下冊期末??伎荚囶}
- JJG 169-2010互感器校驗儀
- 建設工程監(jiān)理合同(住房和城鄉(xiāng)建設部2023)
- GB/T 28267.1-2021鋼絲繩芯輸送帶第1部分:普通用途輸送帶的設計、尺寸和機械要求
- 中醫(yī)內科學癭病
- 醫(yī)療技術分級授權與再授權申請表
- 項目管理九大過程英漢對照表
- 拖欠工資起訴狀模版
- 醫(yī)療技術臨床應用管理信息系統(tǒng)操作手冊
- 北師大版小學數(shù)學四年級下冊《優(yōu)化》同步練習附答案
- 商業(yè)銀行風險預警系統(tǒng)整體架構設計
評論
0/150
提交評論