基於人工智慧的貝葉斯分類算法

2021-01-11 網易

  基於人工智慧的貝葉斯分類算法

  貝爾斯算法的應用:

  1.百度實時路況

  2.騰訊新聞分類

  3.數據清洗:數據補全

  4.數據歸類

  5.垃圾郵箱

  什麼是貝爾斯算法

  貝爾斯算法就是貝葉斯所研究的逆向概率: 給出一個條件,根據這個條件來推測某一個事件

  

  例子:有一黑盒裡面有若干個白球和黑球,當我們取出一個或幾個球之後,

  觀察這些球的顏色,推斷出黑白球的比例

  通過一些信息推出未知的信息,這就是逆向概率

  樸素貝葉斯算法就是應用先前事件的有關數據來估計未來事件發生的概率

  

  根據例題推導貝葉斯分類算法

  一所學校中有60%的男生,40%女生.男生全部穿長褲,女生一半穿長褲一半穿短裙,隨機挑選一個學生,穿長褲的概率是多少?

  假設 學校有U個人,

  P(男生)=60%

  P(女生)=40%

  P(長褲|男生)=100%

  P(長褲|女生)=50%

  首先我們正向算一下穿長褲的總人數和穿裙子的總人數:
穿長褲人數=U*P(男生)*P(長褲|男生):U*60\%*100\% + U*P(女生)*P(長褲|女生):U*40\%*50\%=0.8U穿長褲人數=UP(男生)P(長褲∣男生):U60%100%+UP(女生)P(長褲∣女生):U40%50%=0.8U

  穿裙子的總人數=U-0.8U=0.2U穿裙子的總人數=U0.8U=0.2U
如果你只能看見她/他穿的是長褲,但不知道他/她的性別,你能推斷出他/她是男生的概率麼?

  那么女生長褲該怎麼計算呢

  首先我們先計算出該學校中所有穿長褲的人數
U*P(男生)*P(長褲|男生)+U*P(女生)*P(長褲|女生)UP(男生)P(長褲∣男生)+UP(女生)P(長褲∣女生)
然後我們在算出所有穿長褲的女生
U*P(女生)*P(長褲女生)UP(女生)P(長褲女生)
用所有穿長褲的女生/所有穿長褲的人
P(長褲|女生)=U*P(女生)*P(長褲|女生)/U*P(男生)*P(長褲|男生)+U*P(女生)*G(長褲|女生)P(長褲∣女生)=UP(女生)P(長褲∣女生)/UP(男生)P(長褲∣男生)+UP(女生)G(長褲∣女生)
然後進行公式代換並簡化,假設

  男生=A

  女生=B

  長褲=C
P(B|C)=P(B)*P(C|B)/(P(A)*P(C|A)+P(B)*P(C|B))P(B∣C)=P(B)P(C∣B)/(P(A)P(C∣A)+P(B)P(C∣B))
簡化:在之前公式中將U約掉,表示所有穿長褲的人可以直接用**P來表示,用P(BC)**來表示所有穿長褲的女生

  簡化後公式:
P(B|C)=P(BC)/P(C)P(B∣C)=P(BC)/P(C)
進行公式變換
P(AB)=P(B|C)*P(C)P(AB)=P(B∣C)P(C)

  「|」 左邊代表的條件,右邊代表的是在這個條件下發生的概率,P(AB)代表的是同時發生的概率

  然後我們在進行轉換:
P(C)*P(B|C)=P(CB)=P(B)*P(C|B)P(C)P(B∣C)=P(CB)=P(B)P(C∣B)

  既然P*P(B|C)=P(B)*P(C|B),在將公式進行變換
P(C|B)=P(C)*P(B|C)/P(B)P(C∣B)=P(C)P(B∣C)/P(B)
最後這個公式就是我們推導出來的貝葉斯公式
P(A|B)=\frac{P(B|A)P(A)}{P(B)}P(A∣B)=P(B)P(B∣A)P(A)

  基於貝葉斯算法的郵件分類

  陳述:100封郵件,80封正常,20封垃圾郵件

  問題:1.當接收到一封新的含有"Viagra"這個詞的郵件,這封郵件是垃圾郵件的概率

  查看分析圖:01

  

  首先我們要知道算的Viagra在垃圾郵件中的概率,即P(垃圾郵件|Viagra)

  然後代入貝葉斯公式中
