最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)樸素貝葉斯分類器的方法詳解

 更新時(shí)間:2018年07月04日 11:04:23   作者:-Finley-  
這篇文章主要介紹了Python實(shí)現(xiàn)樸素貝葉斯分類器的方法,詳細(xì)分析了樸素貝葉斯分類器的概念、原理、定義、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Python實(shí)現(xiàn)樸素貝葉斯分類器的方法。分享給大家供大家參考,具體如下:

貝葉斯定理

貝葉斯定理是通過對觀測值概率分布的主觀判斷(即先驗(yàn)概率)進(jìn)行修正的定理,在概率論中具有重要地位。

先驗(yàn)概率分布(邊緣概率)是指基于主觀判斷而非樣本分布的概率分布,后驗(yàn)概率(條件概率)是根據(jù)樣本分布和未知參數(shù)的先驗(yàn)概率分布求得的條件概率分布。

貝葉斯公式:

P(A∩B) = P(A)*P(B|A) = P(B)*P(A|B)

變形得:

P(A|B)=P(B|A)*P(A)/P(B)

其中

  • P(A)是A的先驗(yàn)概率或邊緣概率,稱作"先驗(yàn)"是因?yàn)樗豢紤]B因素。
  • P(A|B)是已知B發(fā)生后A的條件概率,也稱作A的后驗(yàn)概率。
  • P(B|A)是已知A發(fā)生后B的條件概率,也稱作B的后驗(yàn)概率,這里稱作似然度。
  • P(B)是B的先驗(yàn)概率或邊緣概率,這里稱作標(biāo)準(zhǔn)化常量。
  • P(B|A)/P(B)稱作標(biāo)準(zhǔn)似然度。

樸素貝葉斯分類(Naive Bayes)

樸素貝葉斯分類器在估計(jì)類條件概率時(shí)假設(shè)屬性之間條件獨(dú)立。

首先定義

  • x = {a1,a2,...}為一個(gè)樣本向量,a為一個(gè)特征屬性
  • div = {d1 = [l1,u1],...} 特征屬性的一個(gè)劃分
  • class = {y1,y2,...}樣本所屬的類別

算法流程:

(1) 通過樣本集中類別的分布,對每個(gè)類別計(jì)算先驗(yàn)概率p(y[i])

(2) 計(jì)算每個(gè)類別下每個(gè)特征屬性劃分的頻率p(a[j] in d[k] | y[i])

(3) 計(jì)算每個(gè)樣本的p(x|y[i])

p(x|y[i]) = p(a[1] in d | y[i]) * p(a[2] in d | y[i]) * ...

樣本的所有特征屬性已知,所以特征屬性所屬的區(qū)間d已知。

可以通過(2)確定p(a[k] in d | y[i])的值,從而求得p(x|y[i])

(4) 由貝葉斯定理得:

p(y[i]|x) = ( p(x|y[i]) * p(y[i]) ) / p(x)

因?yàn)榉帜赶嗤?,只需?jì)算分子。

p(y[i]|x)是觀測樣本屬于分類y[i]的概率,找出最大概率對應(yīng)的分類作為分類結(jié)果。

示例:

導(dǎo)入數(shù)據(jù)集

{a1 = 0, a2 = 0, C = 0} {a1 = 0, a2 = 0, C = 1}
{a1 = 0, a2 = 0, C = 0} {a1 = 0, a2 = 0, C = 1}
{a1 = 0, a2 = 0, C = 0} {a1 = 0, a2 = 0, C = 1}
{a1 = 1, a2 = 0, C = 0} {a1 = 0, a2 = 0, C = 1}
{a1 = 1, a2 = 0, C = 0} {a1 = 0, a2 = 0, C = 1}
{a1 = 1, a2 = 0, C = 0} {a1 = 1, a2 = 0, C = 1}
{a1 = 1, a2 = 1, C = 0} {a1 = 1, a2 = 0, C = 1}
{a1 = 1, a2 = 1, C = 0} {a1 = 1, a2 = 1, C = 1}
{a1 = 1, a2 = 1, C = 0} {a1 = 1, a2 = 1, C = 1}
{a1 = 1, a2 = 1, C = 0} {a1 = 1, a2 = 1, C = 1}

