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

樸素貝葉斯分類算法原理與Python實(shí)現(xiàn)與使用方法案例

 更新時(shí)間:2018年06月26日 09:47:38   作者:ahu-lichang  
這篇文章主要介紹了樸素貝葉斯分類算法原理與Python實(shí)現(xiàn)與使用方法,結(jié)合具體實(shí)例形式分析了樸素貝葉斯分類算法的概念、原理、實(shí)現(xiàn)流程與相關(guān)操作技巧,需要的朋友可以參考下

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

樸素貝葉斯分類算法

1、樸素貝葉斯分類算法原理

1.1、概述

貝葉斯分類算法是一大類分類算法的總稱

貝葉斯分類算法以樣本可能屬于某類的概率來作為分類依據(jù)

樸素貝葉斯分類算法是貝葉斯分類算法中最簡(jiǎn)單的一種

注:樸素的意思是條件概率獨(dú)立性

P(A|x1x2x3x4)=p(A|x1)*p(A|x2)p(A|x3)p(A|x4)則為條件概率獨(dú)立
P(xy|z)=p(xyz)/p(z)=p(xz)/p(z)*p(yz)/p(z)

1.2、算法思想

樸素貝葉斯的思想是這樣的:

如果一個(gè)事物在一些屬性條件發(fā)生的情況下,事物屬于A的概率>屬于B的概率,則判定事物屬于A

通俗來說比如,你在街上看到一個(gè)黑人,我讓你猜這哥們哪里來的,你十有八九猜非洲。為什么呢?

在你的腦海中,有這么一個(gè)判斷流程:

①、這個(gè)人的膚色是黑色 <特征>
②、黑色人種是非洲人的概率最高 <條件概率:黑色條件下是非洲人的概率>
③、沒有其他輔助信息的情況下,最好的判斷就是非洲人

這就是樸素貝葉斯的思想基礎(chǔ)。

再擴(kuò)展一下,假如在街上看到一個(gè)黑人講英語(yǔ),那我們是怎么去判斷他來自于哪里?

提取特征:

膚色: 黑
語(yǔ)言: 英語(yǔ)

黑色人種來自非洲的概率: 80%
黑色人種來自于美國(guó)的概率:20%

講英語(yǔ)的人來自于非洲的概率:10%
講英語(yǔ)的人來自于美國(guó)的概率:90%

在我們的自然思維方式中,就會(huì)這樣判斷:

這個(gè)人來自非洲的概率:80% * 10% = 0.08
這個(gè)人來自美國(guó)的概率:20% * 90% =0.18

我們的判斷結(jié)果就是:此人來自美國(guó)!

其蘊(yùn)含的數(shù)學(xué)原理如下:

p(A|xy)=p(Axy)/p(xy)=p(Axy)/p(x)p(y)=p(A)/p(x)*p(A)/p(y)* p(xy)/p(xy)=p(A|x)p(A|y)

P(類別 | 特征)=P(特征 | 類別)*P(類別) / P(特征)

1.3、算法步驟

①、分解各類先驗(yàn)樣本數(shù)據(jù)中的特征
②、計(jì)算各類數(shù)據(jù)中,各特征的條件概率
(比如:特征1出現(xiàn)的情況下,屬于A類的概率p(A|特征1),屬于B類的概率p(B|特征1),屬于C類的概率p(C|特征1)......)
③、分解待分類數(shù)據(jù)中的特征(特征1、特征2、特征3、特征4......)
④、計(jì)算各特征的各條件概率的乘積,如下所示:
判斷為A類的概率:p(A|特征1)*p(A|特征2)*p(A|特征3)*p(A|特征4).....
判斷為B類的概率:p(B|特征1)*p(B|特征2)*p(B|特征3)*p(B|特征4).....
判斷為C類的概率:p(C|特征1)*p(C|特征2)*p(C|特征3)*p(C|特征4).....
......
⑤、結(jié)果中的最大值就是該樣本所屬的類別

1.4、算法應(yīng)用舉例

大眾點(diǎn)評(píng)、淘寶等電商上都會(huì)有大量的用戶評(píng)論,比如:

1、衣服質(zhì)量太差了?。。?!顏色根本不純?。?! 0
2、我有一有種上當(dāng)受騙的感覺?。。?! 0
3、質(zhì)量太差,衣服拿到手感覺像舊貨?。?! 0
4、上身漂亮,合身,很帥,給賣家點(diǎn)贊 1
5、穿上衣服帥呆了,給點(diǎn)一萬(wàn)個(gè)贊 1
6、我在他家買了三件衣服?。。?!質(zhì)量都很差! 0

其中1/2/3/6是差評(píng),4/5是好評(píng)

現(xiàn)在需要使用樸素貝葉斯分類算法來自動(dòng)分類其他的評(píng)論,比如:

a、這么差的衣服以后再也不買了
b、帥,有逼格
……

1.5、算法應(yīng)用流程

