高斯朴素贝叶斯(GaussianNB)分类器不适用于大量特征

数据挖掘 机器学习 分类 scikit-学习 预测建模 朴素贝叶斯分类器
2022-03-07 22:40:01

我正在尝试与 GuassianNB 进行部分拟合,这是我的代码的一小段

classfier = GaussianNB()
classfier.fit(X_init, y_init)
for i in range(X_train.shape[0]):
    if('some condition'):
        classfier = GaussianNB() 
        classfier.partial_fit(X_train[i, :].reshape(1, -1), y_train[i].reshape(1, -1).ravel(), classes = np.unique(y_train))
    else:
        classfier.partial_fit(X_train[i, :].reshape(1, -1), y_train[i].reshape(1, -1).ravel())

一切正常,直到条件为真,似乎分类器出于某种原因停止学习并开始进行任意预测(预测全为零)

tn, fp, fn, tp = confusion_matrix(y_test, pred).ravel()
print(tn, fp, fn, tp)

>>> 1324 0 1031 0

我认为也许我的分类器在重新初始化它之后做出了预测(在循环结束之前满足条件)但是在我检查它之后,它在循环结束之前至少进行了 900 个部分拟合,同时带有 0 和 1 标签。

我很困惑,这是怎么回事?谢谢

编辑:我想出了什么问题

事实证明,问题在于我的数据集有很多特征(大约 40000,因为它最初是一串评论并用 tfidf 对其进行矢量化)并且由于某种原因导致 GaussianNB 分类器崩溃。我想知道为什么 GaussianNB 没有大量功能。如果有人知道,我将不胜感激。谢谢

1个回答

高斯朴素贝叶斯 (GaussianNB) 的问题不是特征数量。这是 GaussianNB 正在学习的决策边界。朴素贝叶斯受限于学习数据的边际分布,因为“朴素”假设。通常情况下,条件分布对于进行预测很有用。鉴于 GaussianNB 在该数据集上的性能,应用可以学习不同决策边界的不同分类器可能是有意义的