Python 中使用朴素贝叶斯进行简单文本分类 - KeyError
Posted
技术标签:
【中文标题】Python 中使用朴素贝叶斯进行简单文本分类 - KeyError【英文标题】:Simple text classification with Naive Bayes in Python - KeyError 【发布时间】:2021-11-15 14:48:21 【问题描述】:我正在尝试使用包含文本和类别的 csv 文件来训练模型。该模型工作正常,但我得到一个关键错误。我怀疑这与读取 csv 的方式有关。
csv 文件如下所示:
text | category |
---|---|
hello | greeting |
who are you? | question |
我的代码是:
train = pd.read_csv(filepath)
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline
model = make_pipeline(TfidfVectorizer(), MultinomialNB())
model.fit(train.text,train.category)
def predict_category(s, train=train, model=model):
pred = model.predict([s])
return train.category[pred[0]]
在我尝试将字符串输入到 predict_category 函数之前,所有这些都可以正常执行,例如
predict_category('Hi')
导致 KeyError: 'Greeting'
所以看起来模型正在工作,但 KeyError 没有打印结果。
非常感谢您的帮助,谢谢
【问题讨论】:
从您显示的内容来看,model.predict()
似乎已经返回 greeting
,您无需再次查找。
【参考方案1】:
您不需要将 train 作为函数的输入参数,model.predict 已经为您提供了预测结果。您试图获取 train.category['greetings'] 的值,这导致了 KeyError,因为 train.category 在索引中没有“greetings”。
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline
train = pd.read_csv(filepath)
model_nb = make_pipeline(TfidfVectorizer(), MultinomialNB())
model_nb.fit(train['text'], train['category'])
def predict_category(s, model=model_nb):
pred = model.predict([s])
return pred[0]
predict_category(s='Hi')
【讨论】:
以上是关于Python 中使用朴素贝叶斯进行简单文本分类 - KeyError的主要内容,如果未能解决你的问题,请参考以下文章