使用高斯朴素贝叶斯的多类分类
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 折交叉验证的多类分类