如何将高斯函数与朴素贝叶斯分类器一起使用?

数据挖掘 Python 分类 可能性 朴素贝叶斯分类器 高斯
2022-03-01 15:42:40

我想要一些数学方面的帮助,并检查我是否正确理解了算法。因此,我一直在学习视频,并尝试了自己的示例。最后,我得到了不可靠的结果;我认为它们是“狡猾的”,因为我的输出不在 0 和 1 之间。如果我使用更高的输出,那么是的,它已经正确分类了我的新数据,但我只是不确定,因为数字完全不同。我尝试用计算器而不是 python 手工计算,但我仍然得到一个奇怪的结果,所以这让我觉得我的方法是错误的。这就是我所做的,请看看并告诉我你的想法:

# data 

x = [[65,50],

[62,49],

[130,78],

[124,79],

[54,47],            # the heights/weights of a child

[169,76],              (0), or an adult (1)

[59,58],

[169,79],

[52,52]]



y = [0,0,1,1,0,1,0,1,0]



new = [58, 54]

好的,这就是我认为我应该做的:

  1. 计算出先验概率(在这种情况下是 5/9 的儿童,4/9 的成人)

  2. 计算出每个特征和每个类别的均值和方差:

x̄(C,H) = 58.4 x̄(C,W) = 51.2

x̄(A,H) = 148 x̄(A,W) = 78

σ²(C,H) = 23.44 σ²(C,W) = 14.16

σ²(A,H) = 445.5 σ²(A,W) = 1.5

  1. 计算高斯函数 f(x,x̄, σ²):

    f(58, 58.4, 23.44) = 0.08212001659(儿童身高)

    f(54, 51.2, 14.16) = 0.08038037412(儿童体重)

    f(58, 148, 445.5) = 2.129877168 x10(-6)(成人身高)

    f(54, 78, 1.5) = 1.343766812 x10(-84) (成人体重)

  2. 将成人和儿童类的高斯相乘:

0.08212001659 x 0.08038037412 = 6.600837656 x10(-3) (子高斯) 2.129877168 x10(-6) x 1.343766812 x10(-84) = 2.862058252 x10(-90) (高斯)

  1. 使用贝叶斯定理计算概率:

(子高斯 x 子概率)/(子高斯 x 子概率 x 成人高斯 x 成人概率) (成人高斯 x 成人概率)/(子高斯 x 子概率 x 成人高斯 x 成人概率)

(6.600837656 x10(-3) x 5/9)/(6.600837656 x10(-3) x 5/9 x 2.862058252 x10(-90) x 4/9) = 9.841633571 x10(89) (2.862058252 x10(-90) x 4/9)/(6.600837656 x10(-3) x 5/9 x 2.862058252 x10(-90) x 4/9) = 341.3788376

...所以这些是最终的概率。如果我选择更高的那个,那么算法会正确地将数据归类为子数据,但概率不在 0 和 1 之间,这让我认为这种方法可能不适用于其他数据。我还通过 Scikit learn 运行数据,它将新数据也归类为孩子。请让我知道您的想法,如果我对某些事情不清楚,请在评论中告诉我。

1个回答

你把贝叶斯定理弄错了。分母中应该有一个加号:

(儿童高斯 x 儿童概率)/(儿童高斯 x 儿童概率 + 成人高斯 x 成人概率)

(成人高斯 x 成人概率)/(儿童高斯 x 儿童概率 + 成人高斯 x 成人概率)