日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【机器学习入门】机器学习基础核心算法:贝叶斯分类!(附西瓜书案例及代码实现)...

發(fā)布時(shí)間:2025/3/8 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【机器学习入门】机器学习基础核心算法:贝叶斯分类!(附西瓜书案例及代码实现)... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?Datawhale?

作者:尹曉丹,Datawhale優(yōu)秀學(xué)習(xí)者

寄語:首先,簡(jiǎn)單介紹了生成模型和判別模型,對(duì)條件概率、先驗(yàn)概率和后驗(yàn)概率進(jìn)行了總結(jié);其次,對(duì)樸素貝葉斯的原理及公式推導(dǎo)做了詳細(xì)解讀;再次,對(duì)三種可能遇到的問題進(jìn)行了解析,給出了合理的解決辦法;最后,對(duì)樸素貝葉斯的sklearn參數(shù)和代碼進(jìn)行了詳解。

貝葉斯分類是一類分類算法的總稱,這類算法均以貝葉斯定理為基礎(chǔ),故統(tǒng)稱為貝葉斯分類。而樸素貝葉斯分類是貝葉斯分類中最簡(jiǎn)單,也是應(yīng)用最為廣泛的分類算法之一。樸素貝葉斯方法是在貝葉斯算法的基礎(chǔ)上進(jìn)行了相應(yīng)的簡(jiǎn)化,即假定給定目標(biāo)值時(shí)屬性之間相互條件獨(dú)立。

知識(shí)框架

相關(guān)概念

生成模型

概率統(tǒng)計(jì)理論中, 生成模型是指能夠隨機(jī)生成觀測(cè)數(shù)據(jù)的模型,尤其是在給定某些隱含參數(shù)的條件下。它給觀測(cè)值和標(biāo)注數(shù)據(jù)序列指定一個(gè)聯(lián)合概率分布。

在機(jī)器學(xué)習(xí)中,生成模型可以用來直接對(duì)數(shù)據(jù)建模(例如根據(jù)某個(gè)變量的概率密度函數(shù)進(jìn)行數(shù)據(jù)采樣),也可以用來建立變量間的條件概率分布。條件概率分布可以由生成模型根據(jù)貝葉斯定理形成。

常見的基于生成模型算法有高斯混合模型和其他混合模型、隱馬爾可夫模型、隨機(jī)上下文無關(guān)文法、樸素貝葉斯分類器、AODE分類器、潛在狄利克雷分配模型、受限玻爾茲曼機(jī)等。

舉個(gè)栗子:要確定一個(gè)瓜是好瓜還是壞瓜,用判別模型的方法使從歷史數(shù)據(jù)中學(xué)習(xí)到模型,然后通過提取這個(gè)瓜的特征來預(yù)測(cè)出這只瓜是好瓜的概率,是壞瓜的概率。

判別模型

在機(jī)器學(xué)習(xí)領(lǐng)域判別模型是一種對(duì)未知數(shù)據(jù) y 與已知數(shù)據(jù) x 之間關(guān)系進(jìn)行建模的方法。

判別模型是一種基于概率理論的方法。已知輸入變量 x ,判別模型通過構(gòu)建條件概率分布 P(y|x) 預(yù)測(cè) y 。

常見的基于判別模型算法有邏輯回歸、線性回歸、支持向量機(jī)、提升方法、條件隨機(jī)場(chǎng)、人工神經(jīng)網(wǎng)絡(luò)、隨機(jī)森林、感知器。

舉個(gè)栗子:利用生成模型是根據(jù)好瓜的特征首先學(xué)習(xí)出一個(gè)好瓜的模型,然后根據(jù)壞瓜的特征學(xué)習(xí)得到一個(gè)壞瓜的模型,然后從需要預(yù)測(cè)的瓜中提取特征,放到生成好的好瓜的模型中看概率是多少,在放到生產(chǎn)的壞瓜模型中看概率是多少,哪個(gè)概率大就預(yù)測(cè)其為哪個(gè)。

生成模型與判別模型的區(qū)別

