如何使用TfIdfVectorizer使用SciKitLearn对文档进行分类?

时间:2013-10-29 23:40:49

标签: python machine-learning scikit-learn

以下示例显示了如何使用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)

回顾一下: 我怎样才能使用自己的语料库而不是20个新组,但这里使用的方法相同? 那么如何使用我的TFIDFVectorized语料库来训练分类器呢?

谢谢!

2 个答案:

答案 0 :(得分:8)

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

  1. 适合你的训练数据的矢量化器并将其保存在一些变量中,我们称之为 tfidf
  2. 转换训练数据(没有标签,只是文字)通过data = tfidf.transform(...)
  3. 使用some_classifier.fit(数据,标签)拟合模型(分类器),其中标签的顺序与数据中的documnents的顺序相同
  4. 在测试期间,您对新数据使用tfidf.transform(...),并检查模型的预测

答案 1 :(得分:2)

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

  1. 使用某些矢量图将您的字符串数据转换为数字值,例如TfIDF,count etcs
  2. 适合和转换
  3. 将其传递给您选择的分类器。
  4. 您没有提及您的数据格式,但如果它是带有某些行的csv文件,则流程可能是:

    1. 阅读每一行文字
    2. 预处理,如删除停用词等。
    3. raw_data_list = [row1,row2,rown ...]
    4. vectorizer = TfidfVectorizer()
    5. x_transformed = vectorizer.fit_transform(raw_data_list)
    6. x_transformed可以传递给拟合/训练分类器的功能。
    7. 一旦你训练了分类器,就可以为新数据调用预测。 记得在将新数据传递给classif.predict之前,使用上面使用过的和适合的矢量化器将新数据转换为与您训练过的数据相同的格式。