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的主要内容,如果未能解决你的问题,请参考以下文章

译文:朴素贝叶斯算法简介(Python和R中的代码)

机器学习实验使用朴素贝叶斯进行文本的分类

朴素贝叶斯文本分类简单介绍

用于文本分类的朴素贝叶斯 - Python 2.7 数据结构问题

使用 python 的朴素贝叶斯分类器

使用 Python 示例对多项朴素贝叶斯分类器进行分类