贝叶斯分类器的matlab实现_贝叶斯实验
貝葉斯實(shí)驗(yàn)
Part 1.仿真實(shí)驗(yàn)
隨機(jī)產(chǎn)生10000組正樣本和20000負(fù)樣本高斯分布的數(shù)據(jù)集合(維數(shù)設(shè)為二維),要求正樣本:均值為[1;3],方差為[2 0;0 2];負(fù)樣本:均值為[10;20],方差為[10 0;0 10]。先驗(yàn)概率按樣本量設(shè)定為1/3和2/3.分別利用最小錯(cuò)誤概率貝葉斯分類器和最小風(fēng)險(xiǎn)概率貝葉斯分類器對(duì)其分類。(假設(shè)風(fēng)險(xiǎn)程度正樣本分錯(cuò)風(fēng)險(xiǎn)系數(shù)為0.6,負(fù)樣本分錯(cuò)風(fēng)險(xiǎn)為0.4,該設(shè)定僅用于最小風(fēng)險(xiǎn)分析)2
Part 2. 實(shí)際應(yīng)用—汽車評(píng)價(jià)分類
給定汽車評(píng)價(jià)數(shù)據(jù)集,下載鏈接:http://archive.ics.uci.edu/ml/datasets/Car+Evaluation,利用貝葉斯算法進(jìn)行數(shù)據(jù)分類操作,并統(tǒng)計(jì)其預(yù)測(cè)正確率。 (1)數(shù)據(jù)描述 共1728個(gè)數(shù)據(jù),每個(gè)數(shù)據(jù)特征為6維,分為4類,類別標(biāo)記為unacc,acc,good,V-good 四個(gè)類別標(biāo)記分別表示汽車性價(jià)比等級(jí)(由低到高) unacc:1210個(gè) acc:384個(gè) good:69個(gè) V-good:65個(gè) 6個(gè)特征分別為:(6個(gè)屬性) 1、buying (取值:v-high、high、med、low) 表示購(gòu)買價(jià)格 2、maint (取值: v-high、high、med、low) 表示維修價(jià)格 3、door (取值:2、3、4、5-more) 車門數(shù)量 4、Persons (取值:2、4、more) 可容納人數(shù) 5、Lug_boot (取值:small、med、big) 行李箱大小 6、Safety (取值:low、med、high) 安全系數(shù) (2)實(shí)驗(yàn)完成要求 1. 仔細(xì)閱讀實(shí)驗(yàn)說(shuō)明并了解數(shù)據(jù)集; 2. 使用任何一種熟悉的計(jì)算機(jī)語(yǔ)言(比如 C,Java或者M(jìn)ATLAB)實(shí)現(xiàn)樸素貝葉斯算法; 3. 利用10折交叉驗(yàn)證,對(duì)所設(shè)計(jì)的貝葉斯分類器進(jìn)行性能評(píng)估; 4. 提交代碼,統(tǒng)計(jì)并分析實(shí)驗(yàn)結(jié)果,上交實(shí)驗(yàn)報(bào)告;
實(shí)驗(yàn)過(guò)程
-  貝葉斯公式 $large P(omega{_i}|x)= large{ P(x|omega_i)P(w_i) over sum P(x|omega_i)P(w_i)}$
 因?yàn)榉帜甘且欢ǖ?#xff0c;公式可以寫成 : $large P( omega{_i}|x) ∝ P(x|omega_i)P(w_i)$
 因?yàn)?P(x|omega_i)$在實(shí)際中無(wú)法從有限的樣本中估計(jì)而來(lái),假設(shè)所有的特征相互獨(dú)立(即使在理想條件下效果也是非常好的)得到樸素貝葉斯。
 即:$large P( omega{_i}|x) ∝ P(x_1|omega_i)cdots P(x_n|omega_i)P(w_i)$
 樸素貝葉斯的模型概率圖表示(盤式記法)
-  貝葉斯最優(yōu)分類器
 考慮到樣本誤分類產(chǎn)生的損失,為其相應(yīng)的分類加權(quán)。得到
 條件風(fēng)險(xiǎn):$R(omega_i|x) = sum lambda_{ij}P(omega_j|x)$
 尋求一個(gè)判定準(zhǔn)則最小化總體風(fēng)險(xiǎn):$R(h)= E_x[ R(h(x)|x)]$
 貝葉斯最優(yōu)分類器: $h^*(x) = underset{omega}{argmax} P(omega_i|x)$
 當(dāng)目標(biāo)是最小化分類錯(cuò)誤率,其損失函數(shù)
 $$lambda_{ij} begin{cases} 0 & text{if i=j} 1 & text{if i!=j}end{cases}$$
 此時(shí),條件風(fēng)險(xiǎn)為: $$R(omega|x) = 1-P(omega|x)$$
 $$h*(x) = underset{omega}{argmin} P(omega_i|x)$$