計(jì)算類別的先驗(yàn)概率

P(C = 0) = 0.5
P(C = 1) = 0.5

計(jì)算每個(gè)特征屬性條件概率:

P(a1 = 0 | C = 0) = 0.3
P(a1 = 1 | C = 0) = 0.7
P(a2 = 0 | C = 0) = 0.4
P(a2 = 1 | C = 0) = 0.6
P(a1 = 0 | C = 1) = 0.5
P(a1 = 1 | C = 1) = 0.5
P(a2 = 0 | C = 1) = 0.7
P(a2 = 1 | C = 1) = 0.3

測試樣本:

x = { a1 = 1, a2 = 2}
p(x | C = 0) = p(a1 = 1 | C = 0) * p( 2 = 2 | C = 0) = 0.3 * 0.6 = 0.18
p(x | C = 1) = p(a1 = 1 | C = 1) * p (a2 = 2 | C = 1) = 0.5 * 0.3 = 0.15

計(jì)算P(C | x) * p(x):

P(C = 0) * p(x | C = 1) = 0.5 * 0.18 = 0.09
P(C = 1) * p(x | C = 2) = 0.5 * 0.15 = 0.075

所以認(rèn)為測試樣本屬于類型C1

Python實(shí)現(xiàn)

樸素貝葉斯分類器的訓(xùn)練過程為計(jì)算(1),(2)中的概率表,應(yīng)用過程為計(jì)算(3),(4)并尋找最大值。

還是使用原來的接口進(jìn)行類封裝:

from numpy import *
class NaiveBayesClassifier(object):
  def __init__(self):
    self.dataMat = list()
    self.labelMat = list()
    self.pLabel1 = 0
    self.p0Vec = list()
    self.p1Vec = list()
  def loadDataSet(self,filename):
    fr = open(filename)
    for line in fr.readlines():
      lineArr = line.strip().split()
      dataLine = list()
      for i in lineArr:
        dataLine.append(float(i))
      label = dataLine.pop() # pop the last column referring to label
      self.dataMat.append(dataLine)
      self.labelMat.append(int(label))
  def train(self):
    dataNum = len(self.dataMat)
    featureNum = len(self.dataMat[0])
    self.pLabel1 = sum(self.labelMat)/float(dataNum)
    p0Num = zeros(featureNum)
    p1Num = zeros(featureNum)
    p0Denom = 1.0
    p1Denom = 1.0
    for i in range(dataNum):
      if self.labelMat[i] == 1:
        p1Num += self.dataMat[i]
        p1Denom += sum(self.dataMat[i])
      else:
        p0Num += self.dataMat[i]
        p0Denom += sum(self.dataMat[i])
    self.p0Vec = p0Num/p0Denom
    self.p1Vec = p1Num/p1Denom
  def classify(self, data):
    p1 = reduce(lambda x, y: x * y, data * self.p1Vec) * self.pLabel1
    p0 = reduce(lambda x, y: x * y, data * self.p0Vec) * (1.0 - self.pLabel1)
    if p1 > p0:
      return 1
    else:
      return 0
  def test(self):
    self.loadDataSet('testNB.txt')
    self.train()
    print(self.classify([1, 2]))
if __name__ == '__main__':
  NB = NaiveBayesClassifier()
  NB.test()

Matlab

Matlab的標(biāo)準(zhǔn)工具箱提供了對樸素貝葉斯分類器的支持:

trainData = [0 1; -1 0; 2 2; 3 3; -2 -1;-4.5 -4; 2 -1; -1 -3];
group = [1 1 -1 -1 1 1 -1 -1]';
model = fitcnb(trainData, group)
testData = [5 2;3 1;-4 -3];
predict(model, testData)

