Python sklearn:朴素贝叶斯分类器精度较低

Python sklearn:朴素贝叶斯分类器精度较低,python,machine-learning,scikit-learn,bayesian,naivebayes,Python,Machine Learning,Scikit Learn,Bayesian,Naivebayes,我有一个数据集,其中包括200000个带标签的培训示例。 对于每个培训示例,我有10个特性,包括连续和离散特性。 我试图使用python的sklearn包来训练模型并进行预测,但我遇到了一些麻烦(还有一些问题) 首先,让我来编写我迄今为止编写的代码: from sklearn.naive_bayes import GaussianNB # data contains the 200 000 examples # targets contain the corresponding labels f

我有一个数据集,其中包括200000个带标签的培训示例。 对于每个培训示例,我有10个特性,包括连续和离散特性。 我试图使用python的
sklearn
包来训练模型并进行预测,但我遇到了一些麻烦(还有一些问题)

首先,让我来编写我迄今为止编写的代码:

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

如有任何想法或建议,将不胜感激

问题是我的准确率很低(错误分类的标签太多)-大约20%。但是,我不太确定数据(例如,需要更多数据或其他东西)或代码是否存在问题

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

对于同时具有离散和连续特征的数据集,这是实现朴素贝叶斯分类器的正确方法吗

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

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


没有任何事情是以这种方式自动完成的,您需要自己完成(scikit learn有很多工具,请参阅交叉验证包)。

训练/测试拆分不是自动完成的,但有许多内置功能可以让您轻松完成。另一方面,请看一下slearn的功能,您正在将模型与所有数据进行拟合,因此在预测相同数据时,人们会期望相对较高的准确性。您可能需要研究调整模型的超参数(请参阅向我们提供您的代码和数据样本。我想测试多个模型,以便使用各种算法进行一些预测并生成报告。我上面提到的20%是准确性,而不是错误分类的预测。顺便说一句,您提到我需要离散特征中的不同分布。您能告诉我如何进行测试吗我能做到这一点吗(即使是手动)。不幸的是,对于朴素贝叶斯来说,这仍然是可能的。你们有多少个类?