【发布时间】:2019-10-24 10:35:58
【问题描述】:
我正在尝试使用朴素贝叶斯分类器对特征进行分类,我使用 TF_IDF 进行特征提取。
finaltfidfVector是一个向量列表,每个向量代表一个数字列表,0如果没有找到单词,如果找到单词的权重。
而classlabels 包含每个向量的所有类标签。我正在尝试使用此代码对其进行分类,但它不起作用。
26652 行数据集
from nltk.classify import apply_features
def naivebyse(finaltfidfVector,classlabels,reviews):
train_set = []
j = 0
for vector in finaltfidfVector:
arr={}
if j<18697:
arr[tuple(vector)] = classlabels[j]
train_set.append((arr, reviews[j]))
j += 1
test_set = []
j = 18697
for vector in finaltfidfVector:
arr = {}
if j < 26652 and j>=18697:
arr[tuple(vector)] = classlabels[j]
test_set.append((arr, reviews[j]))
j += 1
classifier = nltk.NaiveBayesClassifier.train(train_set)
print(nltk.classify.accuracy(classifier, test_set))
输出:
0.0
使用的TF_IDF 引用并应用于finaltfidfVector https://triton.ml/blog/tf-idf-from-scratch?fbclid=IwAR3UlCToGYFEQSmugXo3M5Q9fcld79JfXSfBaDG7wKv5a49O0ZDEft9DFNg。
数据集
this is sample about the used data set before preprocessing and TF_IDF
这是finaltfidfVector 列表中索引为零的第一个向量的示例
[0.0,0.0, 0.0, 0.6214608098422192, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5115995809754083,0.0,0.0, 0.0, 0.0, 0.5521460917862246, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6214608098422192,0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6214608098422192, 0.0, 0.0, 0.0, 0.6214608098422192]
classlabels 包含每个向量的类标签
, 1 代表讽刺 0 代表不讽刺。索引0的类标签为1,这个1为finaltfidfVector中的第一个向量。
train_set 的第一项是
({(0.0, 0.0, 1.3803652294655615,.....ect): '0'}, "former versace store clerk sues over secret 'black code' for minority shoppers")
【问题讨论】:
-
您能发布一下您是如何创建
finaltfidfVector和classlabels的吗?最好显示一些数据。 -
完成了,还有什么吗?
-
我已经修改了我的帖子。
-
您能否重新格式化您的帖子并提供一个最小的、可运行的代码 sn-p 示例?我试图重现您的问题,但您的
naivebayes函数有语法错误。请修复该问题并再次发布相关代码。 -
你能告诉我错误到底在哪里吗? ,我真的很失望。
标签: python classification nltk sentiment-analysis naivebayes