久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1446|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

樸素貝葉斯公式推導(dǎo)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:419062 發(fā)表于 2018-11-1 13:16 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
前言

樸素貝葉斯是一種十分簡(jiǎn)單的分類算法,稱其樸素是因?yàn)槠渌枷牖A(chǔ)的簡(jiǎn)單性,就文本分類而言,他認(rèn)為詞袋中的兩兩詞之間的關(guān)系是相互獨(dú)立的,即一個(gè)對(duì)象的特征向量中的每個(gè)維度都是互相獨(dú)立的。這是樸素貝葉斯理論的思想基礎(chǔ)。
貝葉斯公式推導(dǎo)

樸素貝葉斯分類的正式定義:

    設(shè)x={}為一個(gè)待分類項(xiàng),而每個(gè)a為x的一個(gè)特征屬性
    有類別集合C={}
    計(jì)算P(|x),P(|x),…,P(|x)
    如果P(|x)=max{ P(|x),P(|x),…,P(|x)},則x

那么關(guān)鍵就是如何計(jì)算第三步中的各個(gè)條件概率,我們可以這樣計(jì)算:

    找到一個(gè)已知分類的待分類項(xiàng)集合,即訓(xùn)練集
    統(tǒng)計(jì)得到在各類別下各個(gè)特征屬性的條件概率估計(jì),即:

P(),P(),…,P()

P(),P(),…,P()

P(),P(),…,P()

    如果各個(gè)特征屬性是條件獨(dú)立的(或者假設(shè)他們之間是相互獨(dú)立的),根據(jù)貝葉斯定理,有如下推導(dǎo):



因?yàn)榉帜笇?duì)于所有類別為常數(shù),只要將分子最大化即可,又因?yàn)楦魈卣鲗傩允菞l件獨(dú)立的,所以有:



根據(jù)上述分析,樸素貝葉斯分類的流程可以表示如下:

    訓(xùn)練數(shù)據(jù)生成樣本集:TF-IDF
    對(duì)每個(gè)類別計(jì)算P()
    對(duì)每個(gè)特征屬性計(jì)算所有劃分的條件概率
    對(duì)每個(gè)類別計(jì)算P(x|)P()
    以P(x|)P()的最大項(xiàng)作為x的所屬類別

樸素貝葉斯的算法實(shí)現(xiàn)

首先創(chuàng)建一個(gè)Nbayes_pre.py文件來(lái)編寫導(dǎo)入的數(shù)據(jù)和樸素貝葉斯類的代碼

    使用簡(jiǎn)單的英文語(yǔ)料作為數(shù)據(jù)集合,其中postingList是訓(xùn)練集文本,classVec是每個(gè)文本對(duì)應(yīng)的分類

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','my'],
                 ['stop','posting','stupid','worthless','garbage'],
                 ['mr','licks','ate','steak','how','to','stop','hime'],
                 ['quit','buying','worthless','dog','food','stupid']]
    classVec=[0,1,0,1,0,1]#1 is abusive, 0 not
    return postingList,classVec



    下面逐步實(shí)現(xiàn)貝葉斯算法,第一步即編寫一個(gè)貝葉斯算法類,并創(chuàng)建默認(rèn)的構(gòu)造方法

class NBayes(object):

    def _init_(self):

        self.vocabulary=[]#詞典

        self.idf=0#詞典的IDF權(quán)重向量

        self.tf=0#訓(xùn)練集的權(quán)值矩陣

        self.tdm=0#P(x│y_i)

        self.Pcates={}#P(y_i)是一個(gè)類別字典

        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(self,trainset,classVec):

    self.cate_prob(classVec)#計(jì)算每個(gè)分類在數(shù)據(jù)集中的概率P(y_i)

    self.doclength=len(trainset)

    tempset=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|y_i)



    計(jì)算在數(shù)據(jù)集中每個(gè)分類的概率P(y_i)

def cate_prob(self,classVec):

    self.labels=classVec

    labeltemps=set(self.labels)#獲取全部分類

    for labeltemp in labeltemps:

        self.labels.count(labeltemp)#統(tǒng)計(jì)列表中的重復(fù)分類

        self.Pcates[labeltemp]     =float(self.labels.count(labeltemp))/float(len(self.labels))



    生成普通的詞頻向量

def calc_wordfreq(self,trainset):

    self.idf=np.zeros([1,self.vocablen])#1x詞典數(shù)

    self.tf=np.zeros([self.doclength,self.vocablen])#訓(xùn)練集文件數(shù)x詞典數(shù)

    for indx in xrange(self.doclength):#遍歷所有文本

        for word in trainset[indx]:#遍歷文本中的每個(gè)詞

            #找到文本的詞在字典中的位置+1

            self.tf[indx,self.vocabulary.index(word)]+=1

        for signleword in set(trainset[indx]):

            self.idf[0,self.vocabulary.index(signleword)]+=1



    按分類累計(jì)計(jì)算向量空間的每維值P(x|y_i)

