与分类(单热编码)特征一起使用的朴素贝叶斯的最佳形式(高斯、多项式)是什么?

机器算法验证 机器学习 分类 朴素贝叶斯
2022-03-14 20:07:00

我被要求使用朴素贝叶斯分类器对几个样本进行分类。

我的数据集具有分类特征,因此我必须首先使用 one-hot 编码器对其进行编码,但随后我不知道要使用哪种统计模型(例如高斯 NB、多项式 NB)。

我最终使用了多项式版本,因为我在某处读到它在 NLP 和 IR 任务中运行良好,因为文档被表示为术语计数向量或 TF-IDF 权重。

我想知道这是否正确,如果可能的话,快速解释一下为什么会这样。

PS这个有点相似的问题,但我不确定这是否也适用于严格的二进制(0 或 1)特征向量。

4个回答

正如其他人所提到的,没有“正确”的模型。但是,由于您使用了 one-hot 编码,因此您现在基本上是在处理布尔特征。换句话说,每个术语/特征都遵循伯努利分布。话虽如此,我会使用 amultivariate Bernoulli NB或 amultinomial NB具有布尔功能(您已经拥有)。Gaussian NB在这里似乎有点偏离,因为您不处理实值功能。

这篇优秀的论文有很多关于不同 NB 变体以及何时使用的信息。

您在分类中选择的统计模型(高斯 NB、多项式 NB 等)取决于输入变量的分布。您应该绘制每个输入参数的直方图以确定它们的分布。

您可以使用 Pandas 通过在输入矩阵上创建数据框并.hist()在其上运行来执行此操作,如下所示:

X_frame = pd.DataFrame(X, index=natural_index(dataset))
X_frame.hist()

如果您使用的是真实世界的数据,那么任何模型都不太可能是“正确的”,因此与其尝试找到“正确”的模型,不如尝试找到准确的模型。要在这两个模型之间做出决定,您可以使用交叉验证来估计每个模型的准确性并选择更好的模型。归根结底,如果没有实际以某种容量在数据上运行模型,即使在类似的应用程序中使用了一个模型,您也无法确定哪种模型在您的数据上表现最好。

我还建议您可以尝试第三种朴素贝叶斯模型。不要使用 one-hot 编码器,而是让每个特征的类条件密度为分类分布。

更准确地说,假设是数据点的标签。假设是数据点的数据,并假设每个特征是换句话说,假设每个特征都是具有值的分类。您可以使用模型其中 ,Yi{1,...,C}iXiiXij{1,...,K}KP(Xij=k|Yi=c,θ)=θcjkcjk=1Kθcjk=1

我建议绘制直方图。对于快速直方图,您可以这样做:

将数据加载到 pandas 数据框中:df = pandas.Dataframe(data, optional parameters)

df.hist()

如果你的大部分特征都遵循伯努利分布,你应该很好地使用多项式(伯努利)NB,如果它们遵循高斯(正态)分布,高斯贝叶斯应该很好。

如果您的特征分布看起来很复杂(不同分布的混合),最好考虑降维以确保您拥有大多数(尽管不是全部)特征具有相似的分布。