2012-12-26 109 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信息标准消除不太相关的数据是有趣的。除了减轻以后的计算负担,我不确定我看到了优势。当您继续并适应朴素贝叶斯时,可以稍后提取哪些元素在决定标签时更重要。