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

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

 更新時(shí)間:2018年11月19日 16:43:46   作者:永恒的秋天  
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)樸素貝葉斯算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本代碼實(shí)現(xiàn)了樸素貝葉斯分類器(假設(shè)了條件獨(dú)立的版本),常用于垃圾郵件分類,進(jìn)行了拉普拉斯平滑。

關(guān)于樸素貝葉斯算法原理可以參考博客中原理部分的博文。

#!/usr/bin/python
# -*- coding: utf-8 -*-
from math import log
from numpy import*
import operator
import matplotlib
import matplotlib.pyplot as plt
from os import listdir
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 createVocabList(dataSet):
  vocabSet = set([]) #create empty set
  for document in dataSet:
    vocabSet = vocabSet | set(document) #union of the two sets
  return list(vocabSet)
 
def setOfWords2Vec(vocabList, inputSet):
  returnVec = [0]*len(vocabList)
  for word in inputSet:
    if word in vocabList:
      returnVec[vocabList.index(word)] = 1
    else: print "the word: %s is not in my Vocabulary!" % word
  return returnVec
def trainNB0(trainMatrix,trainCategory):  #訓(xùn)練模型
  numTrainDocs = len(trainMatrix)
  numWords = len(trainMatrix[0])
  pAbusive = sum(trainCategory)/float(numTrainDocs)
  p0Num = ones(numWords); p1Num = ones(numWords)  #拉普拉斯平滑
  p0Denom = 0.0+2.0; p1Denom = 0.0 +2.0      #拉普拉斯平滑
  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 = log(p1Num/p1Denom)    #用log()是為了避免概率乘積時(shí)浮點(diǎn)數(shù)下溢
  p0Vect = log(p0Num/p0Denom)
  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 bagOfWords2VecMN(vocabList, inputSet):
  returnVec = [0] * len(vocabList)
  for word in inputSet:
    if word in vocabList:
      returnVec[vocabList.index(word)] += 1
  return returnVec
 
def testingNB():  #測(cè)試訓(xùn)練結(jié)果
  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)
 
def textParse(bigString): # 長(zhǎng)字符轉(zhuǎn)轉(zhuǎn)單詞列表
  import re
  listOfTokens = re.split(r'\W*', bigString)
  return [tok.lower() for tok in listOfTokens if len(tok) > 2]
 
def spamTest():  #測(cè)試?yán)募?需要數(shù)據(jù)
  docList = [];
  classList = [];
  fullText = []
  for i in range(1, 26):
    wordList = textParse(open('email/spam/%d.txt' % i).read())
    docList.append(wordList)
    fullText.extend(wordList)
    classList.append(1)
    wordList = textParse(open('email/ham/%d.txt' % i).read())
    docList.append(wordList)
    fullText.extend(wordList)
    classList.append(0)
  vocabList = createVocabList(docList) 
  trainingSet = range(50);
  testSet = [] 
  for i in range(10):
    randIndex = int(random.uniform(0, len(trainingSet)))
    testSet.append(trainingSet[randIndex])
    del (trainingSet[randIndex])
  trainMat = [];
  trainClasses = []
  for docIndex in trainingSet: 
    trainMat.append(bagOfWords2VecMN(vocabList, docList[docIndex]))
    trainClasses.append(classList[docIndex])
  p0V, p1V, pSpam = trainNB0(array(trainMat), array(trainClasses))
  errorCount = 0
  for docIndex in testSet: 
    wordVector = bagOfWords2VecMN(vocabList, docList[docIndex])
    if classifyNB(array(wordVector), p0V, p1V, pSpam) != classList[docIndex]:
      errorCount += 1
      print "classification error", docList[docIndex]
  print 'the error rate is: ', float(errorCount) / len(testSet)
 
 
 
