2

以下示例展示了如何使用 Sklearn 20 新闻组数据训练分类器。

>>> from sklearn.feature_extraction.text import TfidfVectorizer 
>>> categories = ['alt.atheism', 'talk.religion.misc', 'comp.graphics', 'sci.space']
>>> newsgroups_train = fetch_20newsgroups(subset='train', ... categories=categories) 
>>> vectorizer = TfidfVectorizer() >>> vectors = vectorizer.fit_transform(newsgroups_train.data) 
>>> vectors.shape (2034, 34118)

但是,我有自己想要使用的标记语料库。

在得到我自己的数据的 tfidfvector 之后,我会训练这样的分类器吗?

classif_nb = nltk.NaiveBayesClassifier.train(vectorizer)

回顾一下:我如何使用我自己的语料库而不是 20newsgroups,但使用的方式与此处相同?然后如何使用我的 TFIDFVectorized 语料库来训练分类器?

谢谢!

4

2 回答 2

8

解决评论中的问题;在某些分类任务中使用 tfidf 表示的整个基本过程,您应该:

  1. 矢量化器适合您的训练数据并将其保存在某个变量中,我们称之为tfidf
  2. 您通过 data = tfidf.transform(...)转换训练数据(没有标签,只有文本)
  3. 您使用 some_classifier.fit(data, labels)拟合模型(分类器),其中标签与数据中的文档顺序相同
  4. 在测试期间,您对新数据使用 tfidf.transform( ... ),并检查模型的预测
于 2013-10-30T07:53:37.877 回答
2

一般来说,对于 sklearn,流程是:

  1. 使用一些矢量化器将您的字符串数据转换为数值,例如 TfIDF、count 等
  2. 适应和转变
  3. 将其传递给您选择的分类器进行训练/拟合。

您没有提及您的数据格式,但如果它是带有一些行的 csv 文件,则流程可能是:

  1. 阅读每一行文本
  2. 预处理,如删除停用词等。
  3. raw_data_list = [row1,row2,row...]
  4. 矢量化器 = TfidfVectorizer()
  5. x_transformed = vectorizer.fit_transform(raw_data_list)
  6. x_transformed 可以传递给分类器的拟合/训练函数。

一旦你训练了分类器,你就可以调用 predict 来获取新数据。请记住,在将新数据传递给 classif.predict 之前,将新数据转换为与您使用上述使用和拟合的矢量化器进行训练的数据相同的格式。

于 2013-10-30T04:14:15.053 回答