如何在无监督聚类期间在sklearn中选择TfidfVectorizer中的参数

时间:2017-05-19 09:26:48

标签: python scikit-learn nlp tf-idf tfidfvectorizer

TfidfVectorizer提供了一种简单的编码方式。将文本转换为向量。

我的问题是如何为参数选择合适的值,例如min_df,max_features,smooth_idf,sublinear_tf?

更新

也许我应该在这个问题上提出更多细节:

如果我使用大量文本进行无监督聚类,该怎么办?而且我没有任何标签和文字。我不知道可能有多少个集群(这实际上是我想要弄清楚的)

1 个答案:

答案 0 :(得分:6)

例如,如果您在分类任务中使用这些向量,则可以改变这些参数(当然还有分类器的参数),并查看哪些值可以提供最佳性能。

您可以使用GridSearchCV和Pipeline对象轻松地在sklearn中执行此操作

pipeline = Pipeline([
    ('tfidf', TfidfVectorizer(stop_words=stop_words)),
    ('clf', OneVsRestClassifier(MultinomialNB(
        fit_prior=True, class_prior=None))),
])
parameters = {
    'tfidf__max_df': (0.25, 0.5, 0.75),
    'tfidf__ngram_range': [(1, 1), (1, 2), (1, 3)],
    'clf__estimator__alpha': (1e-2, 1e-3)
}

grid_search_tune = GridSearchCV(pipeline, parameters, cv=2, n_jobs=2, verbose=3)
grid_search_tune.fit(train_x, train_y)

print("Best parameters set:")
print grid_search_tune.best_estimator_.steps