在亚马逊美食评论数据集上实施的朴素贝叶斯问题

Posted

技术标签:

【中文标题】在亚马逊美食评论数据集上实施的朴素贝叶斯问题【英文标题】:Problems with Naive Bayes implemented on Amazon fine food reviews dataset 【发布时间】:2019-02-07 14:26:48 【问题描述】:

cv accuracycv accuracy graphtest accuracy

我正在尝试在亚马逊的美食评论数据集上实现朴素贝叶斯。您能否回顾一下代码并说明为什么交叉验证准确度和测试准确度之间存在如此大的差异?

从概念上讲,下面的代码有什么问题吗?

#BOW()

from sklearn.feature_extraction.text import CountVectorizer
bow = CountVectorizer(ngram_range = (2,3))
bow_vect = bow.fit(X_train["F_review"].values)
bow_sparse = bow_vect.transform(X_train["F_review"].values)
X_bow = bow_sparse
y_bow = y_train



roc = []
accuracy = []
f1 = []
k_value = []
for i in range(1,50,2):
  BNB =BernoulliNB(alpha =i)

  print("************* for alpha = ",i,"*************")
  x = (cross_validate(BNB, X_bow,y_bow, scoring = ['accuracy','f1','roc_auc'], return_train_score = False, cv = 10))
  print(x["test_roc_auc"].mean())
  print("-----c------break------c-------break-------c-----------")
  roc.append(x['test_roc_auc'].mean())#This is the ROC metric
  accuracy.append(x['test_accuracy'].mean())#This is the accuracy metric
  f1.append(x['test_f1'].mean())#This is the F1 score

  k_value.append(i)


#BOW Test prediction
BNB =BernoulliNB(alpha= 1)
BNB.fit(X_bow, y_bow)
y_pred = BNB.predict(bow_vect.transform(X_test["F_review"]))
print("Accuracy Score: ",accuracy_score(y_test,y_pred))
print("ROC: ", roc_auc_score(y_test,y_pred))
print("Confusion Matrix: ", confusion_matrix(y_test,y_pred))

【问题讨论】:

超参数调优:RandomizedSearchCV 或GridSearchCV。还要改变 alpha 的范围,比如 alpha_set = [1e-3, 1e-2,1e-1, 1e,1e2, 1e3, 1e4 ] 【参考方案1】:

使用其中一项指标来找到最佳 alpha 值。然后在测试数据上训练 BernoulliNB。

并且不要考虑性能测量的准确性,因为它容易出现不平衡的数据集。

在做任何事情之前,请按照 Kalsi 在评论中提到的那样更改 循环中给出的值

在列表中具有如上所述的 alpha 值 求最大 AUC 值及其索引。 使用上述索引找到最佳 alpha。

【讨论】:

以上是关于在亚马逊美食评论数据集上实施的朴素贝叶斯问题的主要内容,如果未能解决你的问题,请参考以下文章

朴素贝叶斯

在数字分类数据上实现朴素贝叶斯高斯分类器

DataMining-朴素贝叶斯Naive Bayesian

如何评估高度不平衡数据的准确性(使用朴素贝叶斯模型)?

从Scratch在Python中的朴素贝叶斯分类

实验三 朴素贝叶斯算法及应用