精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于概率的常見的分類方法--樸素貝葉斯

算法&編程學院 ? 來源:網絡整理 ? 2018-02-03 14:37 ? 次閱讀

今天介紹機器學習中一種基于概率的常見的分類方法,樸素貝葉斯,之前介紹的KNN, decision tree 等方法是一種 hard decision,因為這些分類器的輸出只有0 或者 1,樸素貝葉斯方法輸出的是某一類的概率,其取值范圍在 0-1 之間,樸素貝葉斯在做文本分類,或者說垃圾郵件識別的時候非常有效。

樸素貝葉斯就是基于我們常用的貝葉斯定理:

假設我們要處理一個二分類問題: c1,c2,給定一個樣本,比如說是一封郵件,可以用向量 x 來表示,郵件就是一個文本,而文本是由單詞構成的,所以 x 其實包含了這封郵件里出現的單詞的信息,我們要求的就是,給定樣本 x ,我們需要判斷這個樣本是屬于 c1 還是屬于 c2,當然,我們可以用概率表示為:

這個就是我們常見的后驗概率。根據貝葉斯定理,我們可以得到:

機器學習:樸素貝葉斯--python

這就是我們說的樸素貝葉斯,接下來的就是各種統計了。

我們給出一個利用樸素貝葉斯做文本分類的例子:

首先建立一個數據庫:

def Load_dataset():

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

接下來,我們建立一個字典庫,保證每一個單詞在這個字典庫里都有一個位置索引,一般來說,字典庫的大小,就是我們樣本的維度大?。?/p>

def Create_vocablist(dataset):

vocabSet = set([])

for document in dataset :

vocabSet = vocabSet | set(document)

return list(vocabSet)

我們可以將樣本轉成向量:一種方法是只統計該單詞是否出現,另外一種是可以統計該單詞出現的次數。

def Word2Vec(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 the vocabulary” % word)

return returnVec

def BoW_Vec(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 the vocabulary” % word)

return returnVec

接下來,我們建立分類器:這里需要注意的是,由于概率都是 0-1 之間的數,連續的相乘,會讓最終結果趨于0,所以我們可以把概率相乘轉到對數域的相加:

def Train_NB(trainMat, trainClass) :

Num_doc = len(trainMat)

Num_word = len(trainMat[0])

P_1 = sum(trainClass) / float(Num_doc)

P0_num = np.zeros(Num_word) + 1

P1_num = np.zeros(Num_word) + 1

P0_deno = 2.0

P1_deno = 2.0

for i in range(Num_doc):

if trainClass[i] == 1:

P1_num += trainMat[i]

P1_deno +=sum(trainMat[i])

else:

P0_num += trainMat[i]

P0_deno += sum(trainMat[i])

P1_vec = np.log(P1_num / P1_deno)

P0_vec = np.log(P0_num / P0_deno)

return P_1, P1_vec, P0_vec

def Classify_NB(testVec, P0_vec, P1_vec, P1):

p1 = sum(testVec * P1_vec) + math.log(P1)

p0 = sum(testVec * P0_vec) + math.log(1-P1)

if p1 》 p0:

return 1

else:

return 0

def Text_parse(longstring):

import re

regEx = re.compile(r‘\W*’)

Listoftokens = regEx.split(longstring)

return [tok.lower() for tok in Listoftokens if len(tok)》0]

# return Listoftokens

這里給出簡單的測試:

test_string = ‘This book is the best book on Python or M.L.\

I have ever laid eyes upon.’

wordList = Text_parse(test_string)

Mydata, classVec = Load_dataset()

‘’‘

Doc_list = []

Full_list = []

for i in range (len(Mydata)):

Doc_list.append(Mydata[i])

Full_list.extend(Mydata[i])

’‘’

Vocablist = Create_vocablist(Mydata)

Wordvec = Word2Vec(Vocablist, Mydata[0])

trainMat = []

for doc in Mydata:

trainMat.append(Word2Vec(Vocablist, doc))