-  判別式模型與生成式模型
 假設(shè)可觀察到的變量集合為 $X$ 需要預(yù)測(cè)的變量集合為 $Y$ 其它的變量集合為 $Z$ 。 生成式模型判別式模型是直接對(duì)聯(lián)合概率分布$P(X,Y,Z)進(jìn)行建模在給定觀測(cè)集合的$X$ 的條件下通過(guò)計(jì)算邊緣概率分布進(jìn)行推斷。而判別式模型是直接求條件概率進(jìn)行推斷。 樸素貝葉斯是生成式模型。
貝葉斯方法封裝
- 代碼
- 主要思路 根據(jù)已知樣本集訓(xùn)練分類器,求得先驗(yàn)概率和密度概率。
- 實(shí)驗(yàn)步驟
-  從汽車的數(shù)據(jù)集上可以看出,樣本太少而其特征類別44433*3遠(yuǎn)高于某一類別的數(shù)量,若測(cè)試集中出現(xiàn)了原來(lái)沒有出現(xiàn)過(guò)的特征,導(dǎo)致其Px_y的概率為0,比如good類別safety只有high和med。對(duì)實(shí)驗(yàn)結(jié)果也有一定的影響,若某個(gè)屬性值在訓(xùn)練過(guò)程中沒有與某個(gè)類同時(shí)出現(xiàn)過(guò),則根據(jù)連乘式將會(huì)把其它屬性攜帶的信息抹去,這是不可靠的。
 使用上面通過(guò)這個(gè)例子折射處一個(gè)問(wèn)題:訓(xùn)練集上,很多樣本的取值可能并不在其中,但是這不并代表這種情況發(fā)生的概率為0,因?yàn)槲幢挥^測(cè)到,并不代表出現(xiàn)的概率為0 。在概率估計(jì)時(shí),通常解決這個(gè)問(wèn)題的方法是要進(jìn)行平滑處理,常用拉普拉斯修正。拉普拉斯修正的含義是,在訓(xùn)練集中總共的分類數(shù),用 N 表示;di 屬性可能的取值數(shù)用 Ni 表示,因此原來(lái)的先驗(yàn)概率 P(c) 的計(jì)算公式由:
 先驗(yàn)概率: $P(c) = large{c over C}$$P(c) = large{c+1 over C+N}$
 條件概率: $P(x|c) = large{c_x over C_x}$ $P(x|c) = large{c_x+1 over C_x+N_i}$
 該方法避免了因訓(xùn)練集樣本的不充分而導(dǎo)致概率估計(jì)值為零的問(wèn)題,在訓(xùn)練集變大時(shí),修正所帶來(lái)的影響可以忽略不計(jì),使得估值趨近于實(shí)際概率值。- 貝葉斯估計(jì)
 我們計(jì)算樸素貝葉斯,使用的是極大似然估計(jì)法去估計(jì)相應(yīng)的概率,這會(huì)導(dǎo)致上面出現(xiàn)的問(wèn)題,我們就用拉普拉斯修正,這就成為了貝葉斯估計(jì)。在理想條件下得到的就是貝葉斯最優(yōu)分類器,但是由于先驗(yàn)概率和密度概率都是由樣本估計(jì)得到的,所以存在一定的誤差,也就是說(shuō)樣本越接近全集,或者其分布近似全集的分布,則其可以看做貝葉斯最優(yōu)分類器,但樣本是全集的話就沒有意義。深度學(xué)習(xí)是樣本集可以看做大到全集。
 
