问题描述
我正在尝试通过自己编写算法来学习朴素贝叶斯高斯机器学习算法。
我在实现中注意到,所有标签的最终预测概率总和不是1.0。实际上,我所有的预测概率都非常小,例如0.00000000000184大小。但是,从中选择最大尺寸可以为我提供高度准确的预测。
所以我试图让它们加1,我认为失败是因为我只使用了先验和似然计算。我忽略了分母中的标准化器。
这是我的数据集中的一个例子。列0-4是我的属性,列4是我的标签。
因此,我正在尝试包括normalizer。但是我不知道怎么做。我的标签列是分类的,因此我知道如何计算任何分类值具有的P(y)先验概率。
但是我的属性是真实值,那么如何计算任何此类真实属性的P(X)先验概率?这是我尝试实现的公式。我无法理解分母的计算。
解决方法
如果您设法为每个类y
计算分子:P(x|y)P(y)
。
那么分母P(X)
就是所有类别y上这些总和:P(X)=sum_y ( P(x|y)P(y) )
请注意,NB算法是关于选择P(x|y)P(y)
最高的y类。将这些结果除以P(X)不会改变结论,因此计算它可能不值得。
现在听起来您在计算P(x|y)
时遇到问题。
这就是概率建模的地方。
一种可能性是,对于每个类别y,观察到的x都是独立的(即“天真”的意思)和高斯。
所以概率P(x/y) = product_i(f(x_i,m_y,s_y))
连续x_i
的{{1}}的4个观测值中的每个观测值,高斯密度,以及x
和m_y
的均值和标准差y。