如何使用朴素贝叶斯将数据分类为多个类别?

Posted

技术标签:

【中文标题】如何使用朴素贝叶斯将数据分类为多个类别?【英文标题】:How can I classify data into multiple categories using Naive Bayes? 【发布时间】:2019-05-29 16:32:03 【问题描述】:

我正在尝试将句子分类为各种情绪(共有八种情绪),但在运行代码时出现此错误。抱歉,我真的是 Python 新手,所以我不确定这里发生了什么。

ValueError                                
Traceback (most recent call last)
<ipython-input-66-40fb2c79238c> in <module>
      18 test_data = data[4800:]
      19 
--->  20 classfier= nltk.NaiveBayesClassifier.train(train_data)
      21 print(nltk.classify.accuracy(classifier, test_data)) 


  ~/anaconda3/lib/python3.7/site-packages/nltk/classify/naivebayes.py in train(cls, labeled_featuresets, estimator)
204         # Count up how many times each feature value occurred, given
205         # the label and featurename.
--> 206         for featureset, label in labeled_featuresets:
207             label_freqdist[label] += 1
208             for fname, fval in featureset.items():

ValueError: too many values to unpack (expected 2)

这是我的原始代码:

import nltk
import pandas as pd
import csv
import numpy as np
from sklearn.model_selection import train_test_split

import pandas as pd
import numpy as np

import random

with open("/Users/mac/Documents/Transcribed.rtf", "rb") as f:
data = f.read().split()

random.shuffle(data)

train_data = data[:1200]
test_data = data[4800:]

classfier= nltk.NaiveBayesClassifier.train(train_data)
print(nltk.classify.accuracy(classifier, test_data))

【问题讨论】:

将要求、代码、输出和/或可能的错误消息显示为问题中格式正确的文本,而不是图像或外部链接。 【参考方案1】:

据我所知,问题出在第 206 行:

  ~/anaconda3/lib/python3.7/site-packages/nltk/classify/naivebayes.py in train(cls, labeled_featuresets, estimator)
204         # Count up how many times each feature value occurred, given
205         # the label and featurename.
--> 206         for featureset, label in labeled_featuresets:
207             label_freqdist[label] += 1
208             for fname, fval in featureset.items():

ValueError: too many values to unpack (expected 2)

错误表明 labeled_featuresets 正如您在 for featureset, label in labeled_featuresets 中所期望的那样。所以你要做的就是打印labeled_featureset的内容,看看它有多少维度。

【讨论】:

我试过了,但出现名称错误。显然 label_featureset 没有定义 这很奇怪,因为它也应该在这里给你名称错误 嗯..但实际上第206行不是我自己编码的,它是由系统生成的。那有什么办法可以解决吗? 不,这意味着错误在您的代码中。检查数据的形状并在纸上完成过程,看看所有尺寸是否匹配

以上是关于如何使用朴素贝叶斯将数据分类为多个类别?的主要内容,如果未能解决你的问题,请参考以下文章

04-朴素贝叶斯

使用 LingPipe 使用朴素贝叶斯对数据进行分类

机器学习之朴素贝叶斯(分类)

朴素贝叶斯分类

朴素贝叶斯分类——大道至简

机器学习朴素贝叶斯应用实例