在MATLAB中实现朴素贝叶斯算法 - 需要一些指导

时间:2011-11-26 21:52:36

标签: matlab machine-learning classification gaussian

我有一个二进制分类问题,我需要在MATLAB中做。有两个类,训练数据和测试数据问题来自两个类,它们是从高斯分布中得出的二维坐标。

样本是2D点,它们是这样的(A类1000个样本,B类1000个样本): 我只是在这里张贴其中一些:

5.867766 3.843014 5.019520 2.874257 1.787476 4.483156 4.494783 3.551501 1.212243 5.949315 2.216728 4.126151 2.864502 3.139245 1.532942 6.669650 6.569531 5.032038 2.552391 5.753817 2.610070 4.251235 1.943493 4.326230 1.617939 4.948345

如果有新的测试数据,我该如何对测试样本进行分类?

P(Class / TestPoint)与P(TestPoint / Class)*(ProbabilityOfClass)成比例。

我不确定如何为给定的2D坐标计算P(样本/类)变量。现在,我正在使用公式

P(坐标/类)=(该类的坐标 - 平均值)/该类中各点的标准差。)

然而,我没有得到非常好的测试结果。我做错了吗?

2 个答案:

答案 0 :(得分:3)

这是一个好方法,但公式不正确,请查看multivariate gaussian distribution article on wikipedia

P(测试点|类)= enter image description here

其中enter image description here是A的决定因素。

 Sigma = classPoint*classPoint';
 mu = mean(classPoint,2);
 proba = 1/((2*pi)^(2/2)*det(Sigma)^(1/2))*...
         exp(-1/2*(testPoint-mu)*inv(Sigma)*(testPoint-mu)');

在你的情况下,因为它们在两个类中都有多个点,P(class)= 1/2

答案 1 :(得分:0)

假设您的公式已正确应用,另一个问题可能是从您的数据点推导出要素。您的问题可能不适合线性分类器。