生成模型是所有變量的全概率模型,而判別模型是在給定觀測(cè)變量值前提下目標(biāo)變量條件概率模型。

因此,生成模型能夠用于模擬(即生成)模型中任意變量的分布情況,而判別模型只能根據(jù)觀測(cè)變量得到目標(biāo)變量的采樣。判別模型不對(duì)觀測(cè)變量的分布建模,因此它不能夠表達(dá)觀測(cè)變量與目標(biāo)變量之間更復(fù)雜的關(guān)系。因此,生成模型更適用于無監(jiān)督的任務(wù),如分類和聚類。

先驗(yàn)概率、條件概率

條件概率

就是事件A在事件B發(fā)生的條件下發(fā)生的概率。條件概率表示為P(A|B),讀作“A在B發(fā)生的條件下發(fā)生的概率”。

先驗(yàn)概率

在貝葉斯統(tǒng)計(jì)中,某一不確定量 p 的先驗(yàn)概率分布是在考慮"觀測(cè)數(shù)據(jù)"前,能表達(dá) p 不確定性的概率分布。它旨在描述這個(gè)不確定量的不確定程度,而不是這個(gè)不確定量的隨機(jī)性。這個(gè)不確定量可以是一個(gè)參數(shù),或者是一個(gè)隱含變量。

后驗(yàn)概率

在貝葉斯統(tǒng)計(jì)中,一個(gè)隨機(jī)事件或者一個(gè)不確定事件的后驗(yàn)概率是在考慮和給出相關(guān)證據(jù)或數(shù)據(jù)后所得到的條件概率。

同樣,后驗(yàn)概率分布是一個(gè)未知量(視為隨機(jī)變量)基于試驗(yàn)和調(diào)查后得到的概率分布。“后驗(yàn)”在本文中代表考慮了被測(cè)試事件的相關(guān)證據(jù)。

貝葉斯決策理論

貝葉斯決策論是概率框架下實(shí)施決策的基本方法,對(duì)分類任務(wù)來說,在所有相關(guān)概率都已知的理想情形下,貝葉斯決策論考慮如何基于這些概率和誤判損失來選擇最優(yōu)的類別標(biāo)記。

假設(shè)有N種可能標(biāo)記,是將類誤分類為所產(chǎn)生的損失,基于后驗(yàn)概率可以獲得樣本x分類為所產(chǎn)生的期望損失 ,即在樣本x上的條件風(fēng)險(xiǎn):

我們的任務(wù)是尋找一個(gè)判定準(zhǔn)則 以最小化總體風(fēng)險(xiǎn)

顯然,對(duì)每個(gè)樣本,若能最小化條件風(fēng)險(xiǎn),則總體風(fēng)險(xiǎn)也將被最小化。這就產(chǎn)生了貝葉斯判定準(zhǔn)則:最小化總體風(fēng)險(xiǎn),只需要在每個(gè)樣本上選擇那個(gè)能使條件風(fēng)險(xiǎn)最小的類別標(biāo)記,即:

此時(shí),稱作貝葉斯最優(yōu)分類器,與之對(duì)應(yīng)的總體風(fēng)險(xiǎn)稱為貝葉斯風(fēng)險(xiǎn),反映了分類器能達(dá)到的最好性能,即機(jī)器學(xué)習(xí)所產(chǎn)生的模型精度的上限。具體來說,若目標(biāo)是最小化分類錯(cuò)誤率(對(duì)應(yīng)0/1損失),則可以用損失改寫,得到條件風(fēng)險(xiǎn)和最小化分類錯(cuò)誤率的最優(yōu)分類器分別為:

即對(duì)每個(gè)樣本x,選擇能使后驗(yàn)概率P(c|x)最大的類別標(biāo)識(shí)。

獲得后驗(yàn)概率的兩種方法:

  • 判別式模型 : 給定x, 可以通過直接建模P(c|x)來預(yù)測(cè)c。

  • 生成模型 : 先對(duì)聯(lián)合分布p(x,c)模,然后再有此獲得P(c|x)。

貝葉斯公式

對(duì)生成模型來說,必然考慮:

