機器學習之樸素貝葉斯法

2021-08-17 05:49:55 字數 2884 閱讀 8092

樸素貝葉斯法也是常用的機器學習的演算法,但是剛接觸的時候各種概率公式,各種懵逼。

只能去翻看概率論與數理統計的書,然後再返回來看樸素貝葉斯,基本上能看懂。

樸素貝葉斯的推導過程在各種機器學習書上都能找到,樸素貝葉斯的分類器可表示成:

那麼這個公式該怎麼用呢,我來說說我的理解:

1.先計算出各個類的在總的樣本中的概率

2.再計算出各個特徵的不同取值在各個類的條件下的概率

3.然後根據**樣本套用上面的公式,取概率較大的那一類。

看這個例子:

第一步:

第二步:

第三步:

下面是用python3實現的樸素貝葉斯法:(主要參考機器學習實戰)

from numpy import *

def loaddataset():

postinglist=[[『my』, 『dog』, 『has』, 『flea』, 『problems』, 『help』, 『please』],

[『maybe』, 『not』, 『take』, 『him』, 『to』, 『dog』, 『park』, 『stupid』],

[『my』, 『dalmation』, 『is』, 『so』, 『cute』, 『i』, 『love』, 『him』],

[『stop』, 『posting』, 『stupid』, 『worthless』, 『garbage』],

[『mr』, 『licks』, 『ate』, 『my』, 『steak』, 『how』, 『to』, 『stop』, 『him』],

[『quit』, 『buying』, 『worthless』, 『dog』, 『food』, 『stupid』]]

classvec = [0,1,0,1,0,1]  #1代表侮辱性文字,0代表正常言論

return postinglist, classvec

def createvocablist(dataset):

vocabset = set()

for document in dataset:

vocabset = vocabset | set(document) #去掉document中重複的元素,並合併成列表

return list(vocabset)

def setofwords2vec(vocablist, inputset):

returnvec = [0]*len(vocablist)#建立乙個0列表

for word in inputset:#遍歷列表

if word in vocablist:

returnvec[vocablist.index(word)] = 1#把word在vocablist中的位置在teturnvec中用1呈現

else:

print(「the word: %s is not in my vocabulary!」 % word)

return returnvec

def trainnb0(trainmatrix,traincategory):#引數是文件矩陣和每篇文件類別標籤所構成的向量

numtraindocs = len(trainmatrix)#獲得文件的組數

numwords = len(trainmatrix[0])#獲得文件矩陣第一組文件的長度

pabusive = sum(traincategory)/float(numtraindocs)#侮辱性文字所佔的概率

p0num = ones(numwords); p1num = ones(numwords)

p0denom = 2.0; p1denom = 2.0

for i in range(numtraindocs):

if traincategory[i] == 1: #當類別是侮辱性文字的時候

p1num += trainmatrix[i] #對應詞的個數就相加

p1denom = p1denom+ sum(trainmatrix[i])#詞的總數相加

# print(p1num)

# print(p1denom)

else:

p0num +=  trainmatrix[i]

p0denom += sum(trainmatrix[i])#同上

# print(p0num)

# print(p0denom)

p1vect = log(p1num/p1denom)

p0vect = log(p0num/p0denom)

return p0vect,p1vect,pabusive #返回侮辱性文字的概率,和 侮辱性文字和非侮辱性文字各個詞的概率

listoposts,listclasses = loaddataset()

myvocablist = createvocablist(listoposts)

p0v,p1v,pab, = trainnb0(traninmat,listclasses)

print(p0v,p1v,pab)

每天學習一點點,進步一點點。

機器學習之樸素貝葉斯

寫在前面 本文寫自初學時,若後續學習過程中有新的理解,將不定期進行更新 若文中敘述有誤,望不吝賜教,也將及時修改 貝葉斯分類是一類分類演算法的總稱,這類演算法均以貝葉斯定理為基礎,故統稱為貝葉斯分類。而樸素樸素貝葉斯分類是貝葉斯分類中最簡單,也是常見的一種分類方法。在理解樸素貝葉斯之前,需要對兩個數...

機器學習之樸素貝葉斯

樸素貝葉斯 1 樸素貝葉斯 2 一 高斯樸素貝葉斯 gaussiannb實現了高斯樸素貝葉斯分類演算法,設假設特徵的可能性是高斯的 p x i y 12 y 2exp xi y 22 y 2 p x i y frac exp frac p xi y 2 y2 exp 2 y2 xi y 2 1 引數...

機器學習 樸素貝葉斯

樸素貝葉斯原理 1.貝葉斯公式 2.樸素貝葉斯的模型 3.後驗概率最大化的含義 4.樸素貝葉斯的引數估計 4.1.特徵是離散值 假設符合多項式分布 4.2.特徵是稀疏的離散值 假設符合伯努利分布 4.3.特徵是連續值 假設符合正態分佈 5.樸素貝葉斯演算法過程 6.樸素貝葉斯演算法小結 scikit...