貝葉斯分類器


實驗名稱:貝葉斯分類器

 

一、實驗目的和要求

目的

掌握利用貝葉斯公式進行設計分類器的方法。

 

要求

分別做出協方差相同和不同兩種情況下的判別分類邊界。

 

二、實驗環境、內容和方法

環境:windows 7,matlab R2010a

內容:根據貝葉斯公式,給出在類條件概率密度為正態分布時具體的判別函數表達式,用此判別函數設計分類器。數據隨機生成,比如生成兩類樣本,每個樣本有兩個特征,每類有若干個(比如20個)樣本點,假設每類樣本點服從二維正態分布,隨機生成具體數據,然后估計每類的均值與協方差,在兩類協方差相同的情況下求出分類邊界。先驗概率自己給定,比如都為0.5。如果可能,畫出在兩類協方差不相同的情況下的分類邊界。畫出圖形。

 

三、實驗基本原理

條件概率:

表示事件B已經發生的前提下,事件A發生的概率,叫做事件B發生下事件A的條件概率。其基本求解公式為:

貝葉斯定理之所以有用,是因為我們在生活中經常遇到這種情況:我們可以很容易直接得出P(A|B)P(B|A)則很難直接得出,但我們更關心P(B|A),貝葉斯定理就為我們打通從P(A|B)獲得P(B|A)的道路。

下面不加證明地直接給出貝葉斯定理:

朴素貝葉斯分類是一種十分簡單的分類算法,叫它朴素貝葉斯分類是因為這種方法的思想真的很朴素,朴素貝葉斯的思想基礎是這樣的:對於給出的待分類項,求解在此項出現的條件下各個類別出現的概率,哪個最大,就認為此待分類項屬於哪個類別。朴素貝葉斯分類的正式定義如下:

1、設為一個待分類項,而每個ax的一個特征屬性。

2、有類別集合

3、計算

4、如果,則

那么現在的關鍵就是如何計算第3步中的各個條件概率。我們可以這么做:

1、找到一個已知分類的待分類項集合,這個集合叫做訓練樣本集。

2、統計得到在各類別下各個特征屬性的條件概率估計。即

3、如果各個特征屬性是條件獨立的,則根據貝葉斯定理有如下推導:

因為分母對於所有類別為常數,因為我們只要將分子最大化皆可。又因為各特征屬性是條件獨立的,所以有:

根據上述分析,朴素貝葉斯分類的流程可以由下圖表示(暫時不考慮驗證):

對於具有多個特征參數的樣本,其正態分布的概率密度函數可定義為

式中,維行向量,維行向量,維協方差矩陣,的逆矩陣,的行列式。

由其判決規則,如果使對一切成立,則將歸為類。

我們根據假設:類別,i=1,2,……,N的類條件概率密度函數,i=1,2,……,N服從正態分布,即有~,那么上式就可以寫為

對上式右端取對數,可得

上式中的第二項與樣本所屬類別無關,將其從判別函數中消去,不會改變分類結果。則判別函數可簡化為以下形式

 

四、實驗過程描述

 

1.產生第一類數據:

x1是第一類數據,x2 是第二類數據,每一列代表一個樣本(兩個特征)

x1(1,:) = normrnd(14,4,1,20); x1(2,:) = normrnd(20,4,1,20);

x2(1,:) = normrnd(16,4,1,20); x2(2,:) = normrnd(10,4,1,20);

2.均值的估計為

協方差的估計為

兩類協方差相同的情況下的分類邊界為:

兩類協方差不相同的情況下的判別函數為:

 

五、實驗結果

 

協方差相同的情況下,判別分類邊界其實就是線性分類器產生的邊界。在協方差不同的情況下的二次線性分類邊界有時會出現奇怪的形狀。

 

六、附錄代碼

%main.m

 

clear;clc;

randseed;

x1(1,:) = normrnd(12,4,1,20);%生成高斯分布的隨機序列

x1(2,:) = normrnd(20,4,1,20);%均值,標准差,m×n隨機向量

 

plot(x1(1,:),x1(2,:),'ro',...

'LineWidth',1,...

'MarkerEdgeColor','k',...

'MarkerFaceColor',[1 0 0],...

'MarkerSize',7)

x2(1,:) = normrnd(18,4,1,20);

x2(2,:) = normrnd(10,4,1,20);

pw1=0.5;

pw2=0.5;

hold on; %新畫圖像之后不覆蓋原圖

plot(x2(1,:),x2(2,:),'bo',...

'LineWidth',1,...

'MarkerEdgeColor','k',...

'MarkerFaceColor',[0 0 0.5],...

'MarkerSize',7)

u1 = sum(x1,2)/20;

u2 = sum(x2,2)/20;

x1count = size(x1,2);

x1t = x1-kron(u1,ones(1,x1count));

S1t = x1t * x1t' / x1count;

 

x2count = size(x2,2);

x2t = x2-kron(u2,ones(1,x2count));

S2t = x2t * x2t' / x2count;

 

St = (S1t+S2t)/2;

w = St^(-1) * (u1-u2);

% Y= inv(X) returns the inverse of the square matrix X矩陣求逆

x0 = (u1+u2)/2 - log(pw1/pw2)/((u1-u2)'*inv(St)*(u1-u2)) *(u1-u2);

k=-w(1)/w(2);

b = x0(2)-k*x0(1);

x=[5,23];

plot(x,k*x+b,'g-.','LineWidth',3);

S1tinv = inv(S1t);

S2tinv = inv(S2t);

W1=-1/2 * S1tinv;

W2=-1/2 * S2tinv;

w1=S1tinv*u1;

w2=S2tinv*u2;

%d = det(X) returns the determinant of the square matrix X.矩陣行列式

w10=-1/2 * u1'*S1tinv*u1 - 1/2 *log(det(S1t)) + log(pw1);

w20=-1/2 * u2'*S2tinv*u2 - 1/2 *log(det(S2t)) + log(pw2);

t2=[]

for t1=1:23

%Solve system of nonlinear equations求解非線性方程組

tt2 = fsolve('bayesian_fun',5,[],t1,W1,W2,w1,w2,w10,w20);

t2=[t2,tt2];

end

plot(1:23,t2,'b','LineWidth',3);

 

 

% f=bayesian_fun.m

function f=bayesian_fun(t2,t1,W1,W2,w1,w2,w10,w20)

x=[t1,t2]';

f=x'*W1*x+w1'*x+w10 - (x'*W2*x+w2'*x+w20);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM