我得到了 2 个由行组成的类(“class1.dat”和“class2.dat”),每行是一个包含 20 个特征(20 个值)的向量。
我取 10,将它们与 Fisher 比率排列并保留最好的 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)
输入参数: m:lxc 矩阵,其第 j 列是第 j 类的平均值。
S:lxlxc矩阵,其中S(:,:,j)对应第j类正态分布的协方差矩阵。
P:c维向量,其第j个分量是第j个类的先验概率。
X:lxN矩阵,其列是待分类的数据向量。
输出参数:
z:N 维向量,其第 i 个元素是第 i 个数据向量被分类的类的标签。
这个功能:
[clas_error] = compute_error(y,t_est)
根据数据集计算分类器的误差。
输入参数:
y:N 维向量,包含数据集的 N 个向量的类标签。
t_est:N 维向量,包含根据分类规则为 X 的每个向量分配的类的标签。
OUTPUT
clas_error:分类错误。
我知道这是一篇很长的文章,所以感谢阅读那些阅读的人:)