使用高斯朴素贝叶斯的多类分类

Posted

技术标签:

【中文标题】使用高斯朴素贝叶斯的多类分类【英文标题】:Multi class classification using gaussian naive bayes 【发布时间】:2018-05-09 12:41:41 【问题描述】:

我知道朴素贝叶斯擅长二元分类,但我想知道多类分类是如何工作的。

例如:我之前使用朴素贝叶斯进行了文本分类,其中我对文本进行了向量化以找到文档中每个单词的概率,然后使用向量化的数据来拟合朴素贝叶斯分类器。

现在,我正在处理如下数据:

A、B、C、D、E、F、G

210、203、0、30、710、2587452、0

273、250、0、30、725、3548798、1

283、298、0、31、785、3987452、3

在上述数据中,有6个特征(A-F),G是具有值(0,1或2)的类

我在数据集中有近 70000 个条目,类别(输出)为 1、2 或 3。

将数据拆分为测试和训练数据后,我将训练数据拟合到 sklearn-GaussianNB 算法中。 拟合后,当我尝试预测测试数据时,它只是分类为 0 或 2。

所以,我的问题是,在文本分类期间,我在拟合 navie bayes 分类器之前执行了矢量化,在将 GaussianNB 分类器与训练数据拟合之前,我需要对上述数据进行数据预处理吗?可以预测多类(0,1 和 2),而不仅仅是(0 和 2)。

【问题讨论】:

如果您仅获得 2 个类别的预测,则在执行模型拟合之前尝试对特征进行归一化。似乎某些特征处于较高的数值范围内,这会影响训练(某些特征优于其他特征) 【参考方案1】:

我知道朴素贝叶斯擅长二元分类,但我想知道多类分类是如何工作的。

朴素贝叶斯没有什么专门针对二分类的,它被设计用来做多类分类就好了。

所以,我的问题是,在文本分类期间,我在拟合 navie bayes 分类器之前执行了矢量化,在将 GaussianNB 分类器与训练数据拟合之前,我需要对上述数据进行数据预处理吗?可以预测多类(0,1 和 2),而不仅仅是(0 和 2)。

不,对于 multiclass 位没有预处理。但是,对于高斯位 - 顾名思义,该模型将尝试将高斯 pdf 拟合到每个特征。因此,如果您的特征不遵循高斯分布 - 它可能会失败。如果您可以计算出每个特征的转换(基于您拥有的数据)以使它们更像高斯,它将有助于模型。例如,您的某些特征似乎是巨大数字,如果它们不遵循高斯分布,可能会导致严重的困难。您可能想要规范化您的数据,甚至删除这些功能。

您的模型永远不会预测 1 的唯一原因是因为在朴素贝叶斯假设下,并且在提供数据的情况下 - 它不太可能被考虑。您可以尝试如上所述的规范化功能。如果这失败了,您还可以通过向 sklearn 提供您自己的prior 属性来人为地“超重”选定的类(通常根据数据估计为“遇到类 X 的样本的频率”,如果您将其更改为更高的数字- 一个类将被认为更有可能)。

【讨论】:

以上是关于使用高斯朴素贝叶斯的多类分类的主要内容,如果未能解决你的问题,请参考以下文章

基于朴素贝叶斯的乳腺癌数据集分类

Scikit-learn 使用朴素贝叶斯进行 10 折交叉验证的多类分类

sklearn-朴素贝叶斯

逻辑回归与朴素贝叶斯的战争

使用 10 折交叉验证获取分类报告,说明多项式朴素贝叶斯的分类精度和召回率

三种常用的朴素贝叶斯实现算法——高斯朴素贝叶斯伯努利朴素贝叶斯多项式朴素贝叶斯