其中P(c)是“先驗(yàn)概率”;P(x|c)是樣本x對(duì)于類標(biāo)記c的類條件概率,或稱為“似然”;P(x)是用于歸一化的“證據(jù)”因子。上式即為貝葉斯公式,可以將其看做:

對(duì)類條件概率P(x|c)來說,直接根據(jù)樣本出現(xiàn)的頻率來估計(jì)將會(huì)遇到嚴(yán)重的困難,所以引入了極大似然估計(jì)。

極大似然估計(jì)

估計(jì)類條件概率有一種常用的策略就是先假定其具有某種確定的概率分布形式,再基于訓(xùn)練樣本對(duì)概率分布的參數(shù)進(jìn)行估計(jì)。

假設(shè)P(x|c)具有某種確定的形式并且被參數(shù)唯一確定,則我們的任務(wù)就是利用訓(xùn)練結(jié)D估計(jì)參數(shù)。為了明確期間,我們將P(x|c)記為。

舉個(gè)通俗的例子:假設(shè)一個(gè)袋子裝有白球與紅球,比例未知,現(xiàn)在抽取10次(每次抽完都放回,保證事件獨(dú)立性),假設(shè)抽到了7次白球和3次紅球,在此數(shù)據(jù)樣本條件下,可以采用最大似然估計(jì)法求解袋子中白球的比例(最大似然估計(jì)是一種“模型已定,參數(shù)未知”的方法)。

當(dāng)然,這種數(shù)據(jù)情況下很明顯,白球的比例是70%,但如何通過理論的方法得到這個(gè)答案呢?一些復(fù)雜的條件下,是很難通過直觀的方式獲得答案的,這時(shí)候理論分析就尤為重要了,這也是學(xué)者們?yōu)楹我岢鲎畲笏迫还烙?jì)的原因。我們可以定義從袋子中抽取白球和紅球的概率如下:

x1為第一次采樣,x2為第二次采樣,f為模型, theta為模型參數(shù)。其中θ是未知的,因此,我們定義似然L為:

兩邊取ln,取ln是為了將右邊的乘號(hào)變?yōu)榧犹?hào),方便求導(dǎo)。

兩邊取ln的結(jié)果,左邊的通常稱之為對(duì)數(shù)似然。

這是平均對(duì)數(shù)似然。最大似然估計(jì)的過程,就是找一個(gè)合適的theta,使得平均對(duì)數(shù)似然的值為最大。因此,可以得到以下公式:

最大似然估計(jì)的公式。這里討論的是2次采樣的情況,

當(dāng)然也可以拓展到多次采樣的情況:最大似然估計(jì)的公式(n次采樣)。我們定義M為模型(也就是之前公式中的f),表示抽到白球的概率為θ,而抽到紅球的概率為(1-θ),因此10次抽取抽到白球7次的概率可以表示為:

將其描述為平均似然可得:

10次抽取抽到白球7次的平均對(duì)數(shù)似然,抽球的情況比較簡(jiǎn)單,可以直接用平均似然來求解。那么最大似然就是找到一個(gè)合適的theta,獲得最大的平均似然。因此我們可以對(duì)平均似然的公式對(duì)theta求導(dǎo),并另導(dǎo)數(shù)為0。

求得,θ=0.7。求導(dǎo)過程 由此可得,當(dāng)抽取白球的概率為0.7時(shí),最可能產(chǎn)生10次抽取抽到白球7次的事件。以上就用到了最大似然估計(jì)的思想。

令Dc表示訓(xùn)練集D中第c類樣本組成的集合,假設(shè)這些集合是獨(dú)立同分布的,則對(duì)參數(shù)θc、對(duì)于數(shù)據(jù)集Dc的似然是:

對(duì)θc進(jìn)行激發(fā)似然估計(jì)買就是去尋找能最大化似然函數(shù)的參數(shù)值θc直觀上,極大似然估計(jì)是在試圖在θc的所有可能的去職中,找到一個(gè)能使數(shù)據(jù)出現(xiàn)最大“可能性”的最大值上面的式子中的連乘操作容易造成下溢,通常使用對(duì)數(shù)似然:

