【问题标题】:how to check the results of individual Naive Bayes predictions?如何检查单个朴素贝叶斯预测的结果?
【发布时间】:2020-09-23 15:07:52
【问题描述】:

我制作了一个朴素贝叶斯模型进行预测。一切顺利,即使只有一个输入也可以预测。我想预测数据并将预测的所有结果保存到 csv 文件中。但是当我尝试它时,我收到如下图所示的错误消息。 这张图片显示了我如何循环我的数据以及出现的错误。

代码:

# load previously saved classifier and vectorizer
vectorizer, classifer = load()
print('\nPerform a test')      
df = pd.read_csv('tweet_BARU.csv') #read the CSV file
data_label = df["full_text"]

tweet_pred = []
tweet_input = data_label
for sentence in data_label:
    tweet_input_transformed = vectorizer.transform(sentence)
    prediction = classifer.predict(tweet_input_transformed)
    tweet_pred = 0
    if (prediction=='neutral'):
        tweet_pred.append('neutral')
    elif (prediction=='positive'):
        tweet_pred.append('positive')
    else:
        tweet_pred.append('negative')

错误:

    ---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-35-227d63cffdf9> in <module>()
     11     prediction = classifer.predict(tweet_input_transformed)
     12     tweet_pred = 0
---> 13     if (prediction=='neutral'):
     14         tweet_pred.append('neutral')
     15     elif (prediction=='positive'):

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我在哪里做错了? 谁能解决?

【问题讨论】:

  • 欢迎来到 SO!您能否发布预测变量的形状?
  • 实际上,如果这里的if-else 确实有效,那将完全没有必要——一个简单的赋值tweet_pred = prediction 就可以完成这项工作(为什么tweet_pred = 0 在循环中?)

标签: python machine-learning scikit-learn naivebayes


【解决方案1】:

也许是因为我还不懂使用 python。实际上我不需要循环,因为它已经自动循环了每个数据。

代码:

tweet_input_transformed = vectorizer.transform(data_label)
prediction = classifer.predict(tweet_input_transformed)

results = pd.DataFrame({
        "Labeled Data" : data_label,
        "Label" : prediction
        })
results.to_csv("Hasil_NBC.csv", index = False)

【讨论】:

  • 干得好...! ;)
【解决方案2】:

在您的if 语句中,您尝试将prediction 变量的值与字符串进行比较。这没有意义,因为 prediction 变量的类型应该是 ndarray - 这是 scikit-learn 中朴素贝叶斯分类器的 predict() 方法的返回类型。

此外,稍后在您的代码中,您将尝试将字符串附加到整数(tweet_pred,在 for 循环中重新定义)。这也行不通。

要将prediction 的内容保存在文件中,每行一个值,您可以执行以下操作:

prediction = classifer.predict(tweet_input_transformed)
with open("\path\to\a\file.txt", 'w') as f:
    f.write('\n'.join(prediction))

【讨论】:

  • 但是当我只输入一个数据时,预测过程可以工作。我对 if else 使用相同的代码。
  • 有没有办法将预测结果输入文件?
  • 你能显示prediction变量的内容吗?
猜你喜欢
  • 2012-11-22
  • 2015-05-22
  • 2011-04-08
  • 2016-07-29
  • 2014-11-11
  • 2012-02-21
  • 2011-12-28
  • 2021-07-16
  • 2016-08-16
相关资源
最近更新 更多