sklearn:朴素贝叶斯分类器的准确性低
Posted
技术标签:
【中文标题】sklearn:朴素贝叶斯分类器的准确性低【英文标题】:sklearn: Naive Bayes classifier gives low accuracy 【发布时间】:2017-03-24 23:20:25 【问题描述】:我有一个数据集,其中包含 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
?
任何想法或建议将不胜感激。
【问题讨论】:
训练/测试拆分不会自动完成,但有许多内置功能可让您轻松完成。 看看cross validation的slearn函数 另一方面,您正在将模型拟合到所有数据,因此在预测相同数据时会期望相对较高的准确性。您可能想研究调整模型的超参数(请参阅sklearn
's page on parameter tuning
向我们提供您的代码和数据示例
【参考方案1】:
问题是我的准确率非常低(错误分类的标签太多)——大约 20%。但是我不太确定数据(例如需要更多数据或其他)或代码是否存在问题。
对于朴素贝叶斯来说这不是大错误,这是一个非常简单的分类器,你不应该期望它很强大,更多的数据可能无济于事。您的高斯估计器可能已经非常好,只是简单的假设是问题所在。使用更强的模型。您可以从 Random Forest 开始,因为即使非该领域的专家也很容易使用它。
在给定具有离散和连续特征的数据集的情况下,这是实现朴素贝叶斯分类器的正确方法吗?
不,不是,您应该在离散特征中使用不同的分布,但是 scikit-learn 不支持,您必须手动执行此操作。如前所述 - 更改您的模型。
此外,在机器学习中,我们知道数据集应该分为训练集和验证/测试集。这是由 sklearn 自动执行的,还是我应该使用训练数据集拟合模型,然后使用验证集调用 predict?
这种方式不会自动完成,您需要自己完成(scikit learn 有很多工具可以做到这一点 - 请参阅交叉验证包)。
【讨论】:
我想测试多个模型,以便使用各种算法进行一些预测并生成报告。我上面提到的 20% 是准确率,而不是错误分类的预测。顺便说一下,你提到我需要离散特征中的不同分布。你能告诉我我该怎么做(甚至手动)。 不幸的是,朴素贝叶斯仍然可以做到这一点。你们那里有几节课?以上是关于sklearn:朴素贝叶斯分类器的准确性低的主要内容,如果未能解决你的问题,请参考以下文章