此時(shí),參數(shù)的極大似然估計(jì)為

例如,在連續(xù)屬性的情形下,假設(shè)概率密度函數(shù),則參數(shù)和。

也就是說通過極大似然發(fā)得到的額正態(tài)分布均值就是樣本均值,方差就是的均值。這顯然是一個(gè)符合只覺得結(jié)果,在離散屬性情形下,也可以通過類似的方法來估計(jì)類條件概率。

需要注意的是這種方法雖然能夠使類條件概率估計(jì)變得簡(jiǎn)單,但是估計(jì)結(jié)果準(zhǔn)確性嚴(yán)重依賴于所假設(shè)的概率分布形式是否符合潛在的真實(shí)數(shù)據(jù)分布。在顯示生活中往往需要應(yīng)用任務(wù)本身的經(jīng)驗(yàn)知識(shí),“猜測(cè)”則會(huì)導(dǎo)致誤導(dǎo)性的結(jié)果。

貝葉斯分類器的訓(xùn)練過程就是參數(shù)估計(jì)。總結(jié)最大似然法估計(jì)參數(shù)的過程,一般分為以下四個(gè)步驟:

  • 寫出似然函數(shù);

  • 對(duì)似然函數(shù)取對(duì)數(shù),并整理;

  • 求導(dǎo)數(shù),令偏導(dǎo)數(shù)為0,得到似然方程組;

  • 解似然方程組,得到所有參數(shù)即為所求。

樸素貝葉斯分類器

基于貝葉斯公式來估計(jì)后驗(yàn)概率P(c|x)主要困難在于類條件概率P(x|c)是所有屬性上的聯(lián)合概率,難以從有限的訓(xùn)練樣本直接估計(jì)而得。

基于有限訓(xùn)練樣本直接計(jì)算聯(lián)合概率,在計(jì)算上將會(huì)遭遇組合爆炸問題;在數(shù)據(jù)上將會(huì)遭遇樣本稀疏問題;屬性越多,問題越嚴(yán)重。

為了避開這個(gè)障礙,樸素貝葉斯分類器采用了“屬性條件獨(dú)立性假設(shè)”:對(duì)已知類別,假設(shè)所有屬性相互獨(dú)立。換言之,假設(shè)每個(gè)屬性獨(dú)立的對(duì)分類結(jié)果發(fā)生影響相互獨(dú)立。

回答西瓜的例子就可以認(rèn)為{色澤 根蒂 敲聲 紋理 臍部 觸感}這些屬性對(duì)西瓜是好還是壞的結(jié)果所產(chǎn)生的影響相互獨(dú)立。

基于條件獨(dú)立性假設(shè),對(duì)于多個(gè)屬性的后驗(yàn)概率可以寫成:

d為屬性數(shù)目,是在第個(gè)屬性上取值。對(duì)于所有的類別來說相同,基于極大似然的貝葉斯判定準(zhǔn)則有樸素貝葉斯的表達(dá)式:

極值問題情況下每個(gè)類的分類概率

很多時(shí)候遇到求出各種目標(biāo)函數(shù)(object function)的最值問題(最大值或者最小值)。關(guān)于函數(shù)最值問題,其實(shí)在高中的時(shí)候我們就已經(jīng)了解不少,最經(jīng)典的方法就是:直接求出極值點(diǎn)。

這些極值點(diǎn)的梯度為0。若極值點(diǎn)唯一,則這個(gè)點(diǎn)就是代入函數(shù)得出的就是最值;若極值點(diǎn)不唯一,那么這些點(diǎn)中,必定存在最小值或者最大值(去除函數(shù)的左右的最端點(diǎn)),所以把極值代入函數(shù),經(jīng)對(duì)比后可得到結(jié)果。

請(qǐng)注意:并不一定所有函數(shù)的極值都可以通過設(shè)置導(dǎo)數(shù)為0的方式求出。也就是說,有些問題中當(dāng)我們?cè)O(shè)定導(dǎo)數(shù)為0時(shí),未必能直接計(jì)算出滿足導(dǎo)數(shù)為0的點(diǎn)(比如邏輯回歸模型),這時(shí)候就需要利用數(shù)值計(jì)算相關(guān)的技術(shù)(最典型為梯度下降法,牛頓法……)。

