2012-12-26 82 views
-1

我給出了由行組成的2個類(「class1.dat」和「class2.dat」),每行是20個特徵(20個值)的向量。模式識別最大似然樸素貝葉斯分類器

我花費10年時間,按漁民比例排列並保留最佳5個結果,然後用最大似然估計每個正態分佈的值(假設它們是正態分佈的)並用樸素貝葉斯分類器計算誤差。

這是我的代碼:

% i take 10 random characteristics 

    C1= class_1(:,1:10) 
    C2= class_2(:,1:10)     
% FDR matrix initialize 

    FDR=zeros(1,10);     
%Calculate fisher ratio 
%[t]=Fisher(x,y) where t:fisher ratio,x:data vector of first class,y: ...of second class 

    for i=1:10 
    FDR(i)=Fisher(C1(i,:),C2(i,:));     
    end 
%i find that the highest fisher ratio are 1,3,4,5,7 so i save them in a new matrix X 

    X1=[C1(:,1),C1(:,3),C1(:,4),C1(:,5),C1(:,7)]; 
    X2=[C2(:,1),C2(:,3),C2(:,4),C2(:,5),C2(:,7)]; 
    X=[X1;X2]; 
%Calculate the Gaussian ml estimate 
%[m,S]=Gaussian_ML_estimate(X) where X:LxN matrix m:L dimensional estimate of mean and %S:LxL dimensional estimate of convariance 

    [C1mean_mle, C1cov_mle]=Gaussian_ML_estimate(C1');     
    [C2mean_mle, C2cov_mle]=Gaussian_ML_estimate(C2');    
%I put together the estimates to use them in the last function, the naive bayes 

    Cmean_mle(:,1)=C1mean_mle; 
    Cmean_mle(:,2)=C2mean_mle; 
    Ccov_mle(:,:,1)=C1cov_mle; 
    Ccov_mle(:,:,2)=C2cov_mle; 

我煩惱爲我做什麼未來。我有一個函數:

[z] = bayes_classifier(m,S,P,X) 

輸入參數: 米:LXC矩陣,其第j列是第j個類的平均值。其中S(:,:,j)對應於第j類的正態分佈的協方差矩陣。
P:c維矢量,其第j個分量是第j個類的先驗概率 。
X:1xN矩陣,其列是要分類爲 的數據向量。

輸出參數:
Z:N維向量,其第i個元素是其中的第i個數據向量被分類的類的標籤 。

和此功能:

[clas_error] = compute_error(y,t_est) 

計算基於數據集的分類器的錯誤。 y:包含數據集的N 向量的類標籤的N維矢量。
t_est:包含 類別的標籤的N維向量,其中X的向量中的每一個已經根據 分配給分類規則。
OUTPUT
clas_error:分類錯誤。

我知道這是一個長的帖子十分感謝那些讀誰讀:)

+0

嗨,歡迎來到StackOverflow!不幸的是,就像你說的那樣,這篇長文章包含了太多的信息。請減少問題,只保留相關部分,因爲坦率地說......我從來沒有發現過問題,我迷路了。 –

回答

0

我熟悉樸素貝葉斯,並從你寫什麼,我會感到我可能回答你的問題。我只是不完全確定它是什麼。你能詳細說明一下嗎?

我會注意到的一件事是我認爲有點不同尋常的是你談論協方差。樸素貝葉斯的整個假設是特徵在給定類別時是有條件獨立的。如果你使用協方差,那麼每個狀態確實有從n維高斯(與n,獨立,1維高斯)相反的數據。那時,它不是真正的樸素貝葉斯,而是高斯混合模型。也是一個非常好的模型。這只是一種更具表現力的方式,因此當您擁有更多的數據量時(它很容易過度配置更小的數據集)更加合適。

此外,使用Fischer信息標準消除不太相關的數據是有趣的。除了減輕以後的計算負擔,我不確定我看到了優勢。當您繼續並適應樸素貝葉斯時,可以稍後提取哪些元素在決定標籤時更重要。