混合朴素贝叶斯:如何用数字和类别变量一起训练朴素贝叶斯分类器(sklearn)



基本上,sklearn具有高斯核朴素贝叶斯,可以对数值变量进行分类。

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

例如,给出下面的数据集,如何使用sklearn训练混合数据类型一起没有离散的数字变量?

+-------+--------+-----+-----------------+
| Index | Gender | Age | Product_Reviews |
+-------+--------+-----+-----------------+
| A     | Female |  20 | Good            |
| B     | Male   |  21 | Bad             |
| C     | Female |  25 | Bad             |
+-------+--------+-----+-----------------+

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

对于类别变量,p (B|A)很容易被计算出来,但对于数值变量,它应该服从高斯分布。假设我们得到了高斯分布的P(B|A)

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

请注意:这个问题与如何使用sklearn不重复。具有(多个)分类特征的朴素贝叶斯?使用scikit-learn在朴素贝叶斯分类器中混合分类和连续数据

因为这个问题是不想用虚拟变量做朴素贝叶斯(第一个问题),也不想做模型集成(第二个问题解决方案2)。

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

答案直接来自于朴素贝叶斯的数学

  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实现的返回也忽略了它)

由于在朴素贝叶斯中特征是独立的我们可以得到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) =分类模型的log似然+连续模型的log似然- a类的log先验

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

相关内容

最新更新