国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

樸素貝葉斯算法

這篇具有很好參考價值的文章主要介紹了樸素貝葉斯算法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

樸素貝葉斯公式來歷

?

Na?veBayes算法,又叫樸素貝葉斯算法。
??樸素:特征條件獨立;
??貝葉斯:基于貝葉斯定理。屬于監(jiān)督學(xué)習(xí)的生成模型,實現(xiàn)簡單,沒有迭代,并有堅實的數(shù)學(xué)理論(即貝葉斯定理)作為支撐。在大量樣本下會有較好的表現(xiàn),不適用于輸入向量的特征條件有關(guān)聯(lián)的場景。
??樸素貝葉斯(Naive Bayesian)是基于貝葉斯定理和特征條件獨立假設(shè)的分類方法,它 通過特征計算分類的概率,選取概率大的情況,是基于概率論的一種機器學(xué)習(xí)分類(監(jiān)督學(xué)習(xí))方法,被廣泛應(yīng)用于情感分類領(lǐng)域的分類器。
樸素貝葉斯算法是應(yīng)用最為廣泛的分類算法之一,在垃圾郵件分類等場景展露出了非常優(yōu)秀的性能。
在介紹樸素貝葉斯公式前,先介紹一下條件概率公式。條件概率表示在B已經(jīng)發(fā)生的條件下,A發(fā)生概率。
樸素貝葉斯算法

樸素貝葉斯公式就是條件概率的變形。
假設(shè)已有數(shù)據(jù)為
樸素貝葉斯算法
其中x為屬性值,y為分類結(jié)果,共有n個已有數(shù)據(jù)。每個x有多種屬性,以第一組數(shù)據(jù)為例,上標(biāo)表示第幾個屬性值,x的具體表示如下
樸素貝葉斯算法?
假設(shè)y的可取值為(c1,c2,…,ck)
則貝葉斯公式表示為
樸素貝葉斯算法
由公式可以看出,貝葉斯公式就是條件概率的公式。貝葉斯公式的解釋很簡單:在已有數(shù)據(jù)的基礎(chǔ)上,出現(xiàn)了一個新數(shù)據(jù),只有X=(a1,a2,…,am),來預(yù)測y的取值。貝葉斯公式就是求在目前X發(fā)生的情況下,y取不同值的概率大小進行排序,取最大概率的y值。
其中X有多個屬性,樸素貝葉斯假設(shè)各個屬性之間是獨立的,因此
樸素貝葉斯算法
因此樸素貝葉斯公式可以寫成
樸素貝葉斯算法
此公式的含義就是在目前已知歷史數(shù)據(jù)數(shù)據(jù)的前提下,出現(xiàn)了一個新的X,求在X已經(jīng)發(fā)生的條件下,y取不同值的概率,然后取使得條件概率最大的y作為預(yù)測結(jié)果。也就是說尋找y的取值Cn,使得上式最大。

舉例:在夏季,某公園男性穿涼鞋的概率為 1/2 ,女性穿涼鞋的概率為?2/3 ,并且該公園中男女比例通常為?2:1 ,問題:若你在公園中隨機遇到一個穿涼鞋的人,請問他的性別為男性或女性的概率分別為多少?

分析:
在例子中,根據(jù)男女比例2:1,可得 P(Y=ymen)=2/3,P(Y=ywomen)=1/3
在例子中:男性穿涼鞋的概率為?1/2,也就是說“是男性的前提下,穿涼鞋的概率是?1/2,此概率為條件概率,即?P(X=x1|Y=ymen)=1/2。同理“女性穿涼鞋的概率為?2/3” 為條件概率?P(X=x1|Y=ywomen)=2/3。
則P(X=x1)=(1/2*2+2/3*1)/3=5/9
則可得
樸素貝葉斯算法

?同理
樸素貝葉斯算法

?則為男性的概率為3/5 為女性的概率為2/5.

垃圾郵件分類實現(xiàn)

步驟:

收集數(shù)據(jù):提供文本文件。
準(zhǔn)備數(shù)據(jù):將文本文件解析成詞條向量。
分析數(shù)據(jù):檢查詞條確保解析的正確性。
訓(xùn)練算法:計算不同的獨立特征的條件概率。
測試算法:計算錯誤率。
使用算法:構(gòu)建一個完整的程序?qū)σ唤M文檔進行分類

訓(xùn)練集的準(zhǔn)備與處理

準(zhǔn)備兩個文件夾分別存入垃圾郵件及正常郵件兩種郵件當(dāng)作訓(xùn)練集。

樸素貝葉斯算法樸素貝葉斯算法

?準(zhǔn)備數(shù)據(jù):從文本中構(gòu)建詞向量

