貝葉斯分類器的MATLAB實現

2021-07-25 13:16:24 字數 1615 閱讀 5755

貝葉斯分類器是一種簡單的模式分類器,它是以特徵值的統計概率為基礎的,簡單的講,例如已知兩個類w1和w2,乙個未知樣本x,這裡說的未知,就是不知道它屬於w1類還是屬於w2類,然後根據統計方法分別計算得到x屬於w1類的概率,即p(w1|x)和屬於w2類的概率,即p(w2|x),如果p(w1|x)> p(w2|x),則x屬於w1,反之則屬於w2。

其matlab**如下:

clear;

%clc;

n=100;

m1=0;

m2=0;

num1=0;%用於計數

num2=0;%用於計數

num3=0;%用於計數

num4=0;%用於計數

mu1=[1 3];

sigma1=[1.5 0;0 1];

r1=mvnrnd(mu1,sigma1,n);%生成模式類1

mu2=[3 1];

sigma2=[1 0.5;0.5 2];

r2=mvnrnd(mu2,sigma2,n);%生成模式類2

subplot(1,2,1);

plot(r1(:,1),r1(:,2),'ro',r2(:,1),r2(:,2),'b*');

title('圖1:兩個模式類各生成個100正態分佈的隨機數二維散點圖');

p1=normpdf(r1(:,1),mu1(:,1),sqrt(1.5));

p2=normpdf(r1(:,1),mu2(:,1),1);

p3=normpdf(r2(:,1),mu1(:,1),sqrt(1.5));

p4=normpdf(r2(:,1),mu2(:,1),1);

for i=1:1:100

if (p1(i)*0.5)>=(p2(i)*0.5)%進行模式判別

num1=num1+1;

m1=m1+1;

a1(m1,:)=r1(i,:);%分到模式類1

else

num2=num2+1;

m2=m2+1

a2(m2,:)=r1(i,:);%分到模式類2

endif (p3(i)*0.5)<=(p2(i)*0.5)

num3=num3+1;

m1=m1+1;

a1(m1,:)=r2(i,:);%分到模式類1

else

num4=num4+1;

m2=m2+1;

a2(m2,:)=r2(i,:);%分到模式類2

endendsubplot(1,2,2);

plot(a1(:,1),a1(:,2),'ro',a2(:,1),a2(:,2),'b*');

title('圖2:以第一特徵分量對200個樣本分類');

執行結果如下圖所示:

從執行結果可看出,模式類1的一些樣本點被錯誤分到模式類2,模式類2的一些樣本點被錯誤分到模式類1,也就是說,貝葉斯分類器的分類正確率不高。

下圖為更全面的實驗結果截圖

matlab 實現貝葉斯分類器

網上有很多文章介紹貝葉斯原理,這裡推薦個鏈結。這裡再說貝葉斯分類器的設計步驟 1.對每個簇的資料求均值mu 和協方差矩陣sigma 2.對測試資料,將其對每個簇用均值和協方差矩陣求相關性。3.將資料分類到相關性大的簇中。分類器函式 bayesclassifer.m function labels b...

貝葉斯分類器(含MATLAB實現)

由於被測試的模式特徵向量通常存在隨機性,所獲得的模式樣本有一定的統計分布。因此,採用統計決策的理論方法進行模式分類是常用的模式識別方法。這也是遙感影象土地分類的常用方法。統計決策函式以貝葉斯定理為基礎,一般需要滿足兩個基本條件 1 已知模式向量的有關概率分布先驗知識,如先驗概率 類條件概率密度。2 ...

Python實現貝葉斯分類器

使用樸素貝葉斯分類器,對一片文章進行分類處理 對中文進行分詞處理 jieba分詞 對分開的詞語進行處理,去除重複詞彙,去除標點和單個虛擬詞彙如 你,我,他。選擇特徵詞,很重要,要總結出符合某一型別的關鍵特徵詞對分類器進行訓練,即傳入一些已經分好類的文章,讓分類器可以知道其中的一些特徵詞。計算出特徵詞...