- 貝葉斯估計(jì)
- 計(jì)算先驗(yàn)概率,后驗(yàn)概率時(shí)計(jì)算過(guò)程中取log運(yùn)算,因?yàn)閷?duì)數(shù)值小的部分差異的敏感程度比數(shù)值大的部分的差異敏感程度更高,這是符合常識(shí)的,化累法為累加便于計(jì)算,同時(shí)防止由于數(shù)據(jù)下溢而導(dǎo)致計(jì)算結(jié)果無(wú)法比較。
Part1
- 代碼
- 實(shí)驗(yàn)技巧
在生成數(shù)據(jù)時(shí)將數(shù)據(jù)取小數(shù)點(diǎn)后三位,否則的numpy生成的實(shí)驗(yàn)數(shù)據(jù)的小數(shù)位數(shù)太多不僅處理起來(lái)比較麻煩,計(jì)算也比較復(fù)雜。 * 實(shí)驗(yàn)結(jié)果
可以看到最小錯(cuò)誤概率貝葉斯分類器準(zhǔn)確率基本相等于最小風(fēng)險(xiǎn)概率貝葉斯分類器。
Part2
- 代碼
- 實(shí)驗(yàn)思路 由于給出的是標(biāo)注數(shù)據(jù)集,但是其特征未進(jìn)行處理,我們先將數(shù)據(jù)進(jìn)行預(yù)處理,進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。最后用自己封裝的貝葉斯方法進(jìn)行10折交叉驗(yàn)證處理,得到實(shí)驗(yàn)結(jié)果。
- 交叉驗(yàn)證
交叉驗(yàn)證的基本思想是將數(shù)據(jù)集分為k等份,對(duì)于每一份數(shù)據(jù)集,其中k-1份用作訓(xùn)練集,單獨(dú)的那一份用作測(cè)試集。在實(shí)際當(dāng)中,進(jìn)行一次k折交叉驗(yàn)證還是不夠的,我們需要進(jìn)行多次,比如我進(jìn)行了10次10折交叉驗(yàn)證。
- 實(shí)驗(yàn)結(jié)果
- 實(shí)驗(yàn)結(jié)果分析
實(shí)驗(yàn)數(shù)據(jù)的結(jié)果比較低,我認(rèn)為是如下原因,
|class | N | N[%]| |------|-----------|------------| |unacc |1210 | (70.023 %) | |acc |384 | (22.222 %) | |good |69 |( 3.993 %) | |v-good |65 |( 3.762 %) | 1. Class Distribution (number of instances per class)
可以看到其數(shù)據(jù)并不是均勻分布的,unacc所占的比例極大導(dǎo)致了先驗(yàn)概率過(guò)高絕大多數(shù)的分類為unacc,使得分類的結(jié)果傾向于所占比例較大的類。其他
其中data是汽車數(shù)據(jù)集,而means是封裝過(guò)后的貝葉斯函數(shù)。
而means文件夾下的test.py是處理隨機(jī)數(shù)的文件。load_data.py是處理car數(shù)據(jù)集的文件。
分析與總結(jié)
本次實(shí)驗(yàn)主要對(duì)貝葉斯方法進(jìn)行實(shí)驗(yàn),也只是實(shí)現(xiàn)了一小部分,貝葉斯分類種類很多,高斯和多項(xiàng)式等。對(duì)樸素貝葉斯有了更深刻的理解,在實(shí)際代碼實(shí)現(xiàn)時(shí),要考慮各種數(shù)據(jù)情況,并做出相應(yīng)的處理,增強(qiáng)其健壯性。
算法優(yōu)點(diǎn):
- 算法邏輯簡(jiǎn)單,易于實(shí)現(xiàn)(算法思路很簡(jiǎn)單,只要使用貝葉斯公式轉(zhuǎn)化即可!)
- 分類過(guò)程中時(shí)空開銷小(假設(shè)特征相互獨(dú)立,只會(huì)涉及到二維存儲(chǔ))
缺點(diǎn):
- 樸素貝葉斯假設(shè)屬性之間相互獨(dú)立,這種假設(shè)在實(shí)際過(guò)程中往往是不成立的。在屬性之間相關(guān)性越大,分類誤差也就越大。
反思:
實(shí)驗(yàn)遇到了許多bug,參考了相當(dāng)多的資料,包括numpy,pandas,sklearn,通過(guò)本次實(shí)驗(yàn)加深了對(duì)這些庫(kù)的使用熟練度,也學(xué)到了相當(dāng)多的知識(shí),像產(chǎn)生的二維隨機(jī)數(shù)特征若果不加以處理就會(huì)產(chǎn)生異常的數(shù)據(jù)庫(kù),每一個(gè)類條件密度概率都非常低,導(dǎo)致結(jié)果下溢報(bào)錯(cuò),參考csdn,學(xué)習(xí)了數(shù)據(jù)的處理方法,還有sklearn的編碼庫(kù),一開始我是使用的是python的replace操作去替代類型轉(zhuǎn)換,但是相當(dāng)麻煩,查找資料,發(fā)現(xiàn)了sklearn的解決方案等等。實(shí)驗(yàn)收獲很大,在以后面臨相同的問(wèn)題時(shí),知道該如何解決。
總結(jié)
以上是生活随笔為你收集整理的贝叶斯分类器的matlab实现_贝叶斯实验的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: flink sql udf jar包_F
- 下一篇: ewebeditor 图片上传中 请等待
