在适应训练数据后,tfidf如何转换测试数据?

时间:2019-06-20 06:31:10

标签: python scikit-learn tfidfvectorizer

我正在使用以下代码:

pipeline = Pipeline([('vect', 
                      TfidfVectorizer( ngram_range=(1,2),
                                       stop_words="english", 
                                       sublinear_tf=True ,
                                       use_idf=True, 
                                       norm='l2' )),
                     ('reduce_dim',
                      SelectPercentile(f_classif, 90)),
                     ('clf', 
                      SVC(kernel='linear',C=1.0, 
                          probability=True, max_iter=70000, 
                          class_weight='balanced'))])

model = pipeline.fit(X_train,y_train)
model.predict(X_test)

x=vectorizer.fit_transform(X_train_text)
y=vectorizer.transform(X_test_text)

根据我的理解,pipeline.fit()使tfidf适合火车数据,并且在model.predict()上调用X_test时,它只会基于拟合的火车数据进行tfidf变换。

由于tf idf通过获取文档和语料库中单词的出现频率而起作用,所以我想知道.fit_transform.transform函数的底层会发生什么。

2 个答案:

答案 0 :(得分:1)

1)非常接近您的问题,您可以在这里找到:What is the difference between TfidfVectorizer.fit_transfrom and tfidf.transform?

2)tfidf转换是在fit-transform内部完成的,predict在这里不对应于tfidf矢量化器,因为它不具有这种功能,它是SVC的方法。

答案 1 :(得分:1)

Herefit()fit_transform()的基本文档。

您对工作的理解是正确的。测试时,为tf-idf Vectorizer设置参数。这些参数将存储起来,以后用于转换测试数据。

  • 训练数据-fit_transform()
  • 测试数据-transform()

如果要查看内部工作原理,则应该同样查看source code