1. 程式人生 > >機器學習演算法之樸素貝葉斯(Naive Bayes)--第一篇

機器學習演算法之樸素貝葉斯(Naive Bayes)--第一篇

引言

先前曾經看了一篇文章,一個老外程式設計師寫了一些很牛的Shell指令碼,包括晚下班自動給老婆發簡訊啊,自動衝Coffee啊,自動掃描一個DBA發來的郵件啊, 等等。於是我也想用自己所學來做一點有趣的事情。我的想法如下:

  1. 首先我寫個scrapy指令碼來抓取某個網站上的笑話
  2. 之後寫個Shell指令碼每天早上6點自動抓取最新的笑話
  3. 然後用樸素貝葉斯模型來判斷當前的笑話是否屬於成人笑話
  4. 如果是成人笑話,用指令碼把它自動發給好兄弟的郵箱
  5. 如果不是成人笑話,用指令碼把它自動發給女朋友的郵箱

在這個系列的文章中,你會學到:

  1. 樸素貝葉斯背後的數學原理
  2. 演算法具體的工作過程(結合例項)
  3. scikit-learn快速實現演算法

這個系列的文章還會涉及到scrapy,pandas,numpy的一些知識,遇到這些知識的時候我會具體解釋的。這個系列的文章我會主要詳細的介紹上面的第3步實現過程,其餘的我會將原始碼放在github上供大家參考。下面,就讓我們享受這個奇妙之旅吧。

樸素貝葉斯概述

眾所周知,樸素貝葉斯是一種簡單但是非常強大的線性分類器。它在垃圾郵件分類,疾病診斷中都取得了很大的成功。它只所以稱為樸素,是因為它假設特徵之間是相互獨立的,但是在現實生活中,這種假設基本上是不成立的。那麼即使是在假設不成立的條件下,它依然表現的很好,尤其是在小規模樣本的情況下。但是,如果每個特徵之間有很強的關聯性和非線性的分類問題會導致樸素貝葉斯模型有很差的分類效果。

樸素貝葉斯背後的數學原理

後驗概率(Posterior Probabilities)

為了更好地瞭解樸素貝葉斯分類器是怎麼工作的,瞭解貝葉斯法則是很必要的。它可以被簡單地描述成下面的公式:

=

我們可以用一個關於老天是否下雨的例子來解釋上面的公式。

P()=P()P()P()

我們可以看到,如果我們想要在給定現象下,預測某種結果的概率,我們必須知道:1、在給定這種結果下,出現這種現象的概率。2、出現這種結果的概率。3、出現這種現象的概率。

在實際應用中,我們的現象不可能只有一個,比如,在垃圾郵件分類中,甚至可能有幾千個詞的特徵向量。下面,我將引入一些數學上的記號來統一後面的表達:

  1. ωjj{1,2,3,,m}
  2. xiii{1,2,3,,n}

樸素貝葉斯的目標就是分別求得P(ωj|)j{1,2,3,,m},選出最大的概率。

下面我將分別解釋上面的三個概率。

條件概率(Conditional Probabilities)

隨機變數的獨立性意味著我告訴你一個變數的出現,並不影響你相信另一個出現的可能。最簡單的一個例子就是拋硬幣,也就是第一次的反正面並不會影響你再一次丟擲現反正面的概率(也就是0.5)。

樸素貝葉斯模型中,特徵之間不僅僅是獨立的,而且是加條件的獨立的。比如說:我的特徵向量xn,那麼我可以把概率寫成下面的形式:

P(x|ωj)=P(x1|ωj)P(x2|ωj)P(x3|ωj)P(xn|ωj)=k=1nP(xk|ωj)

P(x|ωj)的概率我們可以理解成:在給定屬於某個類別的條件下,觀察到出現現象x的概率。在特徵向量中的每個特點的概率我們都可以通過極大似然估計(maximum-likelihood estimate)來求得,也就是簡單地求某個特徵在某個類別中的頻率,公式如下:

P(xi|ωj)=Nxi|ωjNωj(i=(1,,n))
  • Nxi|ωj:
生成學習演算法樸素演算法