P_1, P1_vec, P0_vec = Train_NB(trainMat, classVec)

print Mydata

print classVec

print wordList

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 機器學習
    +關注

    關注

    66

    文章

    8382

    瀏覽量

    132444
  • python
    +關注

    關注

    56

    文章

    4783

    瀏覽量

    84473
收藏 人收藏

    評論

    相關推薦

    非常通俗的樸素算法(Naive Bayes)

    樸素算法(Naive Bayes)閱讀目錄一、病人分類的例子二、樸素貝葉斯
    發表于 10-08 10:14

    機器學習的樸素講解

    秦剛剛的機器學習成長之路之樸素
    發表于 05-15 14:41

    樸素法的優缺點

    樸素法(1) 之 基礎概念
    發表于 08-05 11:32

    樸素法的惡意留言過濾

    樸素法(2) 之 惡意留言過濾
    發表于 08-26 14:40

    常用的分類方法樸素

    統計學習方法樸素
    發表于 11-05 09:24

    樸素算法的理解

    我對樸素算法的理解
    發表于 05-15 14:13

    機器學習之樸素應用教程

    今天介紹機器學習中一種基于概率常見分類方法,樸素
    發表于 11-25 12:49 ?1375次閱讀
    機器學習之<b class='flag-5'>樸素</b><b class='flag-5'>貝</b><b class='flag-5'>葉</b><b class='flag-5'>斯</b>應用教程

    樸素算法的后延概率最大化的認識與理解

    樸素法是基于貝葉斯定理與特征條件獨立假設的分類方法。最為廣泛的兩種
    發表于 11-30 17:11 ?3299次閱讀
    <b class='flag-5'>樸素</b><b class='flag-5'>貝</b><b class='flag-5'>葉</b><b class='flag-5'>斯</b>算法的后延<b class='flag-5'>概率</b>最大化的認識與理解

    分類算法及其實現

     算法描述及實現根據樸素公式,每個測試樣
    發表于 02-02 15:54 ?7433次閱讀
    <b class='flag-5'>貝</b><b class='flag-5'>葉</b><b class='flag-5'>斯</b><b class='flag-5'>分類</b>算法及其實現

    樸素NB經典案例

    分類算法是統計學的一種分類方法,其分類原理就是
    發表于 02-28 10:17 ?2次下載

    機器學習之樸素

    學習過概率的人一定知道貝葉斯定理,在信息領域內有著無與倫比的地位。算法是基于貝葉斯定理的一類算法,主要用來解決分類和回歸問題。人工智能
    發表于 05-29 09:01 ?882次閱讀

    樸素算法詳細總結

    樸素法是基于貝葉斯定理與特征條件獨立假設的分類方法,是經典的機器學習算法之一,處理很多問題
    的頭像 發表于 07-01 08:37 ?3.5w次閱讀
    <b class='flag-5'>樸素</b><b class='flag-5'>貝</b><b class='flag-5'>葉</b><b class='flag-5'>斯</b>算法詳細總結

    帶你入門常見的機器學習分類算法——邏輯回歸、樸素、KNN、SVM、決策樹

    樸素方法是一組基于貝葉斯定理的監督學習算法,在給定類變量值的情況下,樸素假設每對特征之間存
    的頭像 發表于 05-06 09:29 ?1w次閱讀

    樸素分類 樸素算法的優點

    。 雖然這個簡化方式在一定程度上降低了分類算法的分類效果,但是在實際的應用場景中,極大地簡化了
    的頭像 發表于 10-02 17:14 ?9265次閱讀

    使用樸素和GPU進行更快的文本分類

    樸素( NB )是一種簡單但功能強大的概率分類技術,具有良好的并行性,可以擴展到大規模數據
    的頭像 發表于 10-10 14:50 ?1278次閱讀
    使用<b class='flag-5'>樸素</b><b class='flag-5'>貝</b><b class='flag-5'>葉</b><b class='flag-5'>斯</b>和GPU進行更快的文本<b class='flag-5'>分類</b>