導航:首頁 > 編程語言 > 非參數貝葉斯代碼

非參數貝葉斯代碼

發布時間:2023-01-14 13:30:11

① 如何簡單易懂地理解貝葉斯非參數模型

貝葉斯非參數模型關於隨機事件A和B的條件概率或邊緣概率的一則定理。其中P(A|B)是在B發生的情況下A發生的可能性。

用Ph表示在沒有訓練數據前假設h擁有的初始概率。Ph被稱為h的先驗概率。先驗概率反映了關於h是一正確假設的機會的背景知識如果沒有這一先驗知識。

可以簡單地將每一候選假設賦予相同的先驗概率。PD表示訓練數據D的先驗概率,PD表示假設h成立時D的概率。機器學習中,我們關心的是Ph,即給定D時h的成立的概率,稱為h的後驗概率。



舉例說明:

問題:假定有一個新病人,化驗結果為正,是否應將病人斷定為有癌症。求後驗概率Pcancer+和Pcancer+。

因此極大後驗假設計算如下:

P+cancerPcancer=0.0078。

P+cancerPcancer=0.0298。

hMAP=cancer。

確切的後驗概率可將上面的結果歸一化以使它們的和為1。

貝葉斯推理的結果很大程度上依賴於先驗概率,另外不是完全接受或拒絕假設,只是在觀察到較多的數據後增大或減小了假設的可能性。

② c語言編程實現 基於最小錯誤率的貝葉斯決策

貝葉斯決策理論(Bayesian Decision Theory)

貝葉斯決策理論概述
貝葉斯決策理論是主觀貝葉斯派歸納理論的重要組成部分。
貝葉斯決策就是在不完全情報下,對部分未知的狀態用主觀概率估計,然後用貝葉斯公式對發生概率進行修正,最後再利用期望值和修正概率做出最優決策。
貝葉斯決策理論方法是統計模型決策中的一個基本方法,其基本思想是:
★已知類條件概率密度參數表達式和先驗概率
★利用貝葉斯公式轉換成後驗概率
★根據後驗概率大小進行決策分類

貝葉斯公式

設D1,D2,……,Dn為樣本空間S的一個劃分,如果以P(Di)表示事件Di發生的概率,且P(Di)>0(i=1,2,…,n)。對於任一事件x,P(x)>0,如圖

貝葉斯決策理論分析