P(spam|Viagra)=\frac{P(Viagra|spam)P(spam)}{P(Viagra)}P(spam∣Viagra)=P(Viagra)P(Viagra∣spam)P(spam)
在這個公式左邊為 後驗概率 公式右邊為 先驗概率

  02

  

  根據概率表將數據套入公式之中

  P(垃圾郵件|Viagra)=P(Viagra|垃圾郵件)P(垃圾郵件)/P(Viagra)=(4/20)(20/100)/(5/100)=0.8

  得出是垃圾郵件的概率是0.8

  這種情況下,我們只考慮的了一個單詞,如果包含多個單詞,該如何計算:

  

  2.如果一封郵件中,含有W1,W4這個單詞,但沒有出現W2,W3這倆個單詞,求這是垃圾郵件的概率

  根據問題推出公式

  

  但是在概率表中發現,沒有符合分母的這種情況,該如何解決?

  有句話是這麼說的:*如果倆個事件是相互獨立的,那麼就可以寫為P(AB)=P(A)P(B),前提是這倆個事件是相互獨立的.

  而分母的這種情況,正好符合上述情況,那麼就可以寫為:
P(w1)*P(!w2)*P(!w3)*P(w4)P(w1)P(!w2)P(!w3)P(w4)
分子類比分母也可以這麼寫

  最後變化後的公式:

  

  然後我們將數據代入公式

  分母相同可將它約掉,垃圾郵件的總似然為:
(4/20)*(10/20)*(20/20)*(12/20)*(20/100)=0.012(4/20)(10/20)(20/20)(12/20)(20/100)=0.012
在這種情況下6:7

  非垃圾郵件的總似然為:
(1/80)*(66//80)*(71/80)*(23/80)*(80/100)=0.002(1/80)(66//80)(71/80)(23/80)(80/100)=0.002
這種情況下是1:7

  計算出來後,它們比值為6:1

  6:7約等於為85.7%,是垃圾郵件的概率為85.7%

  3.假設一封郵件中,包含了w1,w2,w3,w4這4個單詞,該如何計算這是垃圾郵件的概率

  代入貝葉斯公式中
P(spam|w1,w2,w3,w4)=\frac{P(w1,w2,w3,w4)*P(spam)}{P(w1,w2,w3,w4)}P(spam∣w1,w2,w3,w4)=P(w1,w2,w3,w4)P(w1,w2,w3,w4)P(spam)
然後我們在把數據代入公式中計算,先算分子
P(w1|spam)*P(w2|spam)*P(w3|spam)*P(w4|spam)P(w1∣spam)P(w2∣spam)P(w3∣spam)P(w4∣spam)
當我們在計算時發現W3出現的概率是0,那麼這個公式的結果就是0,但是這就成為了一個必然事件,僅僅因為W3的概率,而否定所有其他情況,那麼這個結論就是不準確的.

  這時,我們就需要拉普拉斯估計來解決這個問題.

  拉普拉斯估計:

  拉普拉斯估計本質上是給頻率表中的每一個計數加一個較小的數,這樣就避免了每一個類中每個特徵發生概率為零的情況.

  明白了拉普拉斯估計,然後代入到問題當中:

  在添加4封垃圾郵件,每一封垃圾郵件中只包含一個單詞.當我們添加4封垃圾郵件後,還要在添加16封正常郵件,

  因為在表中可以看出,垃圾郵件和正常郵件的比值是4:1,所以我們要同比的添加16封正常郵件

  然後,我們把改變後的值在代入公式當中進行計算

  垃圾郵件的似然為:
(5/24)*(11/24)*(1/24)*(13/24)*(20/108)=0.0004(5/24)(11/24)(1/24)(13/24)(20/108)=0.0004
非垃圾郵件的似然為:
(2/84)*(15/84)*(9/84)*(24/84)*(80/100)=0.0001(2/84)(15/84)(9/84)(24/84)(80/100)=0.0001
使用拉普拉斯估計後 垃圾郵件的概率為80%,是非垃圾郵件的概率為20%

  使用Python來進行測試

  在運行之前需要添加一個sklearn模塊,在PyCharm中的settings中的Plugins中搜索

  sklearn並進行安裝

  截取部分代碼

  from skearn naive_bayes import MultinomialNB #sklearn模塊from sklearn feature_extraction.text import CountVectorizer# 讀取文本構建語料庫corpus = []labels = []courpus_test = []labels_test = []f = codecs.open("d:/sms_spam.txt", "rb") #讀取數據集count = 0while True: line = f.readline() if count == 0: count = count +1 continue if line: count = count +1 line = line.split(",") lable = line[0] sentence = line[1] if count > 5550: #訓練數據集次數,總共是5560條數據,拿5550條進行訓練,剩下10條來進行測試 corpus_test.append(sentence) if "ham"==label: labels_test.append(0) #0表示正常,1表示垃圾郵件 elif "spam"==label: labels_test.append(1) else corpus.append(sentence) if"ham" == label: labels.append(0) elif "spam" == label: labels.append(1) else : break vectorizer=CounVectorizer() fea_train = vectorizer vectorizer=CountVectorizer() fea_train = vectorizer.fit_transform(corpus) print vectorizer.get_feature_names() print fea_train.toarray() # vectorizer2=CountVectorizer(vocabulary=vectorizer.vocabulary_) fea_test = vectorizer2.fit_transform(corpus_test)# print fea_test print fea_test.toarray()# print vectorizer2.get_feature_names() #create the Multinomial Naive Bevesian Classifire 樸素貝葉斯 clf = MultinomialNB(alpha = 1) #這裡用到拉普拉斯估計,給每一個值加一個較小的數,一般為1 #clf就是模型 這個模型中就保存著一個概率表 clf.fit(fea_train.labels) #將訓練數據傳過來 #predict()就是根據貝爾斯算法來計算 pred = clf.predict(fea_test) #預測,將訓練數據傳進去 for p in pred: if p == 0: #如果預測出來為0,則是正常郵件,否則為垃圾郵件 print ("正常郵件") else: print ("垃圾郵件")

  然後我們來執行,查看結果

  04

  然後和數據集進行對比,發現只有10%的錯誤率,正確率達到了90%,一般來說一個模板達到80%以上就可以進行使用.

  【1】想領取大數據知識可以關注我下方評論轉發後,留言「資料」。

  【2】部分資料有時間限制,抓緊時間吧~、

  感謝大家支持!

相關焦點

  • 基於貝葉斯定理的算法——樸素貝葉斯分類
    不過今天我們介紹的樸素貝葉斯分類器通過獨立假設簡化了概率的計算,節省了內存,可以很好地用於數據量大的情況。下面我們首先來了解這一算法的數理背景——貝葉斯定理。這一算法是由我們在概率論中學到的貝葉斯定理延伸出來的。我們知道貝葉斯公式為:其中,
  • 專欄| 貝葉斯學習與未來人工智慧
    目前,基於貝葉斯模型的人腦認知理論已經獲得長足的進步,能夠有效解釋概念學習、物體識別、感知-運動集成和歸納等多種人腦認知行為。3. 貝葉斯理論和其它人工智慧理論基於貝葉斯理論的學習和推斷是人工智慧的重要分支。那麼,從類腦計算角度來看,貝葉斯理論和其它人工智慧方法,特別是深度學習方法,又是什麼關係呢?我們用下圖做一個概要性的說明。
  • C#與人工智慧(第4講)創建樸素貝葉斯分類器
    今天,我給大家帶來C#與人工智慧的第4講——創建樸素貝葉斯分類器。#人工智慧#本文先實現一個簡單的貝葉斯分類器,輸入二進位,判斷0-7。後續文章會講述它的高級應用——貝葉斯推理機。C#與人工智慧(第3講)創建神經網絡C#與人工智慧(第2講)創建WinForm程序C#與人工智慧(第1講)安裝C#編程環境託馬斯·貝葉斯是18世紀英國數學家,概率論、貝葉斯統計的創立者。貝葉斯方法基於貝葉斯原理,對樣本數據集進行分類。它綜合了先驗概率、後驗概率,避免僅用先驗概率產生的主觀偏見。
  • 人工智慧研學社 · 入門組 | 《終極算法》研習第二期
    可以說,機器學習所代表的人工智慧,已經不再是一個新鮮的概念,科技、醫療、金融、安防,甚至政治、社會研究,都逐漸將這類強大的算法整合到自己的架構中去,以發揮更大的效能。在這樣的浪潮之下,了解人工智慧與機器學習,是每一個關心科技與社會發展的人必做的功課。然而,這並不是一個低門檻的領域,人工智慧也有其漫長的歷史和複雜的發展結構,想要了解事情的全貌,無法一蹴而就。
  • 解讀實踐中最廣泛應用的分類模型:樸素貝葉斯算法
    貝葉斯模型在機器學習以及人工智慧中都有出現,cherry 分類器使用了樸素貝葉斯模型算法,經過簡單的優化,使用 1000 個訓練數據就能得到 97.5% 的準確率。雖然現在主流的框架都帶有樸素貝葉斯模型算法,大多數開發者只需要直接調用 api 就能使用。但是在實際業務中,面對不同的數據集,必須了解算法的原理,實現以及懂得對結果進行分析,才能達到高準確率。
  • 模式識別與機器學習(教學大綱)|向量|貝葉斯|算法|神經網絡_網易訂閱
    本課程全面講授模式識別與機器學習的基本概念與典型算法,以計算機視覺、自然語言處理中的問題為典型應用,培養學生對人工智慧的研究興趣,為繼續從事模式識別與機器學習方向的科學研究與工程應用打下堅實的基礎。
  • 樸素貝葉斯與文本分類
    樸素貝葉斯 (Naive Bayesian algorithm) 是一種基於概率統計的分類方法,主要用到了貝葉斯定理和特徵條件獨立性假設。樸素貝葉斯具有悠久的歷史,其算法邏輯比較簡單,有健壯的性能,通常可以用於文本分類、信用評估等方面。
  • 聚類算法簡析(一):樸素貝葉斯算法的場景案例
    本文作者通過一些場景案例,帶領大家了解一下樸素貝葉斯算法作為聚類算法中的一員,如何來區分各類數組。通過一組參數模型來區分互斥群組中的個體十分常見,我們可以使用樸素貝葉斯分析來應用於這種場景,取決於模型的相似矩陣算法常常運用在估算決策論框架的矩陣中。
  • 基於多個特徵分塊貝葉斯分類器融合策略的人臉識別方法
    摘要:提出一種基於奇異值分解和貝葉斯決策的人臉特徵提取與識別算法。通過對人臉圖像樣本進行幾何歸一化和灰度均衡化後,結合分塊與加權,運用奇異值分解,分別獲得特徵臉和標準臉,然後採用多個基於特徵分塊的貝葉斯分類器(FBBC)的融合策略進行分類識別。實驗驗證了該方法的有效性,具有良好的精煉和實時性品質指標。
  • 幾種分類算法初識
    常用的分類算法包括:決策樹分類法,樸素的貝葉斯分類算法(native Bayesian classifier)、基於支持向量機(SVM)的分類器,神經網絡法,k-最近鄰法(k-nearest neighbor,kNN),模糊分類法等等1、決策樹決策樹是一種用於對實例進行分類的樹形結構。一種依託於策略抉擇而建立起來的樹。
  • 機器學習算法集錦:從貝葉斯到深度學習及各自優缺點
    )深度學習(Deep Learning)支持向量機(Support Vector Machine)降維算法(Dimensionality Reduction Algorithms)聚類算法(Clustering Algorithms)基於實例的算法(Instance-based Algorithms)貝葉斯算法(Bayesian Algorithms)關聯規則學習算法(Association Rule
  • 機器學習算法之樸素貝葉斯
    一、貝葉斯定理貝葉斯定理由英國數學家貝葉斯(Thomas Bayes 1702-1761)發展用來描述兩個條件概率之間的關係在B條件下A發生的概率: P(A∣B)=P(AB)/P(B)在A條件下B發生的概率: P(B∣A)=P(AB)/P
  • 樸素貝葉斯算法及其應用
    在這篇文章中,我們將嘗試以簡單的方式理解什麼是樸素貝葉斯,它是如何工作的以及我們如何應用樸素貝葉斯分類器將文本或評論分類為「肯定」或「否定」,我們將通過電影評論案例進行研究。什麼是樸素貝葉斯?貝葉斯定理是由Reverend Bayes開發的最早的概率推理算法之一(他過去常常嘗試推斷上帝的存在)並且對於某些用例仍然表現得非常好。
  • python實現高斯樸素貝葉斯分類器
    python實現高斯樸素貝葉斯分類器    在這篇文章中,我們將使用我最喜歡的機器學習庫scikit-learn在Python中實現樸素貝葉斯分類器。接下來,我們將使用經過訓練的樸素貝葉斯(監督分類法)模型來預測人口收入。
  • 樸素貝葉斯算法及應用案例
    作者:陳千鶴 來源:人工智慧學習圈本篇主要介紹樸素貝葉斯算法及應用案例。以Tatinic數據集為例進行應用,同時介紹數據處理,數據集的劃分,算法效果評估等內容。一、簡介樸素貝葉斯法是基於貝葉斯定理與特徵條件獨立假設的分類方法 。
  • 樸素貝葉斯實戰篇之新浪新聞分類
    這樣,我們的樸素貝葉斯分類器就改進完畢了。三、樸素貝葉斯之過濾垃圾郵件在上篇文章那個簡單的例子中,我們引入了字符串列表。使用樸素貝葉斯解決一些現實生活中的問題時,需要先從文本內容得到字符串列表,然後生成詞向量。下面這個例子中,我們將了解樸素貝葉斯的一個最著名的應用:電子郵件垃圾過濾。
  • 清華大學朱軍:貝葉斯學習回顧與最新進展|YEF 2020
    其中,朱軍教授做了題為《貝葉斯學習回顧與展望》報告,總時長為1個小時左右,內容主要分為五個部分:貝葉斯理論應對不確定性、貝葉斯理論和經典算法、可擴展的貝葉斯方法、珠算編程庫以及應用貝葉斯理論的一些例子。下文是本場報告的文字版,由 AI 科技評論編輯。1貝葉斯應對不確定性為什麼要用貝葉斯做機器學習或者人工智慧?
  • 【華泰金工林曉明團隊】金工:人工智慧選股之樸素貝葉斯模型
    本文中,我們從樸素貝葉斯算法入手,分析比較了幾種常見的生成模型(包括線性判別分析和二次判別分析)應用於多因子選股的異同,希望對本領域的投資者產生有實用意義的參考價值。  樸素貝葉斯模型構建細節:月頻滾動訓練,結合基於時間序列的交叉驗證  樸素貝葉斯模型的構建包括特徵和標籤提取、特徵預處理、訓練集合成和滾動訓練等步驟。
  • 人工智慧之Apriori算法
    人工智慧機器學習有關算法內容,請參見公眾號「科技優化生活」之前相關文章。人工智慧之機器學習主要有三大類:1)分類;2)回歸;3)聚類。Apriori算法正是基於這樣的事實:算法使用頻繁項集性質的先驗性質,即頻繁項集的所有非空子集也一定是頻繁的。
  • 清華大學朱軍:貝葉斯學習回顧與最新進展| YEF 2020
    1  貝葉斯應對不確定性  為什麼要用貝葉斯做機器學習或者人工智慧?主要因為「不確定性」的存在。 首先是處理對象的不確定性 ,例如無人駕駛,其環境和系統就存在很多我們未知的隨機因素。  核心的思想是對後驗分布(q)直接進行性質約束,例如定義後驗分布在某些分類任務上的性能。這種靈活的建模框架能夠完成推理與凸正則化所需的post數據後驗分布。當凸正則化是誘導從線性算子的後驗分布,可以用凸分析理論求解RegBayes問題。  在RegBayes的框架指導下,發展了一系列優秀的算法,包括將最大間隔準則融入到貝葉斯推理、將知識(如一階謂詞邏輯表示的知識)融入到貝葉斯推理中等。