麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Python > 正文

樸素貝葉斯Python實例及解析

2020-02-15 23:44:22
字體:
來源:轉載
供稿:網友

本文實例為大家分享了Python樸素貝葉斯實例代碼,供大家參考,具體內容如下

#-*- coding: utf-8 -*- #添加中文注釋from numpy import * #過濾網站的惡意留言#樣本數據  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']]  #類別標簽:1侮辱性文字,0正常言論  classVec = [0,1,0,1,0,1]     #返回文檔向量,類別向量  return postingList,classVec #創建詞匯表#輸入:dataSet已經經過切分處理#輸出:包含所有文檔中出現的不重復詞的列表             def createVocabList(dataSet):  #構建set集合,會返回不重復詞表  vocabSet = set([])  #遍歷每篇文檔向量,掃描所有文檔的單詞   for document in dataSet:    #通過set(document),獲取document中不重復詞列表    vocabSet = vocabSet | set(document) #求并集  return list(vocabSet) #***詞集模型:只考慮單詞是否出現#vocabList:詞匯表#inputSet :某個文檔向量def setOfWords2Vec(vocabList, inputSet):  #創建所含元素全為0的向量  returnVec = [0]*len(vocabList)  #依次取出文檔中的單詞與詞匯表進行對照,若在詞匯表中出現則為1  for word in inputSet:    if word in vocabList:    #單詞在詞匯表中出現,則記為1       returnVec[vocabList.index(word)] = 1 #詞集模型    #若測試文檔的單詞,不在詞匯表中,顯示提示信息,該單詞出現次數用0表示    else: print "the word: %s is not in my Vocabulary!" % word  return returnVec #====訓練分類器,原始的樸素貝葉斯,沒有優化=====#輸入trainMatrix:詞向量數據集#輸入trainCategory:數據集對應的類別標簽#輸出p0Vect:詞匯表中各個單詞在正常言論中的類條件概率密度#輸出p1Vect:詞匯表中各個單詞在侮辱性言論中的類條件概率密度#輸出pAbusive:侮辱性言論在整個數據集中的比例def trainNB00(trainMatrix,trainCategory):  #numTrainDocs訓練集總條數  numTrainDocs = len(trainMatrix)  #訓練集中所有不重復單詞總數  numWords = len(trainMatrix[0])  #侮辱類的概率(侮辱類占總訓練數據的比例)  pAbusive = sum(trainCategory)/float(numTrainDocs)   #*正常言論的類條件概率密度 p(某單詞|正常言論)=p0Num/p0Denom  p0Num = zeros(numWords); #初始化分子為0  #*侮辱性言論的類條件概率密度 p(某單詞|侮辱性言論)=p1Num/p1Denom    p1Num = zeros(numWords) #初始化分子為0  #初始化分母置為0    p0Denom = 0;   p1Denom = 0          #遍歷訓練集數據    for i in range(numTrainDocs):    #若為侮辱類    if trainCategory[i] == 1:      #統計侮辱類所有文檔中的各個單詞總數      p1Num += trainMatrix[i]      #p1Denom侮辱類總單詞數      p1Denom += sum(trainMatrix[i])     #若為正常類    else:      #統計正常類所有文檔中的各個單詞總數      p0Num += trainMatrix[i]      #p0Denom正常類總單詞數      p0Denom += sum(trainMatrix[i])    #詞匯表中的單詞在侮辱性言論文檔中的類條件概率    p1Vect = p1Num/p1Denom      #詞匯表中的單詞在正常性言論文檔中的類條件概率   p0Vect = p0Num/p0Denom  return p0Vect,p1Vect,pAbusive  #=====訓練分類器,優化處理=====#輸入trainMatrix:詞向量數據集#輸入trainCategory:數據集對應的類別標簽#輸出p0Vect:詞匯表中各個單詞在正常言論中的類條件概率密度#輸出p1Vect:詞匯表中各個單詞在侮辱性言論中的類條件概率密度#輸出pAbusive:侮辱性言論在整個數據集中的比例def trainNB0(trainMatrix,trainCategory):  #訓練集總條數:行數  numTrainDocs = len(trainMatrix)  #訓練集中所有單詞總數:詞向量維度  numWords = len(trainMatrix[0])  #侮辱類的概率(侮辱類占總訓練數據的比例)  pAbusive = sum(trainCategory)/float(numTrainDocs)    #*拉普拉斯平滑防止類條件概率為0,初始化分子為1,分母為2  #正常類向量置為1  p0Num = ones(numWords); #初始化分子為1  #侮辱類向量置為1    p1Num = ones(numWords) #初始化分子為1  #初始化分母置為2    p0Denom = 2.0;   p1Denom = 2.0          #遍歷訓練集每個樣本    for i in range(numTrainDocs):    #若為侮辱類    if trainCategory[i] == 1:      #統計侮辱類所有文檔中的各個單詞總數      p1Num += trainMatrix[i] #向量      #p1Denom侮辱類總單詞數      p1Denom += sum(trainMatrix[i])     #若為正常類    else:      #統計正常類所有文檔中的各個單詞總數      p0Num += trainMatrix[i]      #p0Denom正常類總單詞數      p0Denom += sum(trainMatrix[i])    #數據取log,即單個單詞的p(x1|c1)取log,防止下溢出      p1Vect = log(p1Num/p1Denom)       p0Vect = log(p0Num/p0Denom)   return p0Vect,p1Vect,pAbusive #vec2Classify:待分類文檔 #p0Vect:詞匯表中每個單詞在訓練樣本的正常言論中的類條件概率密度#p1Vect:詞匯表中每個單詞在訓練樣本的侮辱性言論中的類條件概率密度#pClass1:侮辱性言論在訓練集中所占的比例def classifyNB(vec2Classify, p0Vect, p1Vect, pClass1):  #在對數空間中進行計算,屬于哪一類的概率比較大就判為哪一類  #print'0p1=',sum(vec2Classify * p0Vect) #查看結果  #print'0p0=',sum(vec2Classify * p0Vect)  p1 = sum(vec2Classify * p1Vect) + log(pClass1)    p0 = sum(vec2Classify * p0Vect) + log(1.0 - pClass1)  #print'p1=',p1  #print'p0=',p0  if p1 > p0:    return 1  else:     return 0 def testingNB():  #獲得訓練數據,類別標簽  listOPosts,listClasses = loadDataSet()  #創建詞匯表  myVocabList = createVocabList(listOPosts)  #構建矩陣,存放訓練數據  trainMat=[]   #遍歷原始數據,轉換為詞向量,構成數據訓練矩陣  for postinDoc in listOPosts:    #數據轉換后存入數據訓練矩陣trainMat中    trainMat.append(setOfWords2Vec(myVocabList, postinDoc))  #訓練分類器  p0V,p1V,pAb = trainNB0(array(trainMat),array(listClasses))   #===測試數據(1)  testEntry = ['love', 'my', 'dalmation']  #測試數據轉為詞向量  thisDoc = array(setOfWords2Vec(myVocabList, testEntry))  #輸出分類結果  print testEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb)   #===測試數據(2)  testEntry = ['stupid', 'garbage']  #測試數據轉為詞向量  thisDoc = array(setOfWords2Vec(myVocabList, testEntry))  #輸出分類結果  print testEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb)     #***詞袋模型:考慮單詞出現的次數#vocabList:詞匯表#inputSet :某個文檔向量def bagOfWords2VecMN(vocabList, inputSet):  #創建所含元素全為0的向量  returnVec = [0]*len(vocabList)  #依次取出文檔中的單詞與詞匯表進行對照,統計單詞在文檔中出現的次數  for word in inputSet:    if word in vocabList:      #單詞在文檔中出現的次數      returnVec[vocabList.index(word)] += 1    #若測試文檔的單詞,不在詞匯表中,顯示提示信息,該單詞出現次數用0表示    else: print "the word: %s is not in my Vocabulary!" % word  return returnVec  #準備數據,按空格切分出詞 #單詞長度小于或等于2的全部丟棄def textParse(bigString):    import re  listOfTokens = re.split(r'/W*', bigString)  #tok.lower() 將整個詞轉換為小寫  return [tok.lower() for tok in listOfTokens if len(tok) > 2]  def spamTest():  #文章按篇存放  docList=[];   #存放文章類別  classList = [];  #存放所有文章內容    fullText =[]  for i in range(1,26):    #讀取垃圾郵件    #wordList = textParse(open('D:/work/python/email/spam/%d.txt' % i).read())      wordList = textParse(open('D:/machine learning/python/bayes/email/spam/%d.txt' % i).read())      #docList按篇存放文章    docList.append(wordList)    #fullText郵件內容存放到一起    fullText.extend(wordList)    #垃圾郵件類別標記為1    classList.append(1)     #讀取正常郵件    #wordList = textParse(open('D:/work/python/email/ham/%d.txt' % i).read())    wordList = textParse(open('D:/machine learning/python/bayes/email/ham/%d.txt' % i).read())    docList.append(wordList)    fullText.extend(wordList)    #正常郵件類別標記為0    classList.append(0)   #創建詞典    vocabList = createVocabList(docList)  #訓練集共50篇文章  trainingSet = range(50);  #創建測試集  testSet=[]  #隨機選取10篇文章為測試集,測試集中文章從訓練集中刪除    for i in range(10):    #0-50間產生一個隨機數    randIndex = int(random.uniform(0,len(trainingSet)))    #從訓練集中找到對應文章,加入測試集中    testSet.append(trainingSet[randIndex])    #刪除對應文章    del(trainingSet[randIndex])    #準備數據,用于訓練分類器    trainMat=[]; #訓練數據  trainClasses = [] #類別標簽   #遍歷訓練集中文章數據  for docIndex in trainingSet:    #每篇文章轉為詞袋向量模型,存入trainMat數據矩陣中    trainMat.append(bagOfWords2VecMN(vocabList, docList[docIndex]))    #trainClasses存放每篇文章的類別    trainClasses.append(classList[docIndex])  #訓練分類器  p0V,p1V,pSpam = trainNB0(array(trainMat),array(trainClasses))   #errorCount記錄測試數據出錯次數  errorCount = 0  #遍歷測試數據集,每條數據相當于一條文本  for docIndex in testSet:    #文本轉換為詞向量模型      wordVector = bagOfWords2VecMN(vocabList, docList[docIndex])    #模型給出的分類結果與本身類別不一致時,說明模型出錯,errorCount數加1    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)    #return vocabList,fullText if __name__ == "__main__": ###**********************留言板數據:觀察參數值start###  #獲取數據  listOPosts,listClasses = loadDataSet() #  #構建詞匯表  myVocabList = createVocabList(listOPosts)  print 'myVocabList=',myVocabList  print 'result=',setOfWords2Vec(myVocabList, listOPosts[0])  trainMat = []  for postinDoc in listOPosts:    #構建訓練矩陣    trainMat.append(setOfWords2Vec(myVocabList, postinDoc))  p0Vect,p1Vect,pAbusive = trainNB0(trainMat, listClasses)  print 'p0Vect='  print p0Vect  print 'p1Vect='  print p1Vect  print 'pAbusive='  print pAbusive  print 'trainMatrix='  print trainMat  print 'listClasses=',listClasses###**********************留言板數據:觀察參數值end   ##  #測試留言板文檔  print'==================================='  testingNB() #***********************垃圾郵件  ##  #垃圾郵件分類  print'=======spam filtering============='  spamTest()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产成人综合在线观看 | 精品一区二区三区在线观看国产 | 特片网久久 | 亚洲人成网站在e线播放 | 欧美成人区| 中文字幕网在线 | 黄色片网站免费 | 在线成人看片 | 一级毛片在线免费观看视频 | 色屁屁xxxxⅹ免费视频 | 亚洲一区二区网址 | 成人在线视频播放 | 国产精品久久久久av | 精品视频在线免费看 | 日本羞羞的午夜电视剧 | 黑色丝袜美美女被躁视频 | 精品一区二区在线播放 | 精品一区二区三区在线观看国产 | 欧美成人黄色小视频 | 久久亚洲国产精品 | 国产亚洲网| 羞羞的视频免费观看 | 在线日韩av电影 | 91快色视频 | 极品xxxx欧美一区二区 | 在火车上摸两乳爽的大叫 | 毛片在线免费观看网址 | 毛片网站视频 | 久久久久久久久亚洲精品 | 免费欧美一级视频 | 91短视频版高清在线观看免费 | 一区二区三区视频在线观看 | 永久免费黄色大片 | 懂色av懂色aⅴ精彩av | 久久新网址 | 毛片免费视频在线观看 | 国产成人精品区一区二区不卡 | 欧美一区二区三区不卡免费观看 | 国产精品二区高清在线 | 97久久精品一区二区三区观看 | 成人在线观看地址 |