下溢問題如何解決

數(shù)值下溢問題:是指計(jì)算機(jī)浮點(diǎn)數(shù)計(jì)算的結(jié)果小于可以表示的最小數(shù),因?yàn)橛?jì)算機(jī)的能力有限,當(dāng)數(shù)值小于一定數(shù)時(shí),其無法精確保存,會(huì)造成數(shù)值的精度丟失,由上述公式可以看到,求概率時(shí)多個(gè)概率值相乘,得到的結(jié)果往往非常小;因此通常采用取對(duì)數(shù)的方式,將連乘轉(zhuǎn)化為連加,以避免數(shù)值下溢。

零概率問題如何解決?

零概率問題,就是在計(jì)算實(shí)例的概率時(shí),如果某個(gè)量x,在觀察樣本庫(訓(xùn)練集)中沒有出現(xiàn)過,會(huì)導(dǎo)致整個(gè)實(shí)例的概率結(jié)果是0。

在實(shí)際的模型訓(xùn)練過程中,可能會(huì)出現(xiàn)零概率問題(因?yàn)橄闰?yàn)概率和反條件概率是根據(jù)訓(xùn)練樣本算的,但訓(xùn)練樣本數(shù)量不是無限的,所以可能出現(xiàn)有的情況在實(shí)際中存在,但在訓(xùn)練樣本中沒有,導(dǎo)致為0的概率值,影響后面后驗(yàn)概率的計(jì)算)。

即便可以繼續(xù)增加訓(xùn)練數(shù)據(jù)量,但對(duì)于有些問題來說,數(shù)據(jù)怎么增多也是不夠的。這時(shí)我們說模型是不平滑的,我們要使之平滑,一種方法就是將訓(xùn)練(學(xué)習(xí))的方法換成貝葉斯估計(jì)。

現(xiàn)在看一個(gè)示例,及P(敲聲=清脆∣好瓜=是)=8/0=0。不論樣本的其他屬性如何,分類結(jié)果都會(huì)為“好瓜=否”,這樣顯然不太合理。

樸素貝葉斯算法的先天缺陷

其他屬性攜帶的信息被訓(xùn)練集中某個(gè)分類下未出現(xiàn)的屬性值“抹去”,造成預(yù)測(cè)出來的概率絕對(duì)為0。為了彌補(bǔ)這一缺陷,前輩們引入了拉普拉斯平滑的方法:對(duì)先驗(yàn)概率的分子(劃分的計(jì)數(shù))加1,分母加上類別數(shù);對(duì)條件概率分子加1,分母加上對(duì)應(yīng)特征的可能取值數(shù)量。這樣在解決零概率問題的同時(shí),也保證了概率和依然為1:

其中,N表示數(shù)據(jù)集中分類標(biāo)簽,表示第個(gè)屬性的取值類別數(shù),樣本容量,表示類別的記錄數(shù)量,表示類別中第個(gè)屬性取值為的記錄數(shù)量。

將這兩個(gè)式子應(yīng)用到上面的計(jì)算過程中,就可以彌補(bǔ)樸素貝葉斯算法的這一缺陷問題。

用西瓜的數(shù)據(jù)來看,當(dāng)我們計(jì)算 P(好瓜=是) 時(shí),樣本有17個(gè),所以|D| = 17,N,好瓜標(biāo)簽可以分為{是,否}兩類,所以N=2,(好瓜=是)的樣本個(gè)數(shù)有8個(gè),所以這里。

綜上,根據(jù)拉普拉斯平滑后有

P(色澤=青綠|好瓜=是)時(shí),色澤青綠的樣本有8個(gè),所以|D_c| = 8,色澤標(biāo)簽可以分為{青綠,淺白,烏黑}三類,所以N=3,(好瓜=是)的樣本個(gè)數(shù)有3個(gè),所以這里=3。綜上,根據(jù)拉普拉斯平滑后有

