樸素貝葉斯python小樣本執行個體

來源:互聯網
上載者:User

標籤:類別   rds   dal   向量   虛擬碼   利用   錯誤   eve   作用   

樸素貝葉斯
優點:在資料較少的情況下仍然有效,可以處理多類別問題
缺點:對於輸入資料的準備方式較為敏感
適用資料類型:標稱型資料
樸素貝葉斯決策理論的核心思想:選擇具有最高機率的決策
樸素貝葉斯的一般過程
(1)收集資料:可以使用任何方法。
(2)準備資料:需要數值型或者布爾型資料。
(3)分析資料:有大量特徵時,回值特徵作用不大,此時使用長條圖效果更好
(4)訓練演算法:計算不同的獨立也正的條件機率
(5)測試演算法:計算錯誤率
(6)使用演算法:一個常見的樸素貝葉斯應用是文檔分類。可以在任意的分類情境中使用樸素貝葉斯分類器,不一定是文本

  1 from numpy import *  2   3 #建立一些實驗樣本。該函數返回的第一個變數是進行詞條切分後的文檔集合,  4 #該函數返回的第二個變數是一個類別標籤的集合  5 def loadDataSet():  6     postingList=[[‘my‘, ‘dog‘, ‘has‘, ‘flea‘, ‘problems‘, ‘help‘, ‘please‘],  7                  [‘maybe‘, ‘not‘, ‘take‘, ‘him‘, ‘to‘, ‘dog‘, ‘park‘, ‘stupid‘],  8                  [‘my‘, ‘dalmation‘, ‘is‘, ‘so‘, ‘cute‘, ‘I‘, ‘love‘, ‘him‘],  9                  [‘stop‘, ‘posting‘, ‘stupid‘, ‘worthless‘, ‘garbage‘], 10                  [‘mr‘, ‘licks‘, ‘ate‘, ‘my‘, ‘steak‘, ‘how‘, ‘to‘, ‘stop‘, ‘him‘], 11                  [‘quit‘, ‘buying‘, ‘worthless‘, ‘dog‘, ‘food‘, ‘stupid‘]] 12     classVec = [0,1,0,1,0,1]    #1 is abusive, 0 not 13     return postingList,classVec 14  15 #建立一個包含所有文檔中出現的不重複詞的列表 16 def createVocabList(dataSet): 17     #建立一個空集 18     vocabSet = set([])  #create empty set 19     for document in dataSet: 20         #建立兩個集合的並集 21         vocabSet = vocabSet | set(document) #union of the two sets 22     return list(vocabSet) 23  24 #該函數的輸入參數為詞彙表及其某個文檔,輸出的是文檔向量,向量的每一元素為1或0, 25 # 分別表示詞彙表中的單詞在輸入文檔中是否出現。 26 #函數首先建立一個和詞彙表等長的向量,並將其元素都設定為0.接著,遍曆文檔中的所有單詞, 27 # 如果出現了詞彙表中的單詞,則將輸出的文檔向量中對應值設為1.一切順利的話,就不需要 28 # 檢查某個詞是否還在vocabList中,後邊可能會用到這一操作 29 def setOfWords2Vec(vocabList, inputSet): 30     #建立一個維度都為0的向量 31     returnVec = [0]*len(vocabList) 32     for word in inputSet: 33         if word in vocabList: 34             returnVec[vocabList.index(word)] = 1 35         else: print ("the word: %s is not in my Vocabulary!" % word) 36     return returnVec 37 ‘‘‘ 38 該函數的虛擬碼如下: 39 計算每個類別中的文檔數目 40 對每篇訓練文檔: 41     對每個類別: 42         如果詞條出現文檔中則增加該詞條的計數值 43         增加所有詞條的計數值 44     對每個類別: 45         對每個詞條: 46             將該詞條的數目除以總詞條數目得到條件機率 47     返回每個類別的條件機率 48 ‘‘‘ 49  50 # 51 def trainNB0(trainMatrix,trainCategory): 52     numTrainDocs = len(trainMatrix) 53     numWords = len(trainMatrix[0]) 54     #初始化機率 55     pAbusive = sum(trainCategory)/float(numTrainDocs) 56     p0Num = ones(numWords); p1Num = ones(numWords)      #change to ones() 57     p0Denom = 2.0; p1Denom = 2.0                        #change to 2.0 58     for i in range(numTrainDocs): 59         #向量相加 60         if trainCategory[i] == 1: 61             p1Num += trainMatrix[i] 62             p1Denom += sum(trainMatrix[i]) 63         else: 64             p0Num += trainMatrix[i] 65             p0Denom += sum(trainMatrix[i]) 66             #對每個元素做除法 67     p1Vect = log(p1Num/p1Denom)          #change to log() 68     p0Vect = log(p0Num/p0Denom)          #change to log() 69     return p0Vect,p1Vect,pAbusive 70  71 def classifyNB(vec2Classify, p0Vec, p1Vec, pClass1): 72     p1 = sum(vec2Classify * p1Vec) + log(pClass1)    #element-wise mult 73     p0 = sum(vec2Classify * p0Vec) + log(1.0 - pClass1) 74     if p1 > p0: 75         return 1 76     else: 77         return 0 78  79 def bagOfWords2VecMN(vocabList, inputSet): 80     returnVec = [0]*len(vocabList) 81     for word in inputSet: 82         if word in vocabList: 83             returnVec[vocabList.index(word)] += 1 84     return returnVec 85  86 def testingNB(): 87     listOPosts,listClasses = loadDataSet() 88     myVocabList = createVocabList(listOPosts) 89     trainMat=[] 90     for postinDoc in listOPosts: 91         trainMat.append(setOfWords2Vec(myVocabList, postinDoc)) 92     p0V,p1V,pAb = trainNB0(array(trainMat),array(listClasses)) 93     testEntry = [‘love‘, ‘my‘, ‘dalmation‘] 94     thisDoc = array(setOfWords2Vec(myVocabList, testEntry)) 95     print(testEntry,‘classified as: ‘,classifyNB(thisDoc,p0V,p1V,pAb)) 96     testEntry = [‘stupid‘, ‘garbage‘] 97     thisDoc = array(setOfWords2Vec(myVocabList, testEntry)) 98     print (testEntry,‘classified as: ‘,classifyNB(thisDoc,p0V,p1V,pAb)) 99 #如果一個詞在文檔中出現不止依次,這可能意味著包含該詞是否出現的文檔所不能表達的某種資訊,100 # 這種方法被稱為詞袋模型。101 # #102 103 mySent=‘This book is the best book on Python or M.L. I have ever laid eyes upon.‘104 A=mySent.split()105 print(A)

小結:

對於分類而言,使用機率有時要比使用硬規則更為有效。貝葉斯機率及貝葉斯準則提供了一種利用已知值來估計未知機率的有效方法。

可以通過特徵之間的調教獨立性假設,降低對資料量的需求。獨立性假設是指一個詞的出現機率並不依賴於文檔中的其他詞。當然我們也知道這個假設過於簡單,這就是之所以稱之為樸素貝葉斯的原因。儘管條件獨立性假設並不正確,但是樸素貝葉斯仍然是一種有效分類器。

 

樸素貝葉斯python小樣本執行個體

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.