機器學習 第一章貝葉斯定理及其應用

2022-07-13 12:30:09 字數 4672 閱讀 9433

貝葉斯統計都是以條件概率,聯合概率為基礎的,所以我們從概率,條件概率,聯合概率開始,然後到貝葉斯定理,最後講乙個貝葉斯的應用--垃圾郵件的過濾

概率:事件發生的可能性,比如拋一枚硬幣,正面向上的可能性有50%,擲色子點數為6的可能性為1/6。我們用符號表示為p(a)

條件概率:滿足某些條件下事件發生的可能性,比如求乙個人在買了褲子的前提下再買衣服的概率,我們用符號表示為p(b|a),即事件a發生下b發生的概率

聯合概率:多個事件同時發生的可能性,比如拋硬幣兩次都朝上的概率p(ab) = p(a)p(b),前提是事件是相互獨立的互不影響,如果不獨立則聯合概率為p(ab) = p(a)p(b|a)

當p(b) = p(b|a)時表示事件是相互獨立的。

貝葉斯定理

利用聯合概率我們可以計算出條件概率,比如知道了p(ab)和p(a)我們想知道事件a發生的前提下b發生的概率則p(b|a) = p(ab) / p(a),可如果我們想計算p(a|b)的概率呢?

不巧的是p(a|b)並不等於p(b|a)。

我們從聯合概率知道概率乘積的順序可以交換即p(ab) = p(ba),然後將兩個概率展開p(a)p(b|a) = p(b)p(a|b),我們可以清楚的看到我們想要的p(a|b)就在其中

p(a|b) = p(b|a)p(a) / p(b),這就是貝葉斯定理。

p(a)就是先驗概率,我們在計算前假設的某個概率,比如拋硬幣正面向上的概率為50%

p(b|a)就是後驗概率,這是我們看到資料的後計算得到的

p(a|b)就是先驗概率和後驗概率計算得到的,稱似然度

p(b) 在任何情況下該事件發生的概率,稱標準化常量 p(b) = p(b1)p(b1|a1) + p(b2)p(b2|a2).....

貝葉斯估計

用極大似然估計可能會出現所要估計的概率值為0的情況,這會影響到後驗概率的計算結果,使得分類有偏差。我們使用貝葉斯估計,即新增乙個λ修正引數

貝葉斯公式 p(b|a) = (p(ab) + λ) / (p(a) + sλ)  λ >= 0 s表示隨機變數各個取值的頻數

垃圾郵件的過濾

垃圾郵件就是包含了某些詞語,我們只有找到這些詞,並計算出在這些詞語出現的前提下是垃圾郵件的概率和不是垃圾郵件的概率,比較概率大小即

p(垃圾郵件 | w1,w2,w3,w4,w5...) 和 p(非垃圾郵件 | w1,w2,w3,w4,w5...)的大小。無法直接知道這個條件概率,所以貝葉斯又上場了,先寫出聯合概率,然後展開得

p(垃圾郵件 | w1,w2,w3,w4,w5...)p(w1,w2,w3,w4,w5...) = p(w1,w2,w3,w4,w5...| 垃圾郵件) p(垃圾郵件),再化簡得

p(垃圾郵件 | w1,w2,w3,w4,w5...) = p(w1,w2,w3,w4,w5...| 垃圾郵件) p(垃圾郵件) / p(w1,w2,w3,w4,w5...)

p(非垃圾郵件 | w1,w2,w3,w4,w5...) = p(w1,w2,w3,w4,w5...| 非垃圾郵件) p(非垃圾郵件) / p(w1,w2,w3,w4,w5...)

p(垃圾郵件) 就是先驗概率0.5, p(w1,w2,w3,w4,w5...| 垃圾郵件) 就是後驗概率,是根據所給資料計算的,因為兩個概率都除以了p(w1,w2,w3,w4,w5...),所以消去最終得到以下式子:

p(垃圾郵件 | w1,w2,w3,w4,w5...) = p(w1,w2,w3,w4,w5...| 垃圾郵件) p(垃圾郵件)

p(非垃圾郵件 | w1,w2,w3,w4,w5...) = p(w1,w2,w3,w4,w5...| 非垃圾郵件) p(非垃圾郵件)