def loadDataSet():
    postingList=[['my','dog','has','flea','problems','help','please'],
                 ['maybe','not','take','him','to','dog','park','stupid'],
                 ['my','dalmatian','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]  #1代表侮辱性文字,0代表正常言論(對應(yīng)6個文檔)
    return postingList,classVec

def createVocabList(dataSet):
    vocabSet=set()
    for document in dataSet:
        vocabSet=vocabSet|set(document)   #兩個集合的并集
    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

訓(xùn)練算法:從詞向量計算概率

import numpy as np
def trainNB0(trainMatrix,trainCategory):
    numTrainDocs=len(trainMatrix)   
    numWords=len(trainMatrix[0])   
    pABusive=sum(trainCategory)/float(numTrainDocs) 
    # p0Num=np.zeros(numWords)
    # p1Num=np.zeros(numWords)
    # p0Denom=0.0
    # p1Denom=0.0
    p0Num=np.ones(numWords)
    p1Num=np.ones(numWords)
    p0Denom=2.0 
    p1Denom=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=p1Num/p1Denom
    # p0Vect=p0Num/p0Denom
    p1Vect=np.log(p1Num/p1Denom)
    p0Vect=np.log(p0Num/p0Denom)

    return  p0Vect,p1Vect,pABusive

?貝葉斯分類函數(shù)

#貝葉斯分類函數(shù)
def classifyNB(vec2Classify,p0Vec,p1Vec,pClass1):
    p1=sum(vec2Classify*p1Vec)+np.log(pClass1)
    p0=sum(vec2Classify*p0Vec)+np.log(1-pClass1)
    if p1>p0:
        return 1
    else:
        return 0
def NBtesting():
    listOPosts,listClasses=loadDataSet()
    myVocabList=createVocabList(listOPosts)
    trainMat=[]
    for postinDoc in listOPosts:
        trainMat.append(setOfWords2Vec(myVocabList,postinDoc))
    p0V,p1V,pAb=trainNB0(np.array(trainMat),np.array(listClasses))
    testEntry=['love','my','dalmation']
    thidDoc=np.array(setOfWords2Vec(myVocabList,testEntry))
    print(testEntry,'classified as:',classifyNB(thidDoc,p0V,p1V,pAb))
    testEntry=['stupid','garbage']
    thisDoc=np.array(setOfWords2Vec(myVocabList,testEntry))
    print(testEntry,'classified as:',classifyNB(thisDoc,p0V,p1V,pAb))

文檔詞袋模型?

#樸素貝葉斯詞袋模型
def bagOfWords2Vec(vocabList,inputSet):
    returnVec=[0*len(vocabList)]
    for word in inputSet:
        if word in vocabList:
            returnVec[vocabList.index(word)]+=1
    return returnVec

切分文本?

mySent='This book is the best book on python or M.L. I have ever laid eyes upon.'
print(mySent.split())
import re
mySent='This book is the best book on python or M.L. I have ever laid eyes upon.'
regEX=re.compile('\\W+')
listOfTokens=regEX.split(mySent)
print(listOfTokens)
import re
mySent='This book is the best book on python or M.L. I have ever laid eyes upon.'
regEX=re.compile('\\W+')
listOfTokens=regEX.split(mySent)
print([tok for tok in listOfTokens if len(tok)>0])
print([tok.lower() for tok in listOfTokens if len(tok)>0])

使用樸素貝葉斯進行交叉驗證

def textParse(bigString):  
    import re
    listOfTokens = re.split(r'\W*', bigString)  
    return [tok.lower() for tok in listOfTokens if len(tok) > 2] 
import random
def spamTest():
    docList = []
    classList = []
    fullText = []
    for i in range(1, 26):  # 遍歷25個txt文件
        wordList = textParse(open('C:/Users/Administrator/Desktop/email/spam/%d.txt' % i).read())  # 讀取每個垃圾郵件,并字符串轉(zhuǎn)換成字符串列表
        docList.append(wordList)
        fullText.append(wordList)
        classList.append(1)  # 標(biāo)記垃圾郵件,1表示垃圾文件
        wordList = textParse(open('C:/Users/Administrator/Desktop/email/ham/%d.txt' % i).read())  # 讀取每個非垃圾郵件,并字符串轉(zhuǎn)換成字符串列表
        docList.append(wordList)
        fullText.append(wordList)
        classList.append(0)  # 標(biāo)記正常郵件,0表示正常文件
    vocabList = createVocabList(docList)  # 創(chuàng)建詞匯表,不重復(fù)
    trainingSet = list(range(50))
    testSet = []  # 創(chuàng)建存儲訓(xùn)練集的索引值的列表和測試集的索引值的列表
    for i in range(10):  # 從50個郵件中,隨機挑選出40個作為訓(xùn)練集,10個做測試集
        randIndex = int(random.uniform(0, len(trainingSet)))  # 隨機選取索索引值
        testSet.append(trainingSet[randIndex])  # 添加測試集的索引值
        del (trainingSet[randIndex])  # 在訓(xùn)練集列表中刪除添加到測試集的索引值
    trainMat = []
    trainClasses = []  # 創(chuàng)建訓(xùn)練集矩陣和訓(xùn)練集類別標(biāo)簽系向量
    for docIndex in trainingSet:  # 遍歷訓(xùn)練集
        trainMat.append(setOfWords2Vec(vocabList, docList[docIndex]))  # 將生成的詞集模型添加到訓(xùn)練矩陣中
        trainClasses.append(classList[docIndex])  # 將類別添加到訓(xùn)練集類別標(biāo)簽系向量中
    p0V, p1V, pSpam = trainNB0(np.array(trainMat), np.array(trainClasses))  # 訓(xùn)練樸素貝葉斯模型
    errorCount = 0  # 錯誤分類計數(shù)
    for docIndex in testSet:  # 遍歷測試集
        wordVector = setOfWords2Vec(vocabList, docList[docIndex])  # 測試集的詞集模型
        if classifyNB(np.array(wordVector), p0V, p1V, pSpam) != classList[docIndex]:  # 如果分類錯誤
            errorCount += 1  # 錯誤計數(shù)加1
            # print("分類錯誤的測試集:",docList[docIndex])
    print('錯誤率:%.2f%%' % (float(errorCount) / len(testSet) * 100))
spamTest()

測試結(jié)果: (隨機獲取10個訓(xùn)練集里的文本當(dāng)做測試集)

樸素貝葉斯算法
樸素貝葉斯算法?
樸素貝葉斯算法?

由結(jié)果可知錯誤率平均為0.6 我認(rèn)為錯誤率這么大的原因是因為我的訓(xùn)練集樣本不夠豐富而且訓(xùn)練集樣本中很多文檔的內(nèi)容相似,如果有夠好的訓(xùn)練集的話訓(xùn)練結(jié)果應(yīng)該會更好。

總結(jié)

樸素貝葉斯優(yōu)缺點:
優(yōu)點:在數(shù)據(jù)較少的情況下仍然有效,可以處理多類別問題
缺點:對于輸入數(shù)據(jù)的準(zhǔn)備方式較為敏感,由于樸素貝葉斯的“特征條件獨立”特點,所以會帶來一些準(zhǔn)確率上的損失
?

代碼參考機器學(xué)習(xí)實戰(zhàn)課本文章來源地址http://www.zghlxwxcb.cn/news/detail-493766.html

到了這里,關(guān)于樸素貝葉斯算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【樸素貝葉斯算法】

    貝葉斯定理簡介 貝葉斯定理是樸素貝葉斯算法的基礎(chǔ),它是一種概率理論,用于計算在給定一些條件下,另一些條件的概率。貝葉斯定理的核心思想是通過已知的信息來更新對未知事件的概率估計。 在貝葉斯定理中,我們用P(A|B)表示在事件B發(fā)生的條件下事件A發(fā)生的概率。它

    2024年02月15日
    瀏覽(24)
  • 樸素貝葉斯算法的介紹

    樸素貝葉斯算法的介紹

    一、樸素貝葉斯算法的介紹 1.什么是樸素貝葉斯算法? 樸素貝葉斯算法(Naive Bayes Algorithm)是一種基于貝葉斯定理和特征獨立性假設(shè)的概率分類算法。它被廣泛應(yīng)用于文本分類、垃圾郵件過濾、情感分析等任務(wù)。 樸素貝葉斯算法的 基本思想是基于訓(xùn)練數(shù)據(jù)中的特征和標(biāo)簽之

    2024年02月07日
    瀏覽(23)
  • 樸素貝葉斯算法

    樸素貝葉斯算法

    ? Na?veBayes算法,又叫樸素貝葉斯算法。 ??樸素:特征條件獨立; ??貝葉斯:基于貝葉斯定理。屬于監(jiān)督學(xué)習(xí)的生成模型,實現(xiàn)簡單,沒有迭代,并有堅實的數(shù)學(xué)理論(即貝葉斯定理)作為支撐。在大量樣本下會有較好的表現(xiàn),不適用于輸入向量的特征條件有關(guān)聯(lián)的場景

    2024年02月09日
    瀏覽(16)
  • 【機器學(xué)習(xí) | 樸素貝葉斯】樸素貝葉斯算法:概率統(tǒng)計方法之王,簡單有效的數(shù)據(jù)分類利器

    【機器學(xué)習(xí) | 樸素貝葉斯】樸素貝葉斯算法:概率統(tǒng)計方法之王,簡單有效的數(shù)據(jù)分類利器

    ???♂? 個人主頁: @AI_magician ??主頁地址: 作者簡介:CSDN內(nèi)容合伙人,全棧領(lǐng)域優(yōu)質(zhì)創(chuàng)作者。 ?????景愿:旨在于能和更多的熱愛計算機的伙伴一起成長??!????? ???♂?聲明:本人目前大學(xué)就讀于大二,研究興趣方向人工智能硬件(雖然硬件還沒開始玩,但一直

    2024年02月15日
    瀏覽(28)
  • 無涯教程-分類算法 - 樸素貝葉斯

    樸素貝葉斯算法是一種基于應(yīng)用貝葉斯定理的分類技術(shù),其中強烈假設(shè)所有預(yù)測變量彼??此獨立。簡而言之,假設(shè)是某個類中某個要素的存在獨立于同一類中其他任何要素的存在。 在貝葉斯分類中,主要的興趣是找到后驗概率,即給定某些觀察到的特征的標(biāo)簽的概率。借助

    2024年02月11日
    瀏覽(19)
  • 機器學(xué)習(xí)算法——貝葉斯分類器3(樸素貝葉斯分類器)

    機器學(xué)習(xí)算法——貝葉斯分類器3(樸素貝葉斯分類器)

    基于貝葉斯公式來估計后驗概率P(c|x)的主要困難在于:類條件概率P(x|c)是所有屬性上的聯(lián)合概率,難以從有限的訓(xùn)練樣本直接估計而得。 為避開這個障礙,樸素貝葉斯分類器(Naive Bayes classfier)采用了“ 屬性條件獨立性假設(shè) ”:對已知類別,假設(shè)所有屬性相互獨立。換句話

    2023年04月22日
    瀏覽(27)
  • 【機器學(xué)習(xí)】十大算法之一 “樸素貝葉斯”

    【機器學(xué)習(xí)】十大算法之一 “樸素貝葉斯”

    ? 作者主頁: 愛笑的男孩。的博客_CSDN博客-深度學(xué)習(xí),活動,python領(lǐng)域博主 愛笑的男孩。擅長深度學(xué)習(xí),活動,python,等方面的知識,愛笑的男孩。關(guān)注算法,python,計算機視覺,圖像處理,深度學(xué)習(xí),pytorch,神經(jīng)網(wǎng)絡(luò),opencv領(lǐng)域. https://blog.csdn.net/Code_and516?type=blog 個人簡介:打工人。 持續(xù)分

    2024年02月09日
    瀏覽(25)
  • 機器學(xué)習(xí)算法系列(六)-- 樸素貝葉斯

    機器學(xué)習(xí)算法系列(六)-- 樸素貝葉斯

    樸素貝葉斯法是基于概率統(tǒng)計,特征條件獨立假設(shè)的分類方法,是一種非常常用的機器學(xué)習(xí)算法;通常用于處理文本分類和情感分析等自然語言處理任務(wù)中。相對于其他復(fù)雜的模型,樸素貝葉斯算法具有簡單、易于實現(xiàn)、高效和良好的準(zhǔn)確性等特點。 概率論基礎(chǔ) 條件概率 事

    2024年02月07日
    瀏覽(17)
  • 21- 樸素貝葉斯 (NLP自然語言算法) (算法)

    21- 樸素貝葉斯 (NLP自然語言算法) (算法)

    樸素貝葉斯要點 概率圖模型 算法往往應(yīng)用于 NLP自然語言處理領(lǐng)域 。 根據(jù) 文本內(nèi)容 判定 分類 。 ?概率密度公式 :?? 高斯 樸素貝葉斯算法: 伯努利分布 樸素貝葉斯算法 多項式分布 樸素貝葉斯表現(xiàn) 英文one-hot 編碼: jieba.lcut (str) 數(shù)據(jù)去重 :??? result = np.unique (result)?? ?

    2023年04月09日
    瀏覽(21)
  • 《機器學(xué)習(xí)核心算法》分類算法 - 樸素貝葉斯 MultinomialNB

    《機器學(xué)習(xí)核心算法》分類算法 - 樸素貝葉斯 MultinomialNB

    「作者主頁」: 士別三日wyx 「作者簡介」: CSDN top100、阿里云博客專家、華為云享專家、網(wǎng)絡(luò)安全領(lǐng)域優(yōu)質(zhì)創(chuàng)作者 「推薦專欄」: 小白零基礎(chǔ)《Python入門到精通》 樸素貝葉斯法(Naive Bayes model 簡稱 NBM )是基于 「貝葉斯定理」 與 「特征條件獨立假設(shè)」 的分類方法。 「貝

    2024年02月08日
    瀏覽(54)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包