fitcnb用來訓(xùn)練模型,predict用來預(yù)測。

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)學(xué)運(yùn)算技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • python實(shí)現(xiàn)播放音頻和錄音功能示例代碼

    python實(shí)現(xiàn)播放音頻和錄音功能示例代碼

    這篇文章主要給大家介紹了關(guān)于python播放音頻和錄音的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • Python多進(jìn)程加鎖的實(shí)現(xiàn)

    Python多進(jìn)程加鎖的實(shí)現(xiàn)

    很多時(shí)候,我們需要在多個(gè)進(jìn)程中同時(shí)寫一個(gè)文件,如果不加鎖機(jī)制,就會導(dǎo)致寫文件錯(cuò)亂,本文主要介紹了Python多進(jìn)程加鎖的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),感興趣的可以了解一下
    2023-07-07
  • linux 下selenium chrome使用詳解

    linux 下selenium chrome使用詳解

    這篇文章主要介紹了linux 下selenium chrome使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python3爬蟲爬取百姓網(wǎng)列表并保存為json功能示例【基于request、lxml和json模塊】

    Python3爬蟲爬取百姓網(wǎng)列表并保存為json功能示例【基于request、lxml和json模塊】

    這篇文章主要介紹了Python3爬蟲爬取百姓網(wǎng)列表并保存為json功能,涉及Python基于request、lxml和json模塊的Request請求與響應(yīng)數(shù)據(jù)處理相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • Pytorch中的variable, tensor與numpy相互轉(zhuǎn)化的方法

    Pytorch中的variable, tensor與numpy相互轉(zhuǎn)化的方法

    這篇文章主要介紹了Pytorch中的variable, tensor與numpy相互轉(zhuǎn)化的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Python升級導(dǎo)致yum、pip報(bào)錯(cuò)的解決方法

    Python升級導(dǎo)致yum、pip報(bào)錯(cuò)的解決方法

    這篇文章主要給大家介紹了因?yàn)镻ython升級導(dǎo)致yum、pip報(bào)錯(cuò)的解決方法,文中通過示例代碼將解決的方法介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)下吧。
    2017-09-09
  • Python實(shí)現(xiàn)提取音樂頻譜的方法詳解

    Python實(shí)現(xiàn)提取音樂頻譜的方法詳解

    你有沒有經(jīng)常好奇一些音樂軟件的頻譜特效是怎么做的,為什么做的這么好看?有沒有想試試自己提取音樂頻譜并可視化展現(xiàn)出來?本文就來教你如何利用Python提取音樂頻譜,快來學(xué)習(xí)一下吧
    2022-06-06
  • 使用Python+Appuim 清理微信的方法

    使用Python+Appuim 清理微信的方法

    這篇文章主要介紹了使用Python+Appuim 清理微信,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Flask深入了解Jinja2引擎的用法

    Flask深入了解Jinja2引擎的用法

    Jinja2是基于python的模板引擎,功能比較類似于于PHP的smarty,J2ee的Freemarker和velocity。 它能完全支持unicode,并具有集成的沙箱執(zhí)行環(huán)境,應(yīng)用廣泛。jinja2使用BSD授權(quán)
    2022-07-07
  • python采用requests庫模擬登錄和抓取數(shù)據(jù)的簡單示例

    python采用requests庫模擬登錄和抓取數(shù)據(jù)的簡單示例

    這篇文章主要介紹了python采用requests庫模擬登錄和抓取數(shù)據(jù)的簡單示例,代碼簡單卻功能強(qiáng)大!需要的朋友可以參考下
    2014-07-07

最新評論

宜良县| 浑源县| 富裕县| 苏州市| 富川| 贵溪市| 定州市| 全椒县| 顺义区| 高雄县| 武威市| 湟中县| 德兴市| 磴口县| 新泰市| 东丰县| 治多县| 七台河市| 军事| 土默特右旗| 清丰县| 和平县| 平乐县| 莎车县| 澄迈县| 泊头市| 上林县| 韩城市| 呼玛县| 茌平县| 开阳县| 南漳县| 弥渡县| 武功县| 叶城县| 广东省| 汉寿县| 灵丘县| 广德县| 调兵山市| 龙井市|