樸素貝葉斯 從詞向量計算概率

2021-08-09 11:53:47 字數 3565 閱讀 4846

函式偽**:

計算每個類別中的文件數目

對每篇訓練文件:

對每個類別:

如果詞條出現在文件中------增加該詞條的計數值

增加所有詞條的計數值

對每個類別:

對每個詞條:

將該詞條的數目除以總詞條數目得到條件概率

返回每個類別的條件概率

具體**:

#coding:-utf-8

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]

return postinglist,classvec

def createvocalist(dataset):

vocabset = set()

for document in dataset:

vocabset = vocabset|set(document)

return list(vocabset)

def setofwordds2vec(vocablist,inputset):

returnvec = [0]*len(vocablist)

#print inputset

for word in inputset:

if word in vocablist:

#print word

returnvec[vocablist.index(word)] = 1

else:

print "the word:%s is not in my vocabulary!" % word

return returnvec

def trainnb0(trainmatrix,traincategory):

#矩陣正一共有6行資料

numtraindocs = len(trainmatrix)

#print numtraindocs:6

#每行一共有32個元素

numwords = len(trainmatrix[0])

#print numwords:32

pabusive = sum(traincategory)/float(numtraindocs)

#print pabusive:0.5

#建立一共32個元素的一維陣列

p0num = zeros(numwords)

p1num = zeros(numwords)

p0denom = 0.0;p1denom = 0.0

for i in range(numtraindocs):

#print traincategory[i]

#print sum(trainmatrix[i])

#print trainmatrix[i]

if traincategory[i] == 1:

#對類別1(侮辱性),每個詞向量文件累加

p1num += trainmatrix[i]

#每個詞向量文件中所有詞相加,即一共有多少個侮辱性的詞

p1denom += sum(trainmatrix[i])

else:

# 對類別0(正常詞),每個詞向量文件累加

p0num += trainmatrix[i]

# 每個詞向量文件中所有詞相加,即一共有多少個正常詞

p0denom += sum(trainmatrix[i])

p1vect = p1num/p1denom

p0vect = p0num/p0denom

#返回的是給定文件類別條件下詞彙表中單詞的出現概率

return p0vect,p1vect,pabusive

listopost,listclasses = loaddataset()

myvocalist = createvocalist(listopost)

#print myvocalist

returnvec = setofwordds2vec(myvocalist,listopost[0])

#print returnvec

trainmat =

for postindoc in listopost:

p0vect,p1vect,pabusive = trainnb0(trainmat,listclasses)

print p0vect

print p1vect

看結果,給定文件類別條件下詞彙表中單詞的出現概率。

p0vect:

[ 0.04166667  0.04166667  0.04166667  0.          0.          0.04166667

0.04166667  0.04166667  0.          0.04166667  0.04166667  0.04166667

0.04166667  0.          0.          0.08333333  0.          0.

0.04166667  0.          0.04166667  0.04166667  0.          0.04166667

0.04166667  0.04166667  0.          0.04166667  0.          0.04166667

0.04166667  0.125     ]

p1vect:

[ 0.          0.          0.          0.05263158  0.05263158  0.          0.

0.          0.05263158  0.05263158  0.          0.          0.

0.05263158  0.05263158  0.05263158  0.05263158  0.05263158  0.

0.10526316  0.          0.05263158  0.05263158  0.          0.10526316

0.          0.15789474  0.          0.05263158  0.          0.          0.        ]

從結果中,可以看出詞彙表中第乙個詞是cute,其在類別0中出現一次,而在類別1中未出現,對應的條件概率為別為0.04166667和0。

條件概率,全概率公式,貝葉斯公式,樸素貝葉斯

本文摘自黃清龍等編著的 概率論與數理統計 我們以乙個例子來闡述樸素貝葉斯思想。例子來自樸素貝葉斯分類 原理 假設根據以前的經驗獲得如下的資料。然後給你乙個新的資料 身高 高 體重 中 鞋碼 中 請問這個人是男還是女?判斷是男還是女,是分類問題,記男為c1,女為c2。身高體重鞋碼是樣本x的屬性,記x1...

機器學習具體解釋 概率生成模型與樸素貝葉斯分類器

首先介紹生成模型的概念,然後逐步介紹採用生成模型的步驟。即對每一種類別ck 分別建立一種資料模型p x ck 把待分類資料x分別帶入每種模型中,計算後驗概率p ck x 選擇最大的後驗概率相應的類別。如果原始資料樣本有k類,生成學習演算法是通過對原始資料類p x ck 與p ck 建立資料類模型後,...

從樸素貝葉斯分類器到貝葉斯網路(下)

書接上文 從樸素貝葉斯分類器到貝葉斯網路 上 三 貝葉斯網路 貝葉斯網路 bayesian network 是一種用於表示變數間依賴關係的資料結構,有時它又被稱為信念網路 belief network 或概率網路 probability network 在統計學習領域,概率圖模型 pgm,proba...