我知道Naive Bayes擅长二进制分类,但我想知道Multiclass分类是如何工作的。
例如:我之前使用Naive Bayes进行了文本分类,其中我执行了文本矢量化以查找文档中每个单词的概率,然后使用矢量化数据来拟合朴素贝叶斯分类器。
现在,我正在使用看起来像这样的数据:
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。
所以,我的问题是我在文本分类过程中拟合导航贝叶斯分类器之前进行了矢量化,在将GaussianNB分类器与训练数据拟合之前是否需要对上述数据进行预处理,以便它可以预测多类(0,1和2)而不是(0和2)。
答案 0 :(得分:2)
我知道Naive Bayes擅长二进制分类,但我想知道Multiclass分类是如何工作的。
朴素贝叶斯中没有任何特定于二进制分类的东西,它被设计用于进行多类分类。
所以,我的问题是我在文本分类过程中拟合导航贝叶斯分类器之前进行了矢量化,在将GaussianNB分类器与训练数据拟合之前是否需要对上述数据进行预处理,以便它可以预测多类(0,1和2)而不是(0和2)。
不,对于多类位,没有预处理。然而,对于高斯比特 - 顾名思义,该模型将尝试将高斯pdf拟合到每个特征。因此,如果您的功能不遵循高斯分布 - 它可能会失败。如果你可以找出每个特征的变换(基于你拥有的数据),使它们更像高斯,它将有助于模型。例如,您的某些功能似乎是巨大的数字,如果它们不遵循高斯分布,则会导致严重的困难。您可能希望规范化数据,甚至删除这些功能。
你的模型永远不会预测1的唯一原因是因为在朴素贝叶斯假设下,并且提供了数据 - 它不可能被考虑过。您可以尝试如上所述规范化功能。如果失败,您还可以通过向sklearn提供自己的prior
属性来人为地“超量”选定的类(通常从数据中估计“遇到类X的样本频率”,如果将此更改为更高的数字 - 一个类将被认为更有可能。)