sklearn:Naive Bayes分类器精度低

Gio*_*ous 3 python machine-learning bayesian scikit-learn naivebayes

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

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

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)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

lej*_*lot 5

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

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

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

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

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

没有什么是以这种方式自动完成的,你需要自己做这个(scikit学习有很多工具 - 参见交叉验证pacakges).