混合朴素贝叶斯:如何训练朴素贝叶斯分类器的数值和类别变量(sklearn)

时间:2016-08-26 19:05:43

标签: python statistics scikit-learn naivebayes

基本上,skelarn有一个朴素的贝叶斯和高斯核心,可以对数字变量进行分类。

但是,如何处理包含数值变量和类别变量的数据集。

举个例子,给出一个数据集,如何使用sklearn训练混合数据类型而不需要离散数字变量?

指数性别年龄Product_Reviews

一位女性20岁

B男21糟糕

C女25不好

我的意思是,对于贝叶斯分类,P(A | B)= P(B | A)* P(A)/ P(B)。

对于类别变量,P(B | A)很容易计数, 但对于数值变量,它应遵循高斯分布。 并假设我们得到了具有高斯分布的P(B | A)。

是否有任何包可以直接与这些一起使用?

请注意:此问题与How can I use sklearn.naive_bayes with (multiple) categorical features?不重复 和Mixing categorial and continuous data in Naive Bayes classifier using scikit-learn

因为这个问题不是想用假变量做一个朴素的贝叶斯(第一个问题)而且也不想做模型合奏(第二个问题解决方案2)。

数学algothrim在这里https://tom.host.cs.st-andrews.ac.uk/ID5059/L15-HsuPaper.pdf,它用高斯分布计算条件概率,而不是用数字变量计算数字。并使用所有条件概率进行分类,包括类别变量(通过计数)和数值变量(高斯分布)

1 个答案:

答案 0 :(得分:2)

答案直接来自Naive Bayes的数学

  1. 分类变量为您提供log P(a | cat)~SUM_i log P(cat_i | a)+ log P(a)(我省略了P(cat)的除法,因为NB实现返回的是也忽略了它)

  2. 连续变量给你相同的东西,log P(a | con)~SUM_i log P(con_i | a)+ log P(a)(我省略除以P(cat),作为什么NB实现返回也忽略了它)

  3. 因为Naive Bayes功能是独立的,所以x包含分类和连续

    P(a | x)~SUM_i log(x_i | a)+ log P(a)= SUM_i log P(cat_i | a)+ log P(a)+ SUM_i log P(con_i | a)+ log P (a) - log P(a)=来自分类模型的对数似然+来自连续模型的对数似然 - 记录a类之前

    您可以从两个模型中读出所有这些元素,这些元素独立地适用于数据的每个部分。请注意,这个不是一个整体,你只需要适合两个模型并在你自己的上构建一个由于朴素贝叶斯的特定假设,因此你正在以这种方式克服实现限制,但仍然在混合分布上有效地构建有效的NB模型。请注意,这适用于任何一组混合分布,因此您可以使用更多不同的NB(使用不同的分布)执行相同的操作。