(1)如果我們已知被分類類別概率分布的形式和已經標記類別的訓練樣本集合,那我們就需要從訓練樣本集合中來估計概率分布的參數。在現實世界中有時會出現這種情況。(如已知為正態分布了,根據標記好類別的樣本來估計參數,常見的是極大似然率和貝葉斯參數估計方法)
(2)如果我們不知道任何有關被分類類別概率分布的知識,已知已經標記類別的訓練樣本集合和判別式函數的形式,那我們就需要從訓練樣本集合中來估計判別式函數的參數。在現實世界中有時會出現這種情況。(如已知判別式函數為線性或二次的,那麼就要根據訓練樣本來估計判別式的參數,常見的是線性判別式和神經網路
(3)如果我們既不知道任何有關被分類類別概率分布的知識,也不知道判別式函數的形式,只有已經標記類別的訓練樣本集合。那我們就需要從訓練樣本集合中來估計概率分布函數的參數。在現實世界中經常出現這種情況。(如首先要估計是什麼分布,再估計參數。常見的是非參數估計)
(4)只有沒有標記類別的訓練樣本集合。這是經常發生的情形。我們需要對訓練樣本集合進行聚類,從而估計它們概率分布的參數。(這是無監督的學習)
(5)如果我們已知被分類類別的概率分布,那麼,我們不需要訓練樣本集合,利用貝葉斯決策理論就可以設計最優分類器。但是,在現實世界中從沒有出現過這種情況。這里是貝葉斯決策理論常用的地方。
問題:假設我們將根據特徵矢量x 提供的證據來分類某個物體,那麼我們進行分類的標準是什麼?decide wj, if(p(wj|x)>p(wi|x))(i不等於j)應用貝葉斯展開後可以得到p(x|wj)p(wj)>p(x|wi)p(wi)即或然率p(x|wj)/p(x|wi)>p(wi)/p(wj),決策規則就是似然率測試規則。
結論:
對於任何給定問題,可以通過似然率測試決策規則得到最小的錯誤概率。這個錯誤概率稱為貝葉斯錯誤率,且是所有分類器中可以得到的最好結果。最小化錯誤概率的決策規則就是最大化後驗概率判據。

貝葉斯決策判據

貝葉斯決策理論方法是統計模式識別中的一個基本方法。貝葉斯決策判據既考慮了各類參考總體出現的概率大小,又考慮了因誤判造成的損失大小,判別能力強。貝葉斯方法更適用於下列場合:
(1) 樣本(子樣)的數量(容量)不充分大,因而大子樣統計理論不適宜的場合。
(2) 試驗具有繼承性,反映在統計學上就是要具有在試驗之前已有先驗信息的場合。用這種方法進行分類時要求兩點:
第一,要決策分類的參考總體的類別數是一定的。例如兩類參考總體(正常狀態Dl和異常狀態D2),或L類參考總體D1,D2,…,DL(如良好、滿意、可以、不滿意、不允許、……)。
第二,各類參考總體的概率分布是已知的,即每一類參考總體出現的先驗概率P(Di)以及各類概率密度函數P(x/Di)是已知的。顯然,0≤P(Di)≤1,(i=l,2,…,L),∑P(Di)=1。
對於兩類故障診斷問題,就相當於在識別前已知正常狀態D1的概率戶(D1)和異常狀態0:的概率P(D2),它們是由先驗知識確定的狀態先驗概率。如果不做進一步的仔細觀測,僅依靠先驗概率去作決策,那麼就應給出下列的決策規則:若P(D1)>P(D2),則做出狀態屬於D1類的決策;反之,則做出狀態屬於D2類的決策。例如,某設備在365天中,有故障是少見的,無故障是經常的,有故障的概率遠小於無故障的概率。因此,若無特B,j明顯的異常狀況,就應判斷為無故障。顯然,這樣做對某一實際的待檢狀態根本達不到診斷的目的,這是由於只利用先驗概率提供的分類信息太少了。為此,我們還要對系統狀態進行狀態檢測,分析所觀測到的信息。

③ 怎麼將這個貝葉斯演算法加入到這個代碼裡面

你這個程序是幹啥的?為何要用到貝葉斯演算法,用了貝葉斯演算法,希望得到一個啥結果?

④ 貝葉斯代碼請教

生成二維正態分布的樣本300個為 X N 維的矩陣
,這個是書中的測試程序,你不能直接套用

matlab中mvnrnd的具體解釋。
R = mvnrnd(MU,SIGMA)——從均值為MU,協方差為SIGMA的正態分布中抽取n*d的矩陣R(n代表抽取的個數,d代表分布的維數)。
MU為n*d的矩陣,R中的每一行為以MU中對應的行為均值的正態分布中抽取的一個樣本。
SIGMA為d*d的對稱半正定矩陣,或者為d*d*n的array。若SIGMA為array,R中的每一行對應的分布的協方差矩陣為該array對應的一個page。也就是說:R(i,:)由MU(i,:)和SIGMA(:,:,i)產生。
如果協方差矩陣為對角陣,sigma也可用1*d向量或1*d*n的array表示,如果MU是一個1*d的向量,則SIGMA中的n個協方差矩陣共用這個MU。
R的行數n由MU的行數n或者SIGMA的page數n決定。

r = mvnrnd(MU,SIGMA,cases)——從均值為MU(1*d),協方差矩陣為SIGMA(d*d)的正態分布中隨機抽取cases個樣本,返回cases*d的矩陣r。

⑤ 給樸素貝葉斯代碼(c++)注釋

我看了下代碼,寫得非常淺顯...我覺得也沒啥好注釋的....我想你主要是想知道怎樣使用nb吧.

nb是生成模型的最樸素的實現.基於的是貝葉斯估計.貝葉斯估計的核心是公式:
P(Y | X) = P (X , Y) / P (X)
= P(Y) P (X | Y) / sum(P(Y) P (X | Y))

網上打字好累,我學術鄙陋,表達一般,若打算深入學習,建議看看李航的統計學習方法,裡面相關的描述很不錯.
若有興趣,我也可以把其中例4.2中的推導轉給你看.相比於你這段代碼更直觀一點.雖然其實是一回事

⑥ 貝葉斯網路模型 matlab 源代碼

>> N = 8;
dag = zeros(N,N);
X2=2;X3=3;X4=4; X1=1;C = 5; B = 6;A = 7;T = 8;
dag([X2 X3],C)=1;
dag([X3 X4],B)=1;
dag([X1 C],A)=1;
dag([A B],T)=1;
discrete_nodes = 1:N;
node_sizes = 2*ones(1,N);
bnet = mk_bnet(dag, node_sizes);
bnet.CPD{
X1
} = tabular_CPD(bnet, X1, [0.01 0.99]);
bnet.CPD{
X2
} = tabular_CPD(bnet, X2, [0.02 0.98]);
bnet.CPD{
X3
} = tabular_CPD(bnet, X3, [0.03 0.97]);
bnet.CPD{
X4
} = tabular_CPD(bnet, X4, [0.04 0.96]);
bnet.CPD{
A
} = tabular_CPD(bnet, A, [1 1 1 0 0 0 0 1]);
bnet.CPD{
B
} = tabular_CPD(bnet, B, [1 1 1 0 0 0 0 1]);
bnet.CPD{
C
} = tabular_CPD(bnet, C, [1 0 0 0 0 1 1 1]);
bnet.CPD{
T
} = tabular_CPD(bnet, T, [1 0 0 0 0 1 1 1]);
G=bnet.dag;
draw_graph(G);
engine=jtree_inf_engine(bnet);
evidence=cell(1,N);
[engine,ll]=enter_evidence(engine,evidence);
m=marginal_nodes(engine,[X1]);
m.T

⑦ 貝葉斯MATLAB異常檢測代碼

close all; clear all; X=-6:0.0001:6; %設置采樣范圍及精度 pw1=0.9;pw2=0.1; %設置先驗概率 u1=-2;sig1=0.25;u2=2;sig2=4; %設置類條件概率分布參數 y1=(1./sqrt(2*pi*sig1))*gaussmf(X,[sqrt(sig1) u1]);%計算類別一(正常細胞)的類條件概率...

⑧ 如何簡單易懂地理解貝葉斯非參數模型

首先說明一下,機器學習中參數估計方法最基本的就是極大似然估計。極大似然估計結果完全依賴於給定的樣本數據,它視待估參數為一個未知但固定的量,從而不考慮先驗知識的影響。因此如果樣本數據不能很好反映模型的情況,那麼得到的參數估計結果就會有較大偏差。

舉個簡單的例子,我們都知道拋一枚普通硬幣,出現正面反面的概率各為1/2。如果現在正面出現9次,反面出現1次,那麼用極大似然估計得到的概率就是P(正面)=9/10,P(反面)=1/10,顯然是有偏差的。為了減小這個偏差,於是我們就採用貝葉斯估計方法。

回憶一下貝葉斯公式,它是用來計算後驗概率的,也就是已知結果求其導致原因的概率。該公式的結果取決於兩方面:似然估計和先驗概率。正是如此,我們最終的估計結果才更加客觀合理地反映模型的參數。

一般地,假設先驗概率為P(θ),似然函數為L(θ|X)=P(X|θ),X為樣本集合,我們將貝葉斯公式簡單表示為P(θ|X)∝P(θ)L(θ|X),這便是θ的貝葉斯估計。

⑨ 貝葉斯網路,看完這篇我終於理解了(附代碼)!

概率圖模型是用圖來表示變數概率依賴關系的理論,結合概率論與圖論的知識,利用圖來表示與模型有關的變數的聯合概率分布。由圖靈獎獲得者Pearl開發出來。

如果用一個詞來形容概率圖模型(Probabilistic Graphical Model)的話,那就是「優雅」。對於一個實際問題,我們希望能夠挖掘隱含在數據中的知識。概率圖模型構建了這樣一幅圖,用觀測結點表示觀測到的數據,用隱含結點表示潛在的知識,用邊來描述知識與數據的相互關系, 最後基於這樣的關系圖獲得一個概率分布 ,非常「優雅」地解決了問題。

概率圖中的節點分為隱含節點和觀測節點,邊分為有向邊和無向邊。從概率論的角度,節點對應於隨機變數,邊對應於隨機變數的依賴或相關關系,其中 有向邊表示單向的依賴,無向邊表示相互依賴關系

概率圖模型分為 貝葉斯網路(Bayesian Network)和馬爾可夫網路(Markov Network) 兩大類。貝葉斯網路可以用一個有向圖結構表示,馬爾可夫網路可以表 示成一個無向圖的網路結構。更詳細地說,概率圖模型包括了樸素貝葉斯模型、最大熵模型、隱馬爾可夫模型、條件隨機場、主題模型等,在機器學習的諸多場景中都有著廣泛的應用。

長久以來,人們對一件事情發生或不發生的概率,只有固定的0和1,即要麼發生,要麼不發生,從來不會去考慮某件事情發生的概率有多大,不發生的概率又是多大。而且概率雖然未知,但最起碼是一個確定的值。比如如果問那時的人們一個問題:「有一個袋子,裡面裝著若干個白球和黑球,請問從袋子中取得白球的概率是多少?」他們會想都不用想,會立馬告訴你,取出白球的概率就是1/2,要麼取到白球,要麼取不到白球,即θ只能有一個值,而且不論你取了多少次,取得白球的 概率θ始終都是1/2 ,即不隨觀察結果X 的變化而變化。

這種 頻率派 的觀點長期統治著人們的觀念,直到後來一個名叫Thomas Bayes的人物出現。

托馬斯·貝葉斯Thomas Bayes(1702-1763)在世時,並不為當時的人們所熟知,很少發表論文或出版著作,與當時學術界的人溝通交流也很少,用現在的話來說,貝葉斯就是活生生一民間學術「屌絲」,可這個「屌絲」最終發表了一篇名為「An essay towards solving a problem in the doctrine of chances」,翻譯過來則是:機遇理論中一個問題的解。你可能覺得我要說:這篇論文的發表隨機產生轟動效應,從而奠定貝葉斯在學術史上的地位。

這篇論文可以用上面的例子來說明,「有一個袋子,裡面裝著若干個白球和黑球,請問從袋子中取得白球的概率θ是多少?」貝葉斯認為取得白球的概率是個不確定的值,因為其中含有機遇的成分。比如,一個朋友創業,你明明知道創業的結果就兩種,即要麼成功要麼失敗,但你依然會忍不住去估計他創業成功的幾率有多大?你如果對他為人比較了解,而且有方法、思路清晰、有毅力、且能團結周圍的人,你會不由自主的估計他創業成功的幾率可能在80%以上。這種不同於最開始的「非黑即白、非0即1」的思考方式,便是 貝葉斯式的思考方式。

先簡單總結下頻率派與貝葉斯派各自不同的思考方式:

貝葉斯派既然把看做是一個隨機變數,所以要計算的分布,便得事先知道的無條件分布,即在有樣本之前(或觀察到X之前),有著怎樣的分布呢?

比如往檯球桌上扔一個球,這個球落會落在何處呢?如果是不偏不倚的把球拋出去,那麼此球落在檯球桌上的任一位置都有著相同的機會,即球落在檯球桌上某一位置的概率服從均勻分布。這種在實驗之前定下的屬於基本前提性質的分布稱為 先驗分布,或著無條件分布

其中,先驗信息一般來源於經驗跟歷史資料。比如林丹跟某選手對決,解說一般會根據林丹歷次比賽的成績對此次比賽的勝負做個大致的判斷。再比如,某工廠每天都要對產品進行質檢,以評估產品的不合格率θ,經過一段時間後便會積累大量的歷史資料,這些歷史資料便是先驗知識,有了這些先驗知識,便在決定對一個產品是否需要每天質檢時便有了依據,如果以往的歷史資料顯示,某產品的不合格率只有0.01%,便可視為信得過產品或免檢產品,只每月抽檢一兩次,從而省去大量的人力物力。

後驗分布 π(θ|X)一般也認為是在給定樣本X的情況下的θ條件分布,而使π(θ|X)達到最大的值θMD稱為 最大後驗估計 ,類似於經典統計學中的 極大似然估計

綜合起來看,則好比是人類剛開始時對大自然只有少得可憐的先驗知識,但隨著不斷觀察、實驗獲得更多的樣本、結果,使得人們對自然界的規律摸得越來越透徹。所以,貝葉斯方法既符合人們日常生活的思考方式,也符合人們認識自然的規律,經過不斷的發展,最終占據統計學領域的半壁江山,與經典統計學分庭抗禮。

條件概率 (又稱後驗概率)就是事件A在另外一個事件B已經發生條件下的發生概率。條件概率表示為P(A|B),讀作「在B條件下A的概率」。

比如上圖,在同一個樣本空間Ω中的事件或者子集A與B,如果隨機從Ω中選出的一個元素屬於B,那麼這個隨機選擇的元素還屬於A的概率就定義為在B的前提下A的條件概率:

聯合概率:

邊緣概率(先驗概率):P(A)或者P(B)

貝葉斯網路(Bayesian network),又稱信念網路(Belief Network),或有向無環圖模型(directed acyclic graphical model),是一種概率圖模型,於1985年由Judea Pearl首先提出。它是一種模擬人類推理過程中因果關系的不確定性處理模型,其網路拓樸結構是一個有向無環圖(DAG)。

貝葉斯網路的有向無環圖中的節點表示隨機變數

它們可以是可觀察到的變數,或隱變數、未知參數等。認為有因果關系(或非條件獨立)的變數或命題則用箭頭來連接。若兩個節點間以一個單箭頭連接在一起,表示其中一個節點是「因(parents)」,另一個是「果(children)」,兩節點就會產生一個條件概率值。

例如,假設節點E直接影響到節點H,即E→H,則用從E指向H的箭頭建立結點E到結點H的有向弧(E,H),權值(即連接強度)用條件概率P(H|E)來表示,如下圖所示:

簡言之,把某個研究系統中涉及的隨機變數,根據是否條件獨立繪制在一個有向圖中,就形成了貝葉斯網路。其主要用來描述隨機變數之間的條件依賴,用圈表示隨機變數(random variables),用箭頭表示條件依賴(conditional dependencies)。

此外,對於任意的隨機變數,其聯合概率可由各自的局部條件概率分布相乘而得出:

1. head-to-head

依上圖,所以有:P(a,b,c) = P(a) P(b) P(c|a,b)成立,即在c未知的條件下,a、b被阻斷(blocked),是獨立的,稱之為head-to-head條件獨立。

2. tail-to-tail

考慮c未知,跟c已知這兩種情況:

3. head-to-tail

還是分c未知跟c已知這兩種情況:

wikipedia上是這樣定義因子圖的:將一個具有多變數的全局函數因子分解,得到幾個局部函數的乘積,以此為基礎得到的一個雙向圖叫做因子圖(Factor Graph)。

通俗來講,所謂因子圖就是對函數進行因子分解得到的 一種概率圖 。一般內含兩種節點:變數節點和函數節點。我們知道,一個全局函數通過因式分解能夠分解為多個局部函數的乘積,這些局部函數和對應的變數關系就體現在因子圖上。

舉個例子,現在有一個全局函數,其因式分解方程為:

其中fA,fB,fC,fD,fE為各函數,表示變數之間的關系,可以是條件概率也可以是其他關系。其對應的因子圖為:

在概率圖中,求某個變數的邊緣分布是常見的問題。這問題有很多求解方法,其中之一就是把貝葉斯網路或馬爾科夫隨機場轉換成因子圖,然後用sum-proct演算法求解。換言之,基於因子圖可以用 sum-proct 演算法 高效的求各個變數的邊緣分布。

詳細的sum-proct演算法過程,請查看博文: 從貝葉斯方法談到貝葉斯網路

樸素貝葉斯(Naive Bayesian)是經典的機器學習演算法之一,也是為數不多的基於概率論的分類演算法。樸素貝葉斯原理簡單,也很容易實現,多用於文本分類,比如垃圾郵件過濾。**樸素貝葉斯可以看做是貝葉斯網路的特殊情況:即該網路中無邊,各個節點都是獨立的。 **

樸素貝葉斯樸素在哪裡呢? —— 兩個假設

貝葉斯公式如下:

下面以一個例子來解釋樸素貝葉斯,給定數據如下:

現在給我們的問題是,如果一對男女朋友,男生想女生求婚,男生的四個特點分別是不帥,性格不好,身高矮,不上進,請你判斷一下女生是嫁還是不嫁?

這是一個典型的分類問題,轉為數學問題就是比較p(嫁|(不帥、性格不好、身高矮、不上進))與p(不嫁|(不帥、性格不好、身高矮、不上進))的概率,誰的概率大,我就能給出嫁或者不嫁的答案!這里我們聯繫到樸素貝葉斯公式:

我們需要求p(嫁|(不帥、性格不好、身高矮、不上進),這是我們不知道的,但是通過樸素貝葉斯公式可以轉化為好求的三個量,這三個變數都能通過統計的方法求得。

等等,為什麼這個成立呢?學過概率論的同學可能有感覺了,這個等式成立的條件需要特徵之間相互獨立吧!對的!這也就是為什麼樸素貝葉斯分類有樸素一詞的來源,樸素貝葉斯演算法是假設各個特徵之間相互獨立,那麼這個等式就成立了!

但是為什麼需要假設特徵之間相互獨立呢?

根據上面倆個原因,樸素貝葉斯法對條件概率分布做了條件獨立性的假設,由於這是一個較強的假設,樸素貝葉斯也由此得名!這一假設使得樸素貝葉斯法變得簡單,但有時會犧牲一定的分類准確率。

樸素貝葉斯優點

樸素貝葉斯缺點

理論上,樸素貝葉斯模型與其他分類方法相比具有最小的誤差率。但是實際上並非總是如此,這是因為樸素貝葉斯模型假設屬性之間相互獨立,這個假設在實際應用中往往是不成立的,在屬性個數比較多或者屬性之間相關性較大時,分類效果不好。

樸素貝葉斯模型(Naive Bayesian Model)的 樸素(Naive)的含義是"很簡單很天真" 地假設樣本特徵彼此獨立. 這個假設現實中基本上不存在, 但特徵相關性很小的實際情況還是很多的, 所以這個模型仍然能夠工作得很好。

新聞分類 GitHub: 點擊進入

【 機器學習通俗易懂系列文章 】

從貝葉斯方法談到貝葉斯網路

⑩ 如何用matlab計算貝葉斯公式

貝葉斯分類器的分類原理是通過某對象的先驗概率,利用貝葉斯公式計算出其後驗概率,即該對象屬於某一類的概率,選擇具有最大後驗概率的類作為該對象所屬的類。也就是說,貝葉斯分類器是最小錯誤率意義上的優化,它遵循「多數占優」這一基本原則。一、分類器的基本概念經過了一個階段的模式識別學習,對於模式和模式類的概念有一個基本的了解,並嘗試使用MATLAB實現一些模式類的生成。而接下來如何對這些模式進行分類成為了學習的第二個重點。這就需要用到分類器。 表述模式分類器的方式有很多種,其中用的最多的是一種判別函數的形式,如果對於所有的j≠i,有: 則此分類器將這個特徵向量x判為ωi類。因此,此分類器可視為計算c個判別函數並選取與最大判別值對應的類別的網路或機器。一種分類器的網路結構如下圖所示:二、貝葉斯分類器一個貝葉斯分類器可以簡單自然地表示成以上網路結構。貝葉斯分類器的分類原理是通過某對象的先驗概率,利用貝葉斯公式計算出其後驗概率,即該對象屬於某一類的概率,選擇具有最大後驗概率的類作為該對象所屬的類。在具有模式的完整統計知識條件下,按照貝葉斯決策理論進行設計的一種最優分類器。分類器是對每一個輸入模式賦予一個類別名稱的軟體或硬體裝置,而貝葉斯分類器是各種分類器中分類錯誤概率最小或者在預先給定代價的情況下平均風險最小的分類器。它的設計方法是一種最基本的統計分類方法。對於貝葉斯分類器,其判別函數的選擇並不是唯一的,我們可以將所有的判別函數乘上相同的正常數或者加上一個相同的常量而不影響其判決結果;在更一般的情況下,如果將每一個gi (x)替換成f(gi (x)),其中f(∙)是一個單調遞增函數,其分類的效果不變。特別在對於最小誤差率分類,選擇下列任何一種函數都可以得到相同的分類結果,但是其中一些比另一些計算更為簡便:一個典型的模式識別系統是由特徵提取和模式分類兩個階段組成的,而其中模式分類器(Classifier)的性能直接影響整個識別系統的性能。 因此有必要探討一下如何評價分類器的性能,這是一個長期探索的過程。分類器性能評價方法見:三、基本的Bayes分類器實現這里將在MATLAB中實現一個可以對兩類模式樣本進行分類的貝葉斯分類器,假設兩個模式類的分布均為高斯分布。模式類1的均值矢量m1 = (1, 3),協方差矩陣為S1 =(1.5, 0; 0, 1);模式類2的均值矢量m2 = (3, 1),協方差矩陣為S2 =(1, 0.5; 0.5, 2),兩類的先驗概率p1 = p2 = 1/2。詳細的操作包含以下四個部分:1.首先,編寫一個函數,其功能是為若干個模式類生成指定數目的隨機樣本,這里為兩個模式類各生成100個隨機樣本,並在一幅圖中畫出這些樣本的二維散點圖;2.由於每個隨機樣本均含有兩個特徵分量,這里先僅僅使用模式集合的其中一個特徵分量作為分類特徵,對第一步中的200個樣本進行分類,統計正確分類的百分比,並在二維圖上用不同的顏色畫出正確分類和錯分的樣本;(註:綠色點代表生成第一類的散點,紅色代表第二類;綠色圓圈代表被分到第一類的散點,紅色代表被分到第二類的散點! 因此,里外顏色不一樣的點即被錯分的樣本。)3.僅用模式的第二個特徵分量作為分類特徵,重復第二步的操作;4.同時用模式的兩個分量作為分類特徵,對200個樣本進行分類,統計正確分類百分比,並在二維圖上用不同的顏色畫出正確分類和錯分的樣本;正確率:可以看到,單單使用一個分類特徵進行分類時,錯誤率較高(多次試驗均無法得出較好的分類結果),而增加分類特徵的個數是提高正確率的有效手段,當然,這會給演算法帶來額外的時間代價。四、進一步的Bayes分類器假設分類數據均滿足高斯分布的情況下,設計一個判別分類器,實驗目的是為了初步了解和設計一個分類器。1.編寫一個高斯型的Bayes判別函數GuassianBayesModel( mu,sigma,p,X ),該函數輸入為:一給定正態分布的均值mu、協方差矩陣sigma,先驗概率p以及模式樣本矢量X,輸出判別函數的值,其代碼如下:2.以下表格給出了三類樣本各10個樣本點,假設每一類均為正態分布,三個類別的先驗概率相等均為P(w1)=P(w2 )=P(w3 )=1/3。計算每一類樣本的均值矢量和協方差矩陣,為這三個類別設計一個分類器。3.用第二步中設計的分類器對以下測試點進行分類:(1,2,1),(5,3,2),(0,0,0),並且利用以下公式求出各個測試點與各個類別均值之間的Mahalanobis距離。以下是來自網路的關於馬氏距離的解釋:馬氏距離計算公式:更具體的見: 4.如果P(w1)=0.8, P(w2 )=P(w3 )=0.1,再進行第二步和第三步實驗。實驗的結果如下:首先是得出三類樣本點各自的均值和協方差矩陣:在三個類別的先驗概率均為P(w1)=P(w2 )=P(w3 )=1/3時,使用函數進行分類並給出分類結果和各個測試點與各個類別均值之間的Mahalanobis距離。驗證當三個類別的先驗概率不相等時,同樣使用函數進行分類並給出分類結果和各個測試點與各個類別均值之間的Mahalanobis距離。可以看到,在Mahalanobis距離不變的情況下,不同的先驗概率對高斯型Bayes分類器的分類結果影響很大~ 事實上,最優判決將偏向於先驗概率較大的類別。完整的代碼如下由兩個函數和主要的執行流程組成:%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 產生模式類函數% N:生成散點個數 C:類別個數 d:散點的維數% mu:各類散點的均值矩陣% sigma:各類散點的協方差矩陣%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function result = MixGaussian(N, C, d, mu, sigma)color = {'r.', 'g.', 'm.', 'b.', 'k.', 'y.'}; % 用於存放不同類數據的顏色% if nargin <= 3 & N < 0 & C < 1 & d < 1% error('參數太少或參數錯誤');if d == 1for i = 1 : Cfor j = 1 : N/Cr(j,i) = sqrt(sigma(1,i)) * randn() + mu(1,i);endX = round(mu(1,i)-5);Y = round(mu(1,i) + sqrt(sigma(1,i))+5);b = hist(r(:,i), X:Y);subplot(1,C,i),bar(X:Y, b,'b');title('三類一維隨機點的分布直方圖');grid onendelseif d == 2for i = 1:Cr(:,:,i) = mvnrnd(mu(:,:,i),sigma(:,:,i),round(N/C));plot(r(:,1,i),r(:,2,i),char(color(i)));hold on;endelseif d == 3for i = 1:Cr(:,:,i) = mvnrnd(mu(:,:,i),sigma(:,:,i),round(N/C));plot3(r(:,1,i),r(:,2,i),r(:,3,i),char(color(i)));hold on;endelse disp('維數只能設置為1,2或3');endresult = r;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 高斯型Bayes判別函數% mu:輸入正態分布的均值% sigma:輸入正態分布的協方差矩陣% p:輸入各類的先驗概率% X:輸入樣本矢量% 輸出判別函數值、馬氏距離和判別結果%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function GuassianBayesModel( mu,sigma,p,X )% 構建判別函數% 計算點到每個類的Mahalanobis距離for i = 1:3;P(i) = mvnpdf(X, mu(:,:,i), sigma(:,:,i)) * p(i);r(i) = sqrt((X - mu(:,:,i)) * inv(sigma(:,:,i)) * (X - mu(:,:,i))');end% 判斷樣本屬於哪個類的概率最高% 並顯示點到每個類的Mahalanobis距離maxP = max(P);style = find(P == maxP);disp(['點[',num2str(X),']關於第一類的判別函數值為:',num2str(P(1))]);disp(['點[',num2str(X),']關於第二類的判別函數值為:',num2str(P(2))]);disp(['點[',num2str(X),']關於第三類的判別函數值為:',num2str(P(3))]);disp(['點[',num2str(X),']到第1類的Mahalanobis距離為:',num2str(r(1))]);disp(['點[',num2str(X),']到第2類的Mahalanobis距離為:',num2str(r(2))]);disp(['點[',num2str(X),']到第3類的Mahalanobis距離為:',num2str(r(3))]);disp(['點[',num2str(X),']屬於第',num2str(style),'類']);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%貝葉斯分類器實驗主函數%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 生成兩類各100個散點樣本mu(:,:,1) = [1 3]; sigma(:,:,1) = [1.5 0; 0 1];p1 = 1/2;mu(:,:,2) = [3 1]; sigma(:,:,2) = [1 0.5; 0.5 2];p2 = 1/2;% 生成200個二維散點,平分為兩類,每類100個aa = MixGaussian(200, 2, 2, mu, sigma);title('兩類共200個高斯分布的散點');% 只x分量作為分類特徵的分類情況figure;% 正確分類的散點個數right1 = 0;right2 = 0;% 正確率rightRate1 = 0;rightRate2 = 0;for i = 1:100x = aa(i,1,1);plot(aa(:,1,1),aa(:,2,1),'r.');% 計算後驗概率P1 = normpdf(x, 1, sqrt(1.5));P2 = normpdf(x, 3, sqrt(1));if P1 > P2plot(aa(i,1,1),aa(i,2,1),'ks');hold on;right1 = right1 + 1;% 統計正確個數elseif P1 < P2plot(aa(i,1,1),aa(i,2,1),'go');hold on;endendrightRate1 = right1 / 100; % 正確率for i = 1:100x = aa(i,1,2);plot(aa(:,1,2),aa(:,2,2),'g.');% 計算後驗概率P1 = normpdf(x, 1, sqrt(1.5));P2 = normpdf(x, 3, sqrt(1));if P1 > P2plot(aa(i,1,2),aa(i,2,2),'ks');hold on;elseif P1 < P2plot(aa(i,1,2),aa(i,2,2),'go');hold on;right2 = right2 + 1; % 統計正確個數endendrightRate2 = right2 / 100;title('使用第一個分類特徵的分類結果');disp(['只用第一個特徵時,第一類分類的准確率為:',num2str(rightRate1*100),'%']);disp(['只用第一個特徵時,第二類分類的准確率為:',num2str(rightRate2*100),'%']);% 只使用y分量的分類特徵的分類情況figure;% 正確分類的散點個數right1 = 0;right2 = 0;% 正確率rightRate1 = 0;rightRate2 = 0;for i = 1:100y = aa(i,2,1);plot(aa(:,1,1),aa(:,2,1),'r.');% 計算後驗概率P1 = normpdf(y, 3, sqrt(1));P2 = normpdf(y, 1, sqrt(2));if P1 > P2plot(aa(i,1,1),aa(i,2,1),'ks');hold on;right1 = right1 + 1; % 統計正確個數elseif P1 < P2plot(aa(i,1,1),aa(i,2,1),'go');hold on;endendrightRate1 = right1 / 100; % 正確率for i = 1:100y = aa(i,2,2);plot(aa(:,1,2),aa(:,2,2),'g.');% 計算後驗概率P1 = normpdf(y, 3, sqrt(1));P2 = normpdf(y, 1, sqrt(2));if P1 > P2plot(aa(i,1,2),aa(i,2,2),'ks');hold on;elseif P1 < P2plot(aa(i,1,2),aa(i,2,2),'go');hold on;right2 = right2 + 1; % 統計正確個數endendrightRate2 = right2 / 100; % 正確率title('使用第二個分類特徵的分類結果');disp(['只用第二個特徵時,第一類分類的准確率為:',num2str(rightRate1*100),'%']);disp(['只用第二個特徵時,第二類分類的准確率為:',num2str(rightRate2*100),'%']);% 同時使用兩個分類特徵的分類情況figure;% 正確分類的散點個數right1 = 0;right2 = 0;% 正確率rightRate1 = 0;rightRate2 = 0;for i = 1:100x = aa(i,1,1);y = aa(i,2,1);plot(aa(:,1,1),aa(:,2,1),'r.');% 計算後驗概率P1 = mvnpdf([x,y], mu(:,:,1), sigma(:,:,1));P2 = mvnpdf([x,y], mu(:,:,2), sigma(:,:,2));if P1 > P2plot(aa(i,1,1),aa(i,2,1),'ks');hold on;right1 = right1 + 1;else if P1 < P2plot(aa(i,1,1),aa(i,2,1),'go');hold on;endendendrightRate1 = right1 / 100;for i = 1:100x = aa(i,1,2);y = aa(i,2,2);plot(aa(:,1,2),aa(:,2,2),'g.');% 計算後驗概率P1 = mvnpdf([x,y], mu(:,:,1), sigma(:,:,1));P2 = mvnpdf([x,y], mu(:,:,2), sigma(:,:,2));if P1 > P2plot(aa(i,1,2),aa(i,2,2),'ks');hold on;else if P1 < P2plot(aa(i,1,2),aa(i,2,2),'go');hold on;right2 = right2 + 1;endendendrightRate2 = right2 / 100;title('使用兩個分類特徵的分類結果');disp(['同時使用兩個特徵時,第一類分類的准確率為:',num2str(rightRate1*100),'%']);disp(['同時使用兩個特徵時,第二類分類的准確率為:',num2str(rightRate2*100),'%']);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 進一步的Bayes分類器%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% w1,w2,w3三類散點w = zeros(10,3,3);w(:,:,1) = [-5.01 -8.12 -3.68;...-5.43 -3.48 -3.54;...1.08 -5.52 1.66;...0.86 -3.78 -4.11;...-2.67 0.63 7.39;...4.94 3.29 2.08;...-2.51 2.09 -2.59;...-2.25 -2.13 -6.94;...5.56 2.86 -2.26;...1.03 -3.33 4.33];w(:,:,2) = [-0.91 -0.18 -0.05;...1.30 -.206 -3.53;...-7.75 -4.54 -0.95;...-5.47 0.50 3.92;...6.14 5.72 -4.85;...3.60 1.26 4.36;...5.37 -4.63 -3.65;...7.18 1.46 -6.66;...-7.39 1.17 6.30;...-7.50 -6.32 -0.31];w(:,:,3) = [ 5.35 2.26 8.13;...5.12 3.22 -2.66;...-1.34 -5.31 -9.87;...4.48 3.42 5.19;...7.11 2.39 9.21;...7.17 4.33 -0.98;...5.75 3.97 6.65;...0.77 0.27 2.41;...0.90 -0.43 -8.71;...3.52 -0.36 6.43];% 均值mu1(:,:,1) = sum(w(:,:,1)) ./ 10;mu1(:,:,2) = sum(w(:,:,2)) ./ 10;mu1(:,:,3) = sum(w(:,:,3)) ./ 10;% 協方差矩陣sigma1(:,:,1) = cov(w(:,:,1));sigma1(:,:,2) = cov(w(:,:,2));sigma1(:,:,3) = cov(w(:,:,3));% 各類別的先驗概率% p(1) = 1/3;% p(2) = 1/3;% p(3) = 1/3;p(1) = 0.8;p(2) = 0.1;p(3) = 0.1;% 樣本矢量X = [1 0 0];% 調用高斯型Bayes判別函數,輸出判別函數值、馬氏距離和判別結果GuassianBayesModel(mu1,sigma1,p,X);
閱讀全文

與非參數貝葉斯代碼相關的資料

熱點內容
word如何繪制餅狀圖 瀏覽:172
w7系統搜索文件夾 瀏覽:618
java線程變數 瀏覽:854
蘋果電腦word是只讀文件 瀏覽:691
ps5國行備份文件大小 瀏覽:754
linux恢復刪除文件命令 瀏覽:805
win10家庭版打不開qq文件 瀏覽:794
女生來例假有哪個app比較好 瀏覽:66
調用後台介面為什麼不顯示數據 瀏覽:363
js判斷重復 瀏覽:422
聯通如何切換到網路電視 瀏覽:191
學編程的優勢哪裡靠譜 瀏覽:939
溝通文件 瀏覽:267
水準測量平差程序 瀏覽:78
cf如何解決網路誤封 瀏覽:952
折疊式文件夾是什麼意思 瀏覽:796
js彈窗登錄注冊 瀏覽:563
怎麼把游戲數據備份到另一個手機 瀏覽:361
微信封殺搶紅包神器破解教程 瀏覽:536
帶貨數據什麼時候更新 瀏覽:500

友情鏈接