【问题标题】:How do I classify documents with SciKitLearn using TfIdfVectorizer?如何使用 TfIdfVectorizer 使用 SciKitLearn 对文档进行分类?
【发布时间】:2013-11-01 07:15:44
【问题描述】:

以下示例展示了如何使用 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 语料库来训练分类器?

谢谢!

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      您没有提及您的数据格式,但如果它是带有一些行的 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 可以传递给分类器的 fit/train 函数。

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

      【讨论】:

      • 我有一个包含 1500 个文档的数据库,每个文档都有预先标记。所以基本上我可以把它变成一个元组、字典等等的数组。
      • 我仍然不明白如何使用 tfidfvectorizer 将文档的标签传递给分类器?
      • 标签不是表示的一部分,分类器实现“fit(X,Y)”方法,其中X-data表示,Y-labels
      • @lejlot 所以基本上我有我的转换数据,以及一个与我的 raw_data_list 顺序相同的标签数组?这样每个文档都对应一个标签?
      • @Yoni ,是的,数据和标签的排序是你给模型的唯一对应关系。关于矢量化器 - 你应该 保存 一旦你 fit 训练语料库中的数据(到某个变量),然后使用该对象转换任何新数据
      猜你喜欢
      • 1970-01-01
      • 2017-02-27
      • 2011-07-29
      • 2017-04-11
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      • 2015-11-20
      相关资源
      最近更新 更多