listOPosts,listClasses=loadDataSet()
myVocabList=createVocabList(listOPosts)
print myVocabList,'\n'
# print setOfWords2Vec(myVocabList,listOPosts[0]),'\n'
trainMat=[]
for postinDoc in listOPosts:
  trainMat.append(setOfWords2Vec(myVocabList,postinDoc))
print trainMat
p0V,p1V,pAb=trainNB0(trainMat,listClasses)
print pAb
print p0V,'\n',p1V
testingNB()

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python追加元素到列表的方法

    python追加元素到列表的方法

    這篇文章主要介紹了python追加元素到列表的方法,涉及Python列表操作中append方法追加元素的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • 使用python客戶端訪問impala的操作方式

    使用python客戶端訪問impala的操作方式

    這篇文章主要介紹了使用python客戶端訪問impala的操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • python子線程退出及線程退出控制的代碼

    python子線程退出及線程退出控制的代碼

    這篇文章主要介紹了python子線程退出及線程退出控制的代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 基于python生成器封裝的協(xié)程類

    基于python生成器封裝的協(xié)程類

    這篇文章主要為大家詳細(xì)介紹了基于python生成器封裝的協(xié)程類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • python的sort函數(shù)與sorted函數(shù)排序問題小結(jié)

    python的sort函數(shù)與sorted函數(shù)排序問題小結(jié)

    sort函數(shù)用于列表的排序,更改原序列而sorted用于可迭代對(duì)象的排序(包括列表),返回新的序列,這篇文章主要介紹了python的sort函數(shù)與sorted函數(shù)排序,需要的朋友可以參考下
    2023-07-07
  • 對(duì)django xadmin自定義菜單的實(shí)例詳解

    對(duì)django xadmin自定義菜單的實(shí)例詳解

    今天小編就為大家分享一篇對(duì)django xadmin自定義菜單的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 詳解Python中如何添加Selenium WebDriver等待

    詳解Python中如何添加Selenium WebDriver等待

    Selenium Web 驅(qū)動(dòng)程序提供兩種類型的等待, 第一個(gè)是隱式等待,第二個(gè)是顯式等待,本文主要為大家介紹了Python如何在Selenium Web驅(qū)動(dòng)程序中添加這兩種等待,需要的可以參考下
    2023-11-11
  • Python應(yīng)用案例之利用opencv實(shí)現(xiàn)圖像匹配

    Python應(yīng)用案例之利用opencv實(shí)現(xiàn)圖像匹配

    OpenCV 是一個(gè)的跨平臺(tái)計(jì)算機(jī)視覺庫(kù),可以運(yùn)行在 Linux、Windows 和 Mac OS 操作系統(tǒng)上,這篇文章主要給大家介紹了關(guān)于Python應(yīng)用案例之利用opencv實(shí)現(xiàn)圖像匹配的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • Python 可變類型和不可變類型及引用過程解析

    Python 可變類型和不可變類型及引用過程解析

    這篇文章主要介紹了Python 可變類型和不可變類型,以及其引用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 淺談Python類里的__init__方法函數(shù),Python類的構(gòu)造函數(shù)

    淺談Python類里的__init__方法函數(shù),Python類的構(gòu)造函數(shù)

    下面小編就為大家?guī)硪黄獪\談Python類里的__init__方法函數(shù),Python類的構(gòu)造函數(shù)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12

最新評(píng)論

如皋市| 罗源县| 广饶县| 丰原市| 息烽县| 秦安县| 莫力| 保定市| 留坝县| 北票市| 桓仁| 平南县| 柳江县| 涟源市| 淮阳县| 应城市| 沂水县| 东山县| 枣庄市| 武威市| 仙居县| 灵璧县| 松滋市| 江阴市| 苏尼特左旗| 晋城| 招远市| 武定县| 道孚县| 枣阳市| 拉孜县| 远安县| 九寨沟县| 罗江县| 昂仁县| 泰州市| 宜兰市| 乌恰县| 潮安县| 天津市| 武威市|