①、分解出先驗(yàn)數(shù)據(jù)中的各特征
(即分詞,比如“衣服”“質(zhì)量太差”“差”“不純”“帥”“漂亮”,“贊”……)
②、計(jì)算各類別(好評(píng)、差評(píng))中,各特征的條件概率
(比如 p(“衣服”|差評(píng))、p(“衣服”|好評(píng))、p(“差”|好評(píng)) 、p(“差”|差評(píng))……)
③、分解出待分類樣本的各特征
(比如分解a: “差” “衣服” ……)
④、計(jì)算類別概率
P(好評(píng)) = p(好評(píng)|“差”) *p(好評(píng)|“衣服”)*……
P(差評(píng)) = p(差評(píng)|“差”) *p(差評(píng)|“衣服”)*……
⑤、顯然P(差評(píng))的結(jié)果值更大,因此a被判別為“差評(píng)”

1.6、樸素貝葉斯分類算法案例

大體計(jì)算方法:

P(好評(píng) | 單詞1,單詞2,單詞3) = P(單詞1,單詞2,單詞3 | 好評(píng)) * P(好評(píng)) / P(單詞1,單詞2,單詞3)

因?yàn)榉帜付枷嗤?,所以只用比較分子即可--->P(單詞1,單詞2,單詞3 | 好評(píng)) P(好評(píng))

每個(gè)單詞之間都是相互獨(dú)立的---->P(單詞1 | 好評(píng))P(單詞2 | 好評(píng))P(單詞3 | 好評(píng))*P(好評(píng))

P(單詞1 | 好評(píng)) = 單詞1在樣本好評(píng)中出現(xiàn)的總次數(shù)/樣本好評(píng)句子中總的單詞數(shù)

P(好評(píng)) = 樣本好評(píng)的條數(shù)/樣本的總條數(shù)

同理:

P(差評(píng) | 單詞1,單詞2,單詞3) = P(單詞1,單詞2,單詞3 | 差評(píng)) * P(差評(píng)) / P(單詞1,單詞2,單詞3)

因?yàn)榉帜付枷嗤?,所以只用比較分子即可--->P(單詞1,單詞2,單詞3 | 差評(píng)) P(差評(píng))

每個(gè)單詞之間都是相互獨(dú)立的---->P(單詞1 | 差評(píng))P(單詞2 | 差評(píng))P(單詞3 | 差評(píng))*P(差評(píng))

2、 Python案例

#!/usr/bin/python
# coding=utf-8
from numpy import *
# 過濾網(wǎng)站的惡意留言 侮辱性:1   非侮辱性:0
# 創(chuàng)建一個(gè)實(shí)驗(yàn)樣本
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
# 創(chuàng)建一個(gè)包含在所有文檔中出現(xiàn)的不重復(fù)詞的列表
def createVocabList(dataSet):
  vocabSet = set([])   # 創(chuàng)建一個(gè)空集
  for document in dataSet:
    vocabSet = vocabSet | set(document)  # 創(chuàng)建兩個(gè)集合的并集
  return list(vocabSet)
# 將文檔詞條轉(zhuǎn)換成詞向量
def setOfWords2Vec(vocabList, inputSet):
  returnVec = [0]*len(vocabList)    # 創(chuàng)建一個(gè)其中所含元素都為0的向量
  for word in inputSet:
    if word in vocabList:
      # returnVec[vocabList.index(word)] = 1   # index函數(shù)在字符串里找到字符第一次出現(xiàn)的位置 詞集模型
      returnVec[vocabList.index(word)] += 1   # 文檔的詞袋模型  每個(gè)單詞可以出現(xiàn)多次
    else: print "the word: %s is not in my Vocabulary!" % word
  return returnVec
# 樸素貝葉斯分類器訓(xùn)練函數(shù)  從詞向量計(jì)算概率
def trainNB0(trainMatrix, trainCategory):
  numTrainDocs = len(trainMatrix)
  numWords = len(trainMatrix[0])
  pAbusive = sum(trainCategory)/float(numTrainDocs)
  # p0Num = zeros(numWords); p1Num = zeros(numWords)
  # p0Denom = 0.0; p1Denom = 0.0
  p0Num = ones(numWords);  # 避免一個(gè)概率值為0,最后的乘積也為0
  p1Num = ones(numWords);  # 用來統(tǒng)計(jì)兩類數(shù)據(jù)中,各詞的詞頻
  p0Denom = 2.0; # 用于統(tǒng)計(jì)0類中的總數(shù)
  p1Denom = 2.0 # 用于統(tǒng)計(jì)1類中的總數(shù)
  for i in range(numTrainDocs):
    if trainCategory[i] == 1:
      p1Num += trainMatrix[i]
      p1Denom += sum(trainMatrix[i])
    else:
      p0Num += trainMatrix[i]
      p0Denom += sum(trainMatrix[i])
      # p1Vect = p1Num / p1Denom
      # p0Vect = p0Num / p0Denom
  p1Vect = log(p1Num / p1Denom)  # 在類1中,每個(gè)次的發(fā)生概率
  p0Vect = log(p0Num / p0Denom)   # 避免下溢出或者浮點(diǎn)數(shù)舍入導(dǎo)致的錯(cuò)誤  下溢出是由太多很小的數(shù)相乘得到的
  return p0Vect, p1Vect, pAbusive
