带有tfidf和count矢量化器的gridsearchcv

时间:2020-10-08 08:26:33

标签: python machine-learning scikit-learn sentiment-analysis gridsearchcv

我想使用GridSearchCV进行参数调整。是否还可以使用GridSearchCV检查CountVectorizer或TfidfVectorizer效果最佳?我的主意:

pipeline = Pipeline([
           ('vect', TfidfVectorizer()),
           ('clf', SGDClassifier()),
])
parameters = {
'vect__max_df': (0.5, 0.75, 1.0),
'vect__max_features': (None, 5000, 10000, 50000),
'vect__ngram_range': ((1, 1), (1, 2), (1,3),  
'tfidf__use_idf': (True, False),
'tfidf__norm': ('l1', 'l2', None),
'clf__max_iter': (20,),
'clf__alpha': (0.00001, 0.000001),
'clf__penalty': ('l2', 'elasticnet'),
'clf__max_iter': (10, 50, 80),
}

grid_search = GridSearchCV(pipeline, parameters, n_jobs=-1, verbose=1, cv=5)

我的想法:CountVectorizer与TfidfVectorizer相同,但use_idf = False且normalize = None。如果GridSearchCV将此参数作为最佳结果,则CountVectorizer是最佳选择。正确吗?

预先感谢您:)

1 个答案:

答案 0 :(得分:1)

Pipeline中包含给定步骤及其相应名称后,您可以从参数网格访问它,并在网格中添加其他参数或矢量化器。您还可以在单​​个管道中具有网格列表:

from sklearn.feature_extraction.text import CountVectorizer

pipeline = Pipeline([
           ('vect', TfidfVectorizer()),
           ('clf', SGDClassifier()),
])
parameters = [{
    'vect__max_df': (0.5, 0.75, 1.0),
    'vect__max_features': (None, 5000, 10000, 50000),
    'vect__ngram_range': ((1, 1), (1, 2), (1,3),)  
    'tfidf__use_idf': (True, False),
    'tfidf__norm': ('l1', 'l2', None),
    'clf__max_iter': (20,),
    'clf__alpha': (0.00001, 0.000001),
    'clf__penalty': ('l2', 'elasticnet'),
    'clf__max_iter': (10, 50, 80)
},{
    'vect': (CountVectorizer(),)
    # count_vect_params...
    'clf__max_iter': (20,),
    'clf__alpha': (0.00001, 0.000001),
    'clf__penalty': ('l2', 'elasticnet'),
    'clf__max_iter': (10, 50, 80)
}]

grid_search = GridSearchCV(pipeline, parameters)
相关问题