sklearn:Naive Bayes分类器精度低

时间:2016-11-10 19:54:08

标签: python machine-learning scikit-learn bayesian naivebayes

我有一个包含200000个标记的训练样例的数据集。 对于每个训练示例,我有10个功能,包括连续和离散。 我试图使用sklearn python包来训练模型并做出预测,但我遇到了一些麻烦(还有一些问题)。

首先让我写一下我到目前为止编写的代码:

from sklearn.naive_bayes import GaussianNB
# data contains the 200 000 examples
# targets contain the corresponding labels for each training example
gnb = GaussianNB()
gnb.fit(data, targets)
predicted = gnb.predict(data)

问题在于我的准确度非常低(错误分类标签太多) - 大约20%。 但是我不太确定数据是否存在问题(例如需要更多数据或其他内容)或代码。

在给定具有离散和连续特征的数据集的情况下,这是实现朴素贝叶斯分类器的正确方法吗?

此外,在机器学习中,我们知道数据集应该分为训练和验证/测试集。这是由sklearn自动执行还是应该使用训练数据集fit模型,然后使用验证集调用predict

任何想法或建议将不胜感激。

1 个答案:

答案 0 :(得分:5)

  

问题在于我的准确度非常低(错误分类标签太多) - 大约20%。但是我不太确定数据是否存在问题(例如需要更多数据或其他内容)或代码是否存在问题。

对于朴素贝叶斯来说,这不是一个大错误,这是一个非常简单的分类器,你不应该期望它很强大,更多的数据可能不会有帮助。您的高斯估计可能已经非常好,简单的天真假设就是问题所在。使用更强的模型。您可以从随机森林开始,因为即使是非现场专家也很容易使用。

  

在给定具有离散和连续特征的数据集的情况下,这是实现朴素贝叶斯分类器的正确方法吗?

不,不是,您应该在离散功能中使用不同的分布,但是scikit-learn不支持,您必须手动执行此操作。如前所述 - 改变你的模型。

  

此外,在机器学习中,我们知道数据集应该分为训练和验证/测试集。这是由sklearn自动执行还是应该使用训练数据集拟合模型,然后使用验证集调用预测?

没有什么是以这种方式自动完成的,你需要自己做这些(scikit learn有很多工具 - 请参阅交叉验证pacakges)。