【发布时间】:2019-02-14 03:42:09
【问题描述】:
我尝试使用朴素贝叶斯分类器对我的样本语料库进行分类。样本语料如下(存储在myfile.csv中):
"Text";"label"
“There be no significant perinephric collection";"label1”
“There be also fluid collection”;”label2”
“No discrete epidural collection or abscess be see";"label1”
“This be highly suggestive of epidural abscess”;”label2”
“No feature of spondylodiscitis be see”;”label1”
“At the level of l2 l3 there be loculated epidural fluid collection”;”label2”
分类器代码如下:
# libraries for dataset preparation, feature engineering, model training
import pandas as pd
import csv
from sklearn import svm
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.naive_bayes import MultinomialNB
#Data preparation
data = pd.read_csv(open('myfile.csv'), sep=';', quoting=csv.QUOTE_NONE)
# Creating Bag of Words
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(data)
print(X_train_counts.shape)
#From occurrences to frequencies
tf_transformer = TfidfTransformer(use_idf=False).fit(X_train_counts)
X_train_tf = tf_transformer.transform(X_train_counts)
print(X_train_tf.shape)
tfidf_transformer = TfidfTransformer()
X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)
print(X_train_tfidf.shape)
#Training a classifier
clf = MultinomialNB().fit(X_train_tfidf, data['label'])
#Predicting with the classifier
docs_new = ['there is no spondylodiscitis', 'there is a large fluid collection']
X_new_counts = count_vect.transform(docs_new)
X_new_tfidf = tfidf_transformer.transform(X_new_counts)
predicted = clf.predict(X_new_tfidf)
for doc, category in zip(docs_new, predicted):
print('%r => %s' % (doc, data['label']))
每当我尝试运行预测时,都会收到以下错误:
KeyError: 'label'
我哪里错了?
【问题讨论】:
-
我想你的意思是
X_train_counts = count_vect.fit_transform(data['Text'])而不是X_train_counts = count_vect.fit_transform(data)?我在此更改下运行了您的代码并且没有quoting=csv.QUOTE_NONE并且我没有收到任何错误,实际上我得到label1用于'there is no spondylodiscitis'和label2用于'there is a large fluid collection' -
当我试图重现您的错误时,我手动创建了您的示例数据框,这就是为什么我没有包含
quoting=csv.QUOTE_NONE部分。 -
没有 QUOTE_NONE 我不断收到错误消息:pandas.errors.ParserError: Error tokenizing data。 C 错误:字符串中的 EOF 从第 1 行开始
-
data.columns.values的输出是什么? -
我认为从 .csv 文件中删除所有引号并删除 quoting=csv.QUOTE_NONE,程序可以工作。但它仍然给了我错误的答案。您是如何获得正确标签的?
标签: python scikit-learn classification naivebayes