带有 tfidf 和计数矢量化器的 gridsearchcv
gridsearchcv with tfidf and count vectorizer
我想用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 与 use_idf=False 和 normalize=None 的 TfidfVectorizer 相同。如果 GridSearchCV 给出这些参数的最佳结果,那么 CountVectorizer 是最佳选择。对吗?
提前谢谢你:)
一旦您在 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 调参。是否也可以使用 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 与 use_idf=False 和 normalize=None 的 TfidfVectorizer 相同。如果 GridSearchCV 给出这些参数的最佳结果,那么 CountVectorizer 是最佳选择。对吗?
提前谢谢你:)
一旦您在 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)