我正在尝试对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没有大量的特性。如果有人知道的话,我会感谢你的帮助。谢谢
发布于 2021-01-16 14:45:06
高斯朴素贝叶斯(GaussianNB)的问题不在于特征的数量。这是GaussianNB正在学习的决策边界。由于“朴素”假设,朴素贝叶斯被限制在学习数据的边缘分布上。通常情况下,条件分布对预测很有用。考虑到GaussianNB在该数据集上的性能,应用可以学习不同决策边界的不同分类器。可能是有意义的。
https://datascience.stackexchange.com/questions/67338
复制相似问题