我理解的樸素貝葉斯模型我想說:“任何事件都是條件概率?!睘槭裁茨兀恳驗槲艺J(rèn)為,任何事件的發(fā)生都不是完全偶然的,它都會以其他事件的發(fā)生為基礎(chǔ)。換句話說,條件概率就是在其他事件發(fā)生的基礎(chǔ)上,某事件發(fā)生的概率。 條件概率是樸素貝葉斯模型的基礎(chǔ)。 假設(shè),你的xx公司正在面臨著用戶流失的壓力。雖然,你能計算用戶整體流失的概率(流失用戶數(shù)/用戶總數(shù))。但這個數(shù)字并沒有多大意義,因為資源是有限的,利用這個數(shù)字你只能撒胡椒面似的把錢撒在所有用戶上,顯然不經(jīng)濟。你非常想根據(jù)用戶的某種行為,精確地估計一個用戶流失的概率,若這個概率超過某個閥值,再觸發(fā)用戶挽留機制。這樣能把錢花到最需要花的地方。 你搜遍腦子里的數(shù)據(jù)分析方法,終于,一個250年前的人名在腦中閃現(xiàn)。就是“貝葉斯Bayes”。你取得了近一個月的流失用戶數(shù)、流失用戶中未讀消息大于5條的人數(shù)、近一個月的活躍用戶數(shù)及活躍用戶中未讀消息大于5條的人數(shù)。在此基礎(chǔ)上,你獲得了一個“一旦用戶未讀消息大于5條,他流失的概率高達%”的精確結(jié)論。怎么實現(xiàn)這個計算呢?先別著急,為了解釋清楚貝葉斯模型,我們先定義一些名詞。
因為上面在似然當(dāng)中提到了條件概率,那么我們有必要將什么是條件概率做更詳盡的闡述。 如上面的韋恩圖,我們用矩形表示一個樣本空間,代表隨機事件發(fā)生的一切可能結(jié)果。的在統(tǒng)計學(xué)中,我們用符號P表示概率,A事件發(fā)生的概率表示為P(A)。兩個事件間的概率表達實際上相當(dāng)繁瑣,我們只介紹本書中用得著的關(guān)系:
回到我們的例子。以P(A)代表用戶流失的概率,P(B)代表用戶有5條以上未讀信息的概率,P(B|A)代表用戶流失的前提下未讀信息大于5條的概率。我們要求未讀信息大于5條的用戶流失的概率,即P(A|B),貝葉斯公式告訴我們: P(A|B)=P(AB)/P(B) =P(B|A)*P(A)/P(B) 從公式中可知,如果要計算B條件下A發(fā)生的概率,只需要計算出后面等式的三個部分,B事件的概率(P(B)),是B的先驗概率、A屬于某類的概率(P(A)),是A的先驗概率、以及已知A的某個分類下,事件B的概率(P(B|A)),是后驗概率。 如果要確定某個樣本歸屬于哪一類,則需要計算出歸屬不同類的概率,再從中挑選出最大的概率 我們把上面的貝葉斯公式寫出這樣,也許你能更好的理解: MAX(P(Ai|B))=MAX(P(B|Ai)*P(Ai)/P(B)) 而這個公式告訴我們,需要計算最大的后驗概率,只需要計算出分子的最大值即可,而不同水平的概率P(C)非常容易獲得,故難點就在于P(X|C)的概率計算。而問題的解決,正是聰明之處,即貝葉斯假設(shè)變量X間是條件獨立的,故而P(X|C)的概率就可以計算為: P(B|Ai) =P(B1/Ai)*P(B2/Ai)*P(B3/Ai)*.....*P(Bn/Ai) 如下圖,由這個公式我們就能輕松計算出,在觀察到某用戶的未讀信息大于5條時,他流失的概率為80%。80%的數(shù)值比原來的30%真是靠譜太多了。
當(dāng)然,現(xiàn)實情況并不會像這個例子這么理想化。大家會問,憑什么你就會想到用“未讀消息大于5條”來作為條件概率?我只能說,現(xiàn)實情況中,你可能要找上一堆覺得能夠凸顯用戶流失的行為,然后一一做貝葉斯規(guī)則,來測算他們是否能顯著識別用戶流失。尋找這個字段的效率,取決于你對業(yè)務(wù)的理解程度和直覺的敏銳性。另外,你還需要定義“流失”和“活躍”,還需要定義貝葉斯規(guī)則計算的基礎(chǔ)樣本,這決定了結(jié)果的精度。
樸素貝葉斯的應(yīng)用不止于此,我們再例舉一個更復(fù)雜,但現(xiàn)實場景也更實際的案例。假設(shè)你為了肅清電商平臺上的惡性商戶(刷單、非法交易、惡性競爭等),委托算法團隊開發(fā)了一個識別商家是否是惡性商戶的模型M1。為什么要開發(fā)模型呢?因為之前識別惡性商家,你只能通過用戶舉報和人肉識別異常數(shù)據(jù)的方式,人力成本高且速率很慢。你指望有智能的算法來提高效率。 之前監(jiān)察團隊的成果告訴我們,目前平臺上的惡性商戶比率為0.2%,記為P(E),那么P(~E)就是99.8%。利用模型M1進行檢測,你發(fā)現(xiàn)在監(jiān)察團隊已判定的惡性商戶中,由模型M1所判定為陽性(惡性商戶)的人數(shù)占比為90%,這是一個條件概率,表示為P(P|E)=90%;在監(jiān)察團隊判定為健康商戶群體中,由模型M1判定為陽性的人數(shù)占比為8%,表示為P(P|~E)=8%。乍看之下,你是不是覺得這個模型的準(zhǔn)確度不夠呢?感覺對商戶有8%的誤殺,還有10%的漏判。其實不然,這個模型的結(jié)果不是你想當(dāng)然的這么使用的 這里,我們需要使用一個稱為“全概率公式”的計算模型,來計算出在M1判別某個商戶為惡性商戶時,這個結(jié)果的可信度有多高。這正是貝葉斯模型的核心。當(dāng)M1判別某個商戶為惡性商戶時,這個商戶的確是惡性商戶的概率由P(E|P)表示: P(E|P) =P(P|E)*P(E) / (P(E)*P(P|E)+P(~E)*P(P|~E)) 上面就是全概率公式。要知道判別為惡性商戶的前提下,該商戶實際為惡性商戶的概率,需要由先前的惡性商戶比率P(E),以判別的惡性商戶中的結(jié)果為陽性的商戶比率P(P|E),以判別為健康商戶中的結(jié)果為陽性的比率P(P|~E),以判別商戶中健康商戶的比率P(~E)來共同決定。 P(E) 0.2% 由上面的數(shù)字,帶入全概率公式后,我們獲得的結(jié)果為2.2%。也就是說,根據(jù)M1的判別為陽性的結(jié)果,某個商戶實際為惡性商戶的概率為2.2%,是不進行判別的0.2%的11倍。 你可能認(rèn)為2.2%的概率并不算高。但實際情況下你應(yīng)該這么思考:被M1模型判別為惡性商戶,說明這家商戶做出惡性行為的概率是一般商戶的11倍,那么,就非常有必要用進一步的手段進行檢查了。 惡性商戶判別模型真正的使用邏輯應(yīng)該是如下圖所示。我們先用M1進行一輪判別,結(jié)果是陽性的商戶,說明出現(xiàn)惡性行為的概率是一般商戶的11倍,那么有必要用精度更高的方式進行判別,或者人工介入進行檢查。精度更高的檢查和人工介入,成本都是非常高的。因此M1模型的使用能夠使我們的成本得到大幅節(jié)約。
貝葉斯模型在很多方面都有應(yīng)用,我們熟知的領(lǐng)域就有垃圾郵件識別、文本的模糊匹配、欺詐判別、商品推薦等等。通過貝葉斯模型的闡述,大家應(yīng)該有這樣的一種體會:分析模型并不取決于多么復(fù)雜的數(shù)學(xué)公式,多么高級的軟件工具,多么高深的算法組合;它們的原理往往是通俗易懂的,實現(xiàn)起來也沒有多高的門檻。比如貝葉斯模型,用Excel的單元格和加減乘除的符號就能實現(xiàn)。所以,不要覺得數(shù)據(jù)分析建模有多遙遠,其實就在你手邊。 附: 樸素貝葉斯分類的工作流程
樸素貝葉斯分類適用解決的問題在考慮一個結(jié)果的概率時候,要考慮眾多的屬性,貝葉斯算法利用所有可能的數(shù)據(jù)來進行修正預(yù)測,如果大量的特征產(chǎn)生的影響較小,放在一起,組合的影響較大,適合于樸素貝葉斯分類。 應(yīng)用范圍:貝葉斯定理廣泛應(yīng)用于決策分析。先驗概率經(jīng)常是由決策者主觀估計的。在選擇最佳決策時,會在取得樣本信息后計算后驗概率以供決策者使用。
那在R語言中,是如何實現(xiàn)樸素貝葉斯算法的落地的?
R語言中的klaR包就提供了樸素貝葉斯算法實現(xiàn)的函數(shù)NaiveBayes,我們來看一下該函數(shù)的用法及參數(shù)含義: NaiveBayes(formula, data, ..., subset, na.action= na.pass) NaiveBayes(x, grouping, prior, usekernel= FALSE, fL = 0, ...) formula指定參與模型計算的變量,以公式形式給出,類似于y=x1+x2+x3; data用于指定需要分析的數(shù)據(jù)對象; na.action指定缺失值的處理方法,默認(rèn)情況下不將缺失值納入模型計算,也不會發(fā)生報錯信息,當(dāng)設(shè)為“na.omit”時則會刪除含有缺失值的樣本; x指定需要處理的數(shù)據(jù),可以是數(shù)據(jù)框形式,也可以是矩陣形式; grouping為每個觀測樣本指定所屬類別; prior可為各個類別指定先驗概率,默認(rèn)情況下用各個類別的樣本比例作為先驗概率; usekernel指定密度估計的方法(在無法判斷數(shù)據(jù)的分布時,采用密度密度估計方法),默認(rèn)情況下使用正態(tài)分布密度估計,設(shè)為TRUE時,則使用核密度估計方法; fL指定是否進行拉普拉斯修正,默認(rèn)情況下不對數(shù)據(jù)進行修正,當(dāng)數(shù)據(jù)量較小時,可以設(shè)置該參數(shù)為1,即進行拉普拉斯修正。 R語言實戰(zhàn) 本次實戰(zhàn)內(nèi)容的數(shù)據(jù)來自于UCI機器學(xué)習(xí)網(wǎng)站,后文會給出數(shù)據(jù)集合源代碼的鏈接。
該數(shù)據(jù)集中包含了8124個樣本和22個變量(如蘑菇的顏色、形狀、光滑度等)。
原始數(shù)據(jù)中毒蘑菇與非毒蘑菇之間的比較比較接近,通過抽選訓(xùn)練集和測試集,發(fā)現(xiàn)比重與總體比例大致一樣,故可認(rèn)為抽樣的結(jié)果能夠反映總體狀況,可進一步進行建模和測試。 由于影響蘑菇是否有毒的變量有21個,可以先試著做一下特征選擇,這里我們就采用隨機森林方法(借助caret包實現(xiàn)特征選擇的工作)進行重要變量的選擇:
結(jié)果顯示,21個變量中,只需要選擇6個變量即可,下圖也可以說明這一點:
所需要選擇的變量是:
接下來,我們就針對這6個變量,使用樸素貝葉斯算法進行建模和預(yù)測:
通過樸素貝葉斯模型,在測試集中,模型的準(zhǔn)確率約為97%,而且AUC的值也非常高,一般超過0.8就說明模型比較理想了。
參考來源于:https://ask./blog/chuanshu108/6036 https://ask./blog/lsxxx2011/6381 |
|
|