import

numpy as np

import

repattern = re.compile(r'

\w+'

)class

bayes(object):

def__init__

(self,wordlist):

self.wordslist =wordlist

self.hamcnt =0

self.spamcnt =0

self.pham =np.ones(len(self.wordslist))

self.pspan =np.ones(len(self.wordslist))

self.phamwordcnt = 2self.pspanwordcnt = 2

defword_to_vector(self, word):

tempvector =np.zeros(len(self.wordslist))

for line in

pattern.findall(word):

if line in

self.wordslist:

tempvector[self.wordslist.index(line)] += 1.0

return

tempvector

defset_tran_data(self, word, flag):

vector =self.word_to_vector(word.strip())

ifflag:

self.pham +=vector

self.phamwordcnt +=sum(vector)

self.hamcnt += 1.0

else

: self.pspan +=vector

self.pspanwordcnt +=sum(vector)

self.spamcnt += 1.0

defclassifiy(self, word):

vector =self.word_to_vector(word)

pa = self.hamcnt / (self.hamcnt +self.spamcnt)

pb = self.spamcnt / (self.hamcnt +self.spamcnt)

panum = sum(np.log(self.pham / self.phamwordcnt)*vector)

pbnum = sum(np.log(self.pspan / self.pspanwordcnt)*vector)

if np.log(pa) + panum > np.log(pb) +pbnum:

return 1

else

:

return -1

if__name__ == "

__main__":

hamlist = [item for i in range(1, 20) for item in open(r'

c:\users\administrator\desktop\machinelearninginaction\ch04\email\ham\%s.txt

'% i, 'r'

).readlines() ]

spamlist = [item for i in range(1, 20) for item in open(r'

c:\users\administrator\desktop\machinelearninginaction\ch04\email\spam\%s.txt

'% i, 'r'

).readlines()]

wordlist1 = [word for line in hamlist for word in pattern.findall(line) if len(word) > 2]

wordlist2 = [word for line in spamlist for word in pattern.findall(line) if len(word) > 2]

wordlist1.extend(wordlist2)

temp =bayes(list(set(wordlist1)))

tranhamlist = [open(r'

c:\users\administrator\desktop\machinelearninginaction\ch04\email\ham\%s.txt

'% i, '

r').read() for i in range(1, 20)]

transpamlist = [open(r'

c:\users\administrator\desktop\machinelearninginaction\ch04\email\spam\%s.txt

'% i, '

r').read() for i in range(1, 20)]

for line in

tranhamlist:

temp.set_tran_data(line, true)

for line in

transpamlist:

temp.set_tran_data(line, false)

testlist = [open(r'

c:\users\administrator\desktop\machinelearninginaction\ch04\email\ham\%s.txt

'% i, '

r').read() for i in range(21, 26)]

for line in

testlist:

print temp.classifiy(line)

資料是機器學習實戰第4章

機器學習第一章

q 什麼是機器學習 機器學習不同於以往的計算機程式設計,致力於研究如何通過計算機手段,利用以往的經驗來改善系統自身的效能。一般的程式設計都是明確的告訴電腦該做什麼。機器學習希望提供資料給學習演算法,讓它自己學習,找到其種的規律。在面對新情況的時候就能應用已產生的模型,提供相應的判斷。機器學習的本質任...

機器學習第一章

今天進行了機器學習第一章的學習,我覺得首先你可以認清這些概念 1 模型 策略 演算法 2 分類與回歸的概念 3 監督 無監督 半監督問題 2 過擬合 欠擬合 下面是拓展的一些概念 海森矩陣 黑塞矩陣 hessian matrix 又譯作海森矩陣 海瑟矩陣 海塞矩陣等,是乙個多元函式的二階偏導數構成的...

《機器學習》 第一章

圖書館借了本機器學習,作者是 tom m.mitchell,亞馬遜這本書排名挺靠前的。好了,直接開篇。接下來大篇幅講述了,如何挑選訓練經驗,選擇目標函式,目標函式的表示,選擇函式逼近演算法。整個設計下來,分為了四大模組 執行系統 鑑定器 泛化器 實驗生成器。看過這本書的都會被第一章的跳棋學習深深吸引...