對於兩個事件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 ...