2  樸素貝葉斯演算法 在GDA中,特徵向量是連續的實值向量。現在讓我們討論一種不同的學習演算法,在這個演算法中,是離散值。 對於我們的激勵的例子,考慮使用機器學習建立一個電子郵件的垃圾郵件過濾器。這裡,我們希望根據它們是未經請求的商業(垃圾)電子郵件還是非垃圾郵件進行分

機器學習入門樸素

樸素貝葉斯法 樸素貝葉斯法是基於貝葉斯定理和特徵條件獨立假設分類方法。對於給定訓練集,首先基於特徵條件獨立性的假設,學習輸入/輸出聯合概率(計算出先驗概率和條件概率,然後求出聯合概率)。然後基於此模型,給定輸入x,利用貝葉斯概率定理求出最大的後驗概率作為輸出y

機器學習實戰樸素

問題1 來源:使用樸素貝葉斯過濾垃圾郵件 描述:spamTest()和textParse()讀檔案時編譯通不過 報錯:UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 199: illegal

【python】機器學習實戰樸素分類

一,引言   前兩章的KNN分類演算法和決策樹分類演算法最終都是預測出例項的確定的分類結果,但是,有時候分類器會產生錯誤結果;本章要學的樸素貝葉斯分類演算法則是給出一個最優的猜測結果,同時給出猜測的概率估計值。 1 準備知識:條件概率公式 相信學過概率論的同學對於概

機器學習演算法總結--樸素

這次需要總結的是樸素貝葉斯演算法,參考文章: 簡介 樸素貝葉斯是基於貝葉斯定理與特徵條件獨立假設的分類方法。 貝葉斯定理是基於條件概率來計算的,條件概率是在已知事件B發生的前提下,求解事件A發生的概率,即P(A|B)=P(AB)P(B),而貝葉

機器學習實戰樸素_程式碼註釋

#-*- coding: UTF-8 -*- from numpy import * def loadDataSet():#建立包含文件的訓練集和各文件對應的標籤列表 postinglist = [['my','dog','has','flea','problems',

利用樸素Navie Bayes進行垃圾郵件分類

判斷 ase create numpy water 向量 not in imp img 貝葉斯公式描寫敘述的是一組條件概率之間相互轉化的關系。 在機器學習中。貝葉斯公式能夠應用在分類問題上。這篇文章是基於自己的學習所整理。並利用一個垃圾郵件分類的樣例來加深對於理論的理解

樸素Naive Bayesian

tar 不可 https 獲得 現實 叠代 結構 步驟 無法 一、貝葉斯定理 機器學習所要實現的均是通過有限的訓練樣本盡可能的準確估計出後驗概率,也就是所說的結果情況。大題分為判別式模型和生成式模型。 1. 判別式模型:直接通過建模P(結果|特征)的方式來預測結果,典型代

樸素Nave Bayes

1.條件概率   事件A和事件B 事件A發生的前提下事件B發生的概率: P(AB) = P(B|A)P(A)   舉例:     十個球其中 3 黑 7白,做兩次不放回的取球,求兩次都拿到黑球的概率(事件A為第一次取,事件B為第二次取。)     事件A 發生的概率 P(A) = 3/7,事

機器學習分類演算法樸素

一、概念 樸素貝葉斯模型(Naive Bayesian Model,NBM)是以條件概率為基礎的分類器,是一種監督演算法,常被用於文字分類和垃圾郵件過濾。貝葉斯理論解決的是逆向概率問題,即通過已經發生的已知的概率來推測未發生的事將會發生的概率。    二、計算 樸素貝葉斯各個事件發

機器學習-分類演算法樸素

條件概率公式:P(A|B) = P(AB)/P(B) 貝葉斯定理:P(A|B) = P(B|A)P(A)/P(B) 樸素貝葉斯演算法思想:給定一個待分類的資料 X={a1,a2,……,aN},即N個特徵項,目標分類集合Y={y1,y2,……,yK},即有K個分類 通過計算P

機器學習經典演算法樸素分類

很多人都聽說過貝葉斯原理,在哪聽說過?基本上是在學概率統計的時候知道的。有些人可能會說,我記不住這些概率論的公式,沒關係,我儘量用通俗易懂的語言進行講解。 /*請尊重作者勞動成果,轉載請標明原文連結:*/ /* https://www.cnblogs.com/jpcflyer/p/11069659