sklearn:朴素贝叶斯分类器给出低准确率

3
我有一个包含20万个标记的训练样本的数据集。每个训练样本都有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
任何想法或建议将不胜感激。

2
训练/测试拆分不会自动完成,但有许多内置功能可让您轻松完成此操作。 - juanpa.arrivillaga
请查看slearn的交叉验证函数。 - jkr
另一方面,您正在将模型拟合到所有数据上,因此在预测相同数据时可以期望相对较高的准确性。您可能需要研究调整模型的超参数(请参见sklearn的参数调整页面)。 - jkr
请提供您的代码和数据样本。 - lejlot
1个回答

7
问题在于我的准确率非常低(错误分类的标签过多)-大约20%。但是我不确定数据是否存在问题(例如需要更多数据或其他原因)或代码是否存在问题。
对于朴素贝叶斯来说,这并不是一个大误差,它是一种极其简单的分类器,您不应该期望它很强大,更多的数据可能不会有帮助。 您的高斯估计已经非常好了,只是朴素的假设导致了问题。使用更强大的模型。您可以从随机森林开始,因为即使是领域中的非专家也很容易使用。
这是针对同时具有离散和连续特征的数据集实现朴素贝叶斯分类器的正确方法吗?
不是,您应该在离散特征中使用不同的分布,但是scikit-learn不支持此功能,您需要手动执行此操作。 如前所述-更改您的模型。
此外,在机器学习中,我们知道数据集应该分成训练集和验证/测试集。这是由sklearn自动执行的吗?还是我应该使用训练数据集拟合模型,然后使用验证集调用predict?
在这种方式下,没有任何自动执行的操作,您需要自己执行此操作(scikit learn有许多工具可用于此-请参阅交叉验证软件包)。

我想测试多个模型,使用各种算法进行一些预测并生成报告。我上面提到的20%是准确率,而不是错误分类的预测。顺便说一下,你提到我需要在离散特征中有不同的分布。你能告诉我如何做到这一点(即使手动)吗? - Giorgos Myrianthous
这仍然可以使用朴素贝叶斯来做。你那里有多少个类别? - lejlot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接