樸素貝葉斯法也是常用的機器學習的演算法,但是剛接觸的時候各種概率公式,各種懵逼。
只能去翻看概率論與數理統計的書,然後再返回來看樸素貝葉斯,基本上能看懂。
樸素貝葉斯的推導過程在各種機器學習書上都能找到,樸素貝葉斯的分類器可表示成:
那麼這個公式該怎麼用呢,我來說說我的理解:
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...