【问题标题】:gridsearchcv with tfidf and count vectorizer带有 tfidf 和计数矢量化器的 gridsearchcv
【发布时间】:2021-01-23 06:29:40
【问题描述】:

我想使用 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 是最佳选择。对吗?

提前谢谢你:)

【问题讨论】:

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


    【解决方案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)
    

    【讨论】:

    • 只是好奇:这与在两个不同的管道上安装 GridSearchCV 有何不同?
    • 嗯,这确实会有 2 个不同的参数网格。我认为拥有一个单一的管道更清洁,因为有这种可能性@anddt
    • 当然,想知道这是否有任何实际意义。
    • 嗨,我只是想实施解决方案。由于我还包括带有 SelectK 的特征选择和我的分类器的几个参数,导致 4608000 拟合 -> 所以我的程序崩溃了。但除此之外,该解决方案对我有用。谢谢
    猜你喜欢
    • 2020-05-07
    • 2018-06-04
    • 2021-03-24
    • 2017-12-11
    • 2019-06-09
    • 2015-04-15
    • 2018-06-17
    • 2020-07-14
    • 2021-02-03
    相关资源
    最近更新 更多