我有一个具有四个连续特征的两类Bayes分类问题。我正在尝试部分复制Orange用于计算概率的bayes算法。但我没有成功地获得与Orange输出相同的值。
数据集大小: 150 (class0 : 88和class1 : 62)
我使用以下算法
p(class0 | X1, X2, X3, X4) = L0 / (L0 + L1)
p(class1 | X1, X2, X3, X4) = L1 / (L0 + L1)其中L0和L1是可能的
L0 = prior_class0 * product( p(Xi|class0) )
L1 = prior_class1 * product( p(Xi|class1) )
prior_class0 and prior_class1 are Laplacian estimators
prior_class0 = (88 + 1) / (150 + 2)
prior_class1 = (62 + 1) / (150 + 2)橙色使用黄土来计算条件概率(我想没有必要复制它)。对于这个数据集,它为这两个类输出49点,如python classifier.conditional_distributions中所示。通过对Xi环境点之间的线性插值,可以计算出p(Xi_X_Class1 0)和p(Xi_X_1)。
( 1)对于具有连续特征的Orange Bayes算法,有谁能给出评论?
( 2)或任何技术建议,如何设置编译器/IDE,以便调试Orange C++代码,并检查橙色/源代码/橙色/Bayes.cpp中函数的一些中间结果?
发布于 2015-06-18 16:16:16
橙色使用了一个稍微不同的公式,根据科诺年科的说法,它给出了同样的结果,但允许更好的解释性和概率的m-估计。它计算的不是乘积(p(Xi\class0)),而是计算乘积(p(class0\Xi)/ p(class0))。我不认为这会影响你的计算,但你可以检查。计算这些概率的代码位于https://github.com/biolab/orange/blob/master/source/orange/bayes.cpp#L169。注意,它并行地执行所有类的操作。
你感兴趣的另一个代码是从黄土密度估计中计算概率。在https://github.com/biolab/orange/blob/master/source/orange/estimateprob.cpp#L307。注意,大多数操作都是关于向量的,例如,*result *= (x-x1)/(x2-x1);中的所有变量实际上都是向量。
至于调试,我用Visual编写了这段代码(很多年前,我不好意思承认--看到了我使用的糟糕的编码风格)。我忘记了版本,不能检查它,因为我不再使用Windows。但我从来没有真正在任何其他操作系统上调试过橙色。
如果加载项目并构建调试版本,则还必须构建Python的调试版本。这实际上很简单(请参阅Python源代码中的说明),问题是您还必须构建您所使用的任何其他二进制库(例如numpy)的调试版本。一种更简单的方法是构建Orange的发布版本,但打开调试信息标志。这样,您就可以使用标准Python和库。
https://stackoverflow.com/questions/30895576
复制相似问题