# 樸素貝葉斯分類器
def classifyNB(vec2Classify, p0Vec, p1Vec, pClass1):
  p1 = sum(vec2Classify*p1Vec) + log(pClass1)
  p0 = sum(vec2Classify*p0Vec) + log(1.0-pClass1)
  if p1 > p0:
    return 1
  else:
    return 0
def testingNB():
  listOPosts, listClasses = loadDataSet()
  myVocabList = createVocabList(listOPosts)
  trainMat = []
  for postinDoc in listOPosts:
    trainMat.append(setOfWords2Vec(myVocabList, postinDoc))
  p0V, p1V, pAb = trainNB0(array(trainMat), array(listClasses))
  testEntry = ['love','my','dalmation']
  thisDoc = array(setOfWords2Vec(myVocabList, testEntry))
  print testEntry, 'classified as: ', classifyNB(thisDoc, p0V, p1V, pAb)
  testEntry = ['stupid','garbage']
  thisDoc = array(setOfWords2Vec(myVocabList, testEntry))
  print testEntry, 'classified as: ', classifyNB(thisDoc, p0V, p1V, pAb)
# 調(diào)用測(cè)試方法----------------------------------------------------------------------
testingNB()

運(yùn)行結(jié)果:

更多關(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文件與目錄操作技巧匯總

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

相關(guān)文章

  • Python操作多維數(shù)組輸出和矩陣運(yùn)算示例

    Python操作多維數(shù)組輸出和矩陣運(yùn)算示例

    這篇文章主要介紹了Python操作多維數(shù)組輸出和矩陣運(yùn)算,結(jié)合實(shí)例形式分析了Python多維數(shù)組的生成、打印輸出及矩陣運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • Python圖像運(yùn)算之圖像灰度直方圖對(duì)比詳解

    Python圖像運(yùn)算之圖像灰度直方圖對(duì)比詳解

    本篇文章將結(jié)合直方圖分別對(duì)比圖像灰度變換前后的變化,方便大家更清晰地理解灰度變換和閾值變換,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-08-08
  • 使用python的pyplot繪制函數(shù)實(shí)例

    使用python的pyplot繪制函數(shù)實(shí)例

    今天小編就為大家分享一篇使用python的pyplot繪制函數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python計(jì)算質(zhì)數(shù)的方法總結(jié)

    Python計(jì)算質(zhì)數(shù)的方法總結(jié)

    質(zhì)數(shù)(Prime?Number)是指大于1且只能被1和自身整除的正整數(shù),計(jì)算質(zhì)數(shù)是數(shù)論中的一個(gè)經(jīng)典問題,本文將介紹python中多種計(jì)算質(zhì)數(shù)的方法,希望對(duì)大家有所幫助
    2023-11-11
  • Python實(shí)現(xiàn)多線程的兩種方式分析

    Python實(shí)現(xiàn)多線程的兩種方式分析

    這篇文章主要介紹了Python實(shí)現(xiàn)多線程的兩種方式,結(jié)合實(shí)例形式分析了通過自定義函數(shù)傳遞Thread對(duì)象以及繼承Thread類兩種多線程實(shí)現(xiàn)方式相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • python的多元數(shù)據(jù)類型(下)

    python的多元數(shù)據(jù)類型(下)

    這篇文章主要為大家詳細(xì)介紹了python的多元數(shù)據(jù)類型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Pandas中的 transform()結(jié)合 groupby()用法示例詳解

    Pandas中的 transform()結(jié)合 groupby()用法示例詳解

    這篇文章主要介紹了Pandas中的 transform() 結(jié)合 groupby() 用法示例,本文通過一個(gè)餐廳數(shù)據(jù)集給大家分享解決方案,示例代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-09-09
  • python識(shí)別圖標(biāo)并點(diǎn)擊功能實(shí)現(xiàn)

    python識(shí)別圖標(biāo)并點(diǎn)擊功能實(shí)現(xiàn)

    這篇文章主要介紹了python識(shí)別圖標(biāo)并點(diǎn)擊功能實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • 使用django的objects.filter()方法匹配多個(gè)關(guān)鍵字的方法

    使用django的objects.filter()方法匹配多個(gè)關(guān)鍵字的方法

    今天小編就為大家分享一篇使用django的objects.filter()方法匹配多個(gè)關(guān)鍵字的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Pytest框架之fixture詳解(二)

    Pytest框架之fixture詳解(二)

    本文詳細(xì)講解了Pytest框架之fixture,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06

最新評(píng)論

北海市| 汉沽区| 祁阳县| 偃师市| 汉源县| 南宁市| 怀仁县| 阿城市| 德化县| 黄骅市| 凌海市| 武川县| 江阴市| 迁西县| 中宁县| 什邡市| 十堰市| 陇川县| 南澳县| 桦甸市| 澄迈县| 巴东县| 上犹县| 禄丰县| 军事| 辰溪县| 交城县| 安陆市| 西吉县| 龙口市| 华亭县| 涿鹿县| 分宜县| 益阳市| 门头沟区| 越西县| 临洮县| 吴桥县| 灌南县| 明光市| 进贤县|