def build_tdm(self):

    self.tdm=np.zeros([len(self.Pcates),self.vocablen])#類別行x詞典列

    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[self.labels[indx]])

    self.tdm=self.tdm/sumlist#生成P(x|y_i)



    將測(cè)試集映射到當(dāng)前詞典

def map2vocab(self,testdata):

    self.testset=np.zeros([1,self.vocablen])

    for word in testdata:

        self.testset[0,self.vocabulary.index(word)]+=1



    預(yù)測(cè)分類結(jié)果,輸出預(yù)測(cè)的分類類別

def predict(self,testset):

    if np.shape(testset)[1]!=self.vocablen:#如果測(cè)試集長(zhǎng)度與詞典長(zhǎng)度不相等,則推出程序

        print("輸入錯(cuò)誤")

        exit(0)

    predvalue=0#初始化類別概率

    predclass=""#初始化類別名稱

    for tdm_vect,keyclass in zip(self.tdm,self.Pcates):

        #P(x|y_i) P(y_i)

        #變量tdm,計(jì)算最大分類值

        temp=np.sum(testset*tdm_vect*self.Pcates[keyclass])

        if temp>predvalue:

            predvalue=temp

            predclass=keyclass

    return predclass



    算法還可以進(jìn)行一些改進(jìn),將步驟e中的函數(shù)替換掉,普通的詞頻向量改為使用TF-IDF策略,使之有能力修正多種偏差,下面函數(shù)以TF-IDF方式生成向量空間
    評(píng)估分類結(jié)果,執(zhí)行我們創(chuàng)建的樸素貝葉斯類,獲取執(zhí)行結(jié)果

j.   def calc_tfidf(self,trainset):

    self.idf=np.zeros([1,self.vocablen])

    self.tf=np.zeros([self.doclength,self.vocablen])

    for indx in xrange(self.doclength):

        for word in trainset[indx]:

            self.tf[indx,self.vocabulary.index(word)]+=1

        #消除不同句廠導(dǎo)致的偏差

        self.tf[indx]=self.tf[indx]/float(len(trainset[indx]))

        for signleword in set(trainset[indx]):

            self.idf[0,self.vocabulary.index(signleword)]+=1

    self.idf=np.log(float(self.doclength)/self.idf)

    self.tf=np.multiply(self.tf,self.idf)#矩陣與向量的點(diǎn)乘 TFxIDF

l.   import numpy as np

from numpy import *

from Nbayes_pre import *



dataSet,listClasses=loadDataSet()#導(dǎo)入外部數(shù)據(jù)集

#dataSet:句子的詞向量

#listClass:句子所屬的類別 【0,1,0,1,0,1】

nb=NBayes()#實(shí)例化

nb.train_set(dataSet,listClasses)#訓(xùn)練數(shù)據(jù)集

nb.map2vocab(dataSet[0])#隨機(jī)選擇一個(gè)測(cè)試句

print(nb.predict(nb.testset))

工程代碼
不知道為什么顯示不了數(shù)學(xué)公式了非常尷尬
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 视频二区 | 日韩av在线不卡 | 中文日韩在线视频 | 午夜精品一区二区三区在线视频 | 一级a毛片 | 欧美中文一区 | 日本网站免费观看 | 91人人看| 精品久久久久久久久久久久久久 | 麻豆国产精品777777在线 | 91在线色视频 | 97精品超碰一区二区三区 | 国产免费福利在线 | 久久99这里只有精品 | 国产成人免费视频网站视频社区 | 日本免费黄色 | 亚洲成人免费视频在线 | 国内自拍偷拍视频 | 亚洲精品片 | 亚洲手机视频在线 | 男女下面一进一出网站 | 亚洲天天干 | 久草电影网| 国产精品久久久久久亚洲调教 | 国产三级一区二区 | 成人综合视频在线观看 | 色片在线观看 | 国产精品亚洲一区二区三区在线 | 特黄毛片 | 涩涩导航 | 日韩国产精品一区二区三区 | 国产精品久久久久久久久久免费 | 精品不卡 | 国产一区二区精品在线观看 | 国产中文区二幕区2012 | 成人免费淫片aa视频免费 | 欧美日韩亚洲一区 | 亚洲精品乱码久久久久久久久 | 最新91在线 | 国产免费一区二区 | 国产精品一区二区三区在线播放 |