資源簡(jiǎn)介
壓縮包中包括python腳本和一個(gè)PPT。
在UtralEdit中打開這兩個(gè)腳本NBayes_lib.py和NBayes_test.py就可以查看腳本,然后運(yùn)行NBayes_test.py這個(gè)腳本就可以得到測(cè)試集文本1的分類結(jié)果是0
PPT詳解了樸素貝葉斯算法的原理以及這個(gè)文本分類器的程序思想和運(yùn)行結(jié)果詳解,希望對(duì)你能夠有幫助,如果有任何問(wèn)題,請(qǐng)留言!

代碼片段和文件信息
#encoding:?utf-8
import?numpy?as?np
from?numpy?import?*
#postingList?是訓(xùn)練文本,classVec?是每個(gè)文本對(duì)應(yīng)的分類
def?loadDataSet():
postingList?=?[[‘my‘‘dog‘‘has‘‘false‘‘problems‘‘help‘‘please‘]
???????????????[‘maybe‘‘not‘‘take‘‘him‘‘to‘‘dog‘‘park‘‘stupid‘]
???????????????[‘my‘‘dalmation‘‘is‘‘so‘‘cute‘‘I‘‘love‘‘him‘‘my‘]
???????????????[‘stop‘‘posting‘‘stupid‘‘worthless‘‘garbage‘]
???????????????[‘mr‘‘licks‘‘a(chǎn)te‘‘my‘‘steak‘‘how‘‘to‘‘stop‘‘him‘]
???????????????[‘quit‘‘buying‘‘worthless‘‘dog‘‘food‘‘stupid‘]]
classVec?=?[010101]????#‘1‘?is?abusive??‘0‘?is?not
return?postingListclassVec
#貝葉斯算法類
class?NBayes(object):
#定義方法,方法的第一個(gè)參數(shù)必須是self,self是指類實(shí)例對(duì)象本身
def?__init__(self):
self.vocabulary?=?[]???#詞典?詞典是個(gè)鍵值對(duì)?eg.?dict={‘Alice‘:‘wo‘‘Jimmy‘:‘ta‘}
self.idf?=?0?????????????#詞典的IDF權(quán)值向量
self.tf?=?0??????????????#訓(xùn)練集的權(quán)值矩陣
self.tdm?=?0?????????????#P(x|yi)
self.Pcates?=?{}?????????????#P(yi)是一個(gè)類別字典?key-value
self.labels?=?[]?????????#對(duì)應(yīng)每個(gè)文本的分類,是一個(gè)外部導(dǎo)入的列表
self.doclength?=?0???????#訓(xùn)練集文本數(shù)
self.vocablen?=?0????????#詞典詞長(zhǎng)
self.testset?=?0?????????#測(cè)試集
????????????
#導(dǎo)入和訓(xùn)練數(shù)據(jù)集,生成算法必須的參數(shù)和數(shù)據(jù)結(jié)構(gòu) ????????????
????????????
def?train_set(selftrainsetclassVec):
self.cate_prob(classVec)?#計(jì)算每個(gè)分類在測(cè)試集中的概率P(yi)
self.doclength?=?len(trainset)
tempset?=?set()??????????#無(wú)序不重復(fù)元素集??set([])
[tempset.add(word)?for?doc?in?trainset?for?word?in?doc]?#生成詞典?
self.vocabulary?=?list(tempset)
self.vocablen?=?len(self.vocabulary)
self.calc_wordfreq(trainset)?#計(jì)算次品數(shù)據(jù)集
self.build_tdm()?????????#按分類累計(jì)向量空間的每維值P(x|yi)
?? ????????
#cate_prob函數(shù):計(jì)算在數(shù)據(jù)集中每個(gè)分類的概率P(yi)
def?cate_prob(selfclassVec):
self.labels?=?classVec
labeltemps?=?set(self.labels)#獲取全部分類
for?labeltemp?in?labeltemps:
?? self.Pcates[labeltemp]?=?float(self.labels.count(labeltemp))/float(len(self.labels))
?? ????????
#calc_wordfreq函數(shù):生成普通的詞頻向量
def?calc_wordfreq(selftrainset):??????????????????????????
self.idf=np.zeros([1self.vocablen])?????????????#1*詞典數(shù)
self.tf=np.zeros([self.doclengthself.vocablen])?#訓(xùn)練集文件數(shù)*詞典數(shù)?
for?indx?in?xrange(self.doclength):??
for?word?in?trainset[indx]:
??#找到文本的詞在字典中的位置
self.tf[indxself.vocabulary.index(word)]?+=?1????????????????#是個(gè)6*31字典中單詞在每個(gè)文本中出現(xiàn)大的次數(shù)
#消除不同句長(zhǎng)導(dǎo)致的偏差
self.tf[indx]=self.tf[indx]/float(len(trainset[indx]))
for?signleword?in?set(trainset[indx]):
?? self.idf[0self.vocabulary.index(signleword)]?+=?1?? #是個(gè)1*31的,字典中的單詞在所有文本中出現(xiàn)的次數(shù)????
self.idf?=?np.log(float(self.doclength)/self.idf)?
self.tf?=?np.multiply(self.tfself.idf)????#矩陣與向量的點(diǎn)乘TF*IDF
#build_tdm函數(shù):按分類累計(jì)計(jì)算向量空間的每維值P(x|yi)??
def?build_tdm(self):
self.tdm=np.zeros([len(self.Pcates)self.vocablen])??#類別行*詞典列???
sumlist=np.zeros([len(self.Pcates)1])???#統(tǒng)計(jì)每個(gè)分類的總值
for?indx?in?xrange(self.doclength):
#將同一類別的詞向量空間值加總
self.tdm[self.labels[indx]]+=self.tf[indx]
#統(tǒng)計(jì)每個(gè)分類的總值——是一個(gè)標(biāo)量
sumlist[self.labels[indx]]=np.sum(self.tdm[sel
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????4311??2016-01-27?16:49??新建文件夾\NBayes_lib.py
?????文件???????4331??2016-01-27?16:49??新建文件夾\NBayes_lib.py.bak
?????文件???????4099??2016-01-27?16:49??新建文件夾\NBayes_lib.pyc
?????文件????????407??2016-01-26?19:43??新建文件夾\NBayes_test
?????文件????????409??2016-01-27?16:25??新建文件夾\NBayes_test.py
?????文件????????409??2016-01-27?16:23??新建文件夾\NBayes_test.py.bak
?????文件?????302144??2016-01-27?16:50??新建文件夾\樸素貝葉斯算法報(bào)告.pptx
?????目錄??????????0??2016-01-27?16:51??新建文件夾
-----------?---------??----------?-----??----
???????????????316110????????????????????8
- 上一篇:樹莓派避障小車.py
- 下一篇:Python二級(jí)考試試題
評(píng)論
共有 條評(píng)論