樸素貝葉斯分類演算法(matlab實現)

2021-10-03 02:49:17 字數 2226 閱讀 8222

對於兩個事件a,b而言,事件發生的概率記為p(a)、p(b)。

事件a發生的前提下,事件b發生的概率為:

事件b發生的前提下,事件a發生的概率為:

由此可得事件ab同時發生的概率為:

從而推導出貝葉斯公式:

在已知的乙個資料集中,決策變數為x1, x2, x3......,目標量是y,就能夠引用上述公式:

在y取不同值時,分母都是固定的常量,因此由馬爾科夫假設可以進一步近似推導:

假設給定乙個資料集,那麼以這個資料集為基礎,對於乙個新的決策向量,能夠通過上述公式得到乙個最大概率的值。將做大概率事件作為目標值輸出,就是對此決策向量的分類。

以下列資料為例子:(1:是,0:否)

x1:聲音好聽

x2:長得好看

x3:懂得為人

x4:成績優異

y:是否有物件10

0000

1101

0011

1101

0101

1011

1110

0001

0那麼現在得知乙個人(x1=1,x2=0,x3=0,x4=1),他是否有(將有)物件?

p(xi|y=1) = [1/4, 2/4, 0, 1/4] ;  p(xi|0)=[2/3, 2/3, 2/3, 2/3]

p(y=1) = 4/7 ; p(y=0)=3/7

說明這個人很可能不會有物件,由於資料量的緣故,例子沒有太大的說服性,但假如資料量足夠,那麼最後就能反映乙個具有很高說服性的目標值。

clc;clear all;

input = load("bayesdata.txt")

[l,w]=size(input);

count = zeros(2,w);

%統計各個量的個數,count(1,i):為y=1,第i個決策量為1的個數

for i=1:1:l

for j=1:1:w

if input(i,j)==1 && input(i,end)==1

count(1,j)=count(1,j)+1;

elseif input(i,j)==1 && input(i,end)==0

count(2,j)=count(2,j)+1;

endend

endcount(2,end)=l-count(1,end);

test_data = [1 0 0 1];

answer = [0,0];

%case 1:

temp = 1;

for i=1:1:w-1

if test_data(i)==1

temp=temp*count(1,i)/count(1,end);

else

temp=temp*(1-count(1,i)/count(1,end));

endendanswer(1)=count(1,end)/l*temp;

%case 0:

temp = 1;

for i=1:1:w-1

if test_data(i)==1

temp=temp*count(2,i)/count(2,end);

else

temp=temp*(1-count(2,i)/count(2,end));

endendanswer(2)=count(2,end)/l*temp;

answer

if answer(1)>answer(2)

disp("可能會有物件")

else

disp("可能沒有物件")

end

實驗結果:

從一定角度上看,乙個人聲音好聽又成績好,但是長得不好看還情商低,還是比較難找物件的。(聲音好聽不露臉,一律參考喬碧蘿殿下!)

樸素貝葉斯分類MATLAB實現

b xlsread mix.xlsx 1,a1 c1628 x b 1 y b 2 c b 3 data x,y num 500 樣本數量 test sortrows x 1 num,1 y 1 num,1 c 1 num,1 3 為方便處理按類對樣本排序 temp zeros 23,5 用來儲存樣...

樸素貝葉斯分類

1 貝葉斯分類是一類分類演算法的總稱,這類演算法均以貝葉斯定理為基礎,故統稱為貝葉斯分類。2 樸素貝葉斯的思想基礎是這樣的 對於給出的待分類項,求解在此項出現的條件下各個類別出現的概率,哪個最大,就認為此待分類項屬於哪個類別。通俗來說,就好比這麼個道理,你在街上看到乙個黑人,我問你你猜這哥們 來的,...

樸素貝葉斯分類

摘自寫在公司內部的wiki 要解決的問題 表中增加欄位classification,有四個取值 0 初始值,未分類 1 positive 2 normal 99 negative review submit前,由樸素貝葉斯分類器決定該條review的flag屬於negative還是positive ...