同理,分析可知,之前不合理的P(敲聲=清脆∣好瓜=是)=80=0P(敲聲=清脆|好瓜=是)=\frac{8}{0}=0P(敲聲=清脆∣好瓜=是)=?8/0?=0在進(jìn)行拉普拉斯平滑后為:

顯然結(jié)果不是0,使結(jié)果變得合理。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

1. 樸素貝葉斯模型有穩(wěn)定的分類效率。

2. 對(duì)小規(guī)模的數(shù)據(jù)表現(xiàn)很好,能處理多分類任務(wù),適合增量式訓(xùn)練,尤其是數(shù)據(jù)量超出內(nèi)存時(shí),可以一批批的去增量訓(xùn)練。

3. 對(duì)缺失數(shù)據(jù)不太敏感,算法也比較簡(jiǎn)單,常用于文本分類。

缺點(diǎn)

1. 理論上,樸素貝葉斯模型與其他分類方法相比具有最小的誤差率。但是實(shí)際上并非總是如此,這是因?yàn)闃闼刎惾~斯模型給定輸出類別的情況下,假設(shè)屬性之間相互獨(dú)立,這個(gè)假設(shè)在實(shí)際應(yīng)用中往往是不成立的,在屬性個(gè)數(shù)比較多或者屬性之間相關(guān)性較大時(shí),分類效果不好。而在屬性相關(guān)性較小時(shí),樸素貝葉斯性能最為良好。對(duì)于這一點(diǎn),有半樸素貝葉斯之類的算法通過考慮部分關(guān)聯(lián)性適度改進(jìn)。

2. 需要知道先驗(yàn)概率,且先驗(yàn)概率很多時(shí)候取決于假設(shè),假設(shè)的模型可以有很多種,因此在某些時(shí)候會(huì)由于假設(shè)的先驗(yàn)?zāi)P偷脑驅(qū)е骂A(yù)測(cè)效果不佳。

3. 由于我們是通過先驗(yàn)和數(shù)據(jù)來決定后驗(yàn)的概率從而決定分類,所以分類決策存在一定的錯(cuò)誤率。

4. 對(duì)輸入數(shù)據(jù)的表達(dá)形式很敏感。

sklearn參數(shù)詳解

高斯樸素貝葉斯算法是假設(shè)特征的可能性(即概率)為高斯分布。

class sklearn.naive_bayes.GaussianNB(priors=None)

參數(shù):

1. priors : 先驗(yàn)概率大小,如果沒有給定,模型則根據(jù)樣本數(shù)據(jù)自己計(jì)算(利用極大似然法)。

2. var_smoothing:可選參數(shù),所有特征的最大方差

屬性:

3. class_prior_ : 每個(gè)樣本的概率

4. class_count : 每個(gè)類別的樣本數(shù)量

5. classes_ : 分類器已知的標(biāo)簽類型

6. theta_ : 每個(gè)類別中每個(gè)特征的均值

7. sigma_ : 每個(gè)類別中每個(gè)特征的方差

8. epsilon_ : 方差的絕對(duì)加值方法

貝葉斯的方法和其他模型的方法一致

1. fit(X,Y) : 在數(shù)據(jù)集(X,Y)上擬合模型。

2. get_params() : 獲取模型參數(shù)。

3. predict(X) : 對(duì)數(shù)據(jù)集X進(jìn)行預(yù)測(cè)。

4. predict_log_proba(X) : 對(duì)數(shù)據(jù)集X預(yù)測(cè),得到每個(gè)類別的概率對(duì)數(shù)值。

5. predict_proba(X) : 對(duì)數(shù)據(jù)集X預(yù)測(cè),得到每個(gè)類別的概率。

6. score(X,Y) : 得到模型在數(shù)據(jù)集(X,Y)的得分情況。

構(gòu)建樸素貝葉斯模型

這里采用GaussianNB 高斯樸素貝葉斯,概率密度函數(shù)為:

import numpy as np import pandas as pd import matplotlib.pyplot as plt %matplotlib inlinefrom sklearn.datasets import load_iris from sklearn.model_selection import train_test_splitfrom collections import Counter import math import?math # data def create_data():iris = load_iris()df = pd.DataFrame(iris.data, columns=iris.feature_names)df['label'] = iris.targetdf.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'label']data = np.array(df.iloc[:100, :])# print(data)return?data[:,:-1],?data[:,-1] import math class NaiveBayes:def __init__(self):self.model = None# 數(shù)學(xué)期望@staticmethoddef mean(X):"""計(jì)算均值Param: X : list or np.ndarrayReturn:avg : float"""avg = 0.0# ========= show me your code ==================avg = sum(X) / float(len(X))# ========= show me your code ==================return avg# 標(biāo)準(zhǔn)差(方差)def stdev(self, X):"""計(jì)算標(biāo)準(zhǔn)差Param: X : list or np.ndarrayReturn:res : float"""res = 0.0# ========= show me your code ==================avg = self.mean(X)res = math.sqrt(sum([pow(x - avg, 2) for x in X]) / float(len(X)))# ========= show me your code ==================return res# 概率密度函數(shù)def gaussian_probability(self, x, mean, stdev):"""根據(jù)均值和標(biāo)注差計(jì)算x符號(hào)該高斯分布的概率Parameters:----------x : 輸入mean : 均值stdev : 標(biāo)準(zhǔn)差Return:res : float, x符合的概率值"""res = 0.0# ========= show me your code ==================exponent = math.exp(-(math.pow(x - mean, 2) /(2 * math.pow(stdev, 2))))res = (1 / (math.sqrt(2 * math.pi) * stdev)) * exponent# ========= show me your code ==================return res# 處理X_traindef summarize(self, train_data):"""計(jì)算每個(gè)類目下對(duì)應(yīng)數(shù)據(jù)的均值和標(biāo)準(zhǔn)差Param: train_data : listReturn : [mean, stdev]"""summaries = [0.0, 0.0]# ========= show me your code ==================summaries = [(self.mean(i), self.stdev(i)) for i in zip(*train_data)]# ========= show me your code ==================return summaries# 分類別求出數(shù)學(xué)期望和標(biāo)準(zhǔn)差def fit(self, X, y):labels = list(set(y))data = {label: [] for label in labels}for f, label in zip(X, y):data[label].append(f)self.model = {label: self.summarize(value) for label, value in data.items()}return 'gaussianNB train done!'# 計(jì)算概率def calculate_probabilities(self, input_data):"""計(jì)算數(shù)據(jù)在各個(gè)高斯分布下的概率Paramter:input_data : 輸入數(shù)據(jù)Return:probabilities : {label : p}"""# summaries:{0.0: [(5.0, 0.37),(3.42, 0.40)], 1.0: [(5.8, 0.449),(2.7, 0.27)]}# input_data:[1.1, 2.2]probabilities = {}# ========= show me your code ==================for label, value in self.model.items():probabilities[label] = 1for i in range(len(value)):mean, stdev = value[i]probabilities[label] *= self.gaussian_probability(input_data[i], mean, stdev)# ========= show me your code ==================return probabilities# 類別def predict(self, X_test):# {0.0: 2.9680340789325763e-27, 1.0: 3.5749783019849535e-26}label = sorted(self.calculate_probabilities(X_test).items(), key=lambda x: x[-1])[-1][0]return label# 計(jì)算得分def score(self, X_test, y_test):right = 0for X, y in zip(X_test, y_test):label = self.predict(X)if label == y:right += 1return?right?/?float(len(X_test)) model = NaiveBayes() model.fit(X_train,?y_train) print(model.predict([3.4, 6.2, 2.0, 0.3])) model.score(X_test,?y_test)

往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)在線手冊(cè)AI基礎(chǔ)下載(pdf更新到25集)本站qq群1003271085,加入微信群請(qǐng)回復(fù)“加群”獲取一折本站知識(shí)星球優(yōu)惠券,復(fù)制鏈接直接打開:https://t.zsxq.com/yFQV7am喜歡文章,點(diǎn)個(gè)在看

總結(jié)

以上是生活随笔為你收集整理的【机器学习入门】机器学习基础核心算法:贝叶斯分类!(附西瓜书案例及代码实现)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。