如何使用 Sklearn 的管道参数 tuning/cross-validation?
How do to parameter tuning/cross-validation with Sklearn's pipeline?
我刚刚发现了 Sklearn 的管道功能,我认为这对情绪分析很有用。我按以下方式定义了我的管道:
Pipeline([('vect', CountVectorizer(tokenizer=LemmaTokenizer(),
stop_words='english',
strip_accents='unicode',
max_df=0.5)),
('clf', MultinomialNB())
但是,按照上面的方式定义,我不允许调参。假设我想查看以下 max_dfs=[0,3,0.4,0.5,0.6,0.7] 以及以下 n_gram 范围 = [(1,1), (1,2 ), (2,2), 并使用交叉验证来找到最佳组合。有没有办法在我们的管道外部指定它,以便它知道考虑所有可能的组合?如果是这样,这将如何完成?
非常感谢您的指导和帮助!
您可以使用 set_param
函数为管道中的各个步骤设置参数,并将 key_name 作为 <stepname>__<paramname>
传递(使用双下划线连接)。
这可以与 GridSearchCV 相结合,以确定从给定值
最大化得分函数的参数组合
p = Pipeline([('vect', CountVectorizer(tokenizer=LemmaTokenizer(),
stop_words='english',
strip_accents='unicode',
max_df=0.5)),
('clf', MultinomialNB())
g = GridSearchCV(p,
param_grid={
'vect__max_dfs':[0,3,0.4,0.5,0.6,0.7], 'vect__ngram_range': [(1,1), (1,2), (2,2)]})
g.fit(X, y)
g.best_estimator_
我刚刚发现了 Sklearn 的管道功能,我认为这对情绪分析很有用。我按以下方式定义了我的管道:
Pipeline([('vect', CountVectorizer(tokenizer=LemmaTokenizer(),
stop_words='english',
strip_accents='unicode',
max_df=0.5)),
('clf', MultinomialNB())
但是,按照上面的方式定义,我不允许调参。假设我想查看以下 max_dfs=[0,3,0.4,0.5,0.6,0.7] 以及以下 n_gram 范围 = [(1,1), (1,2 ), (2,2), 并使用交叉验证来找到最佳组合。有没有办法在我们的管道外部指定它,以便它知道考虑所有可能的组合?如果是这样,这将如何完成?
非常感谢您的指导和帮助!
您可以使用 set_param
函数为管道中的各个步骤设置参数,并将 key_name 作为 <stepname>__<paramname>
传递(使用双下划线连接)。
这可以与 GridSearchCV 相结合,以确定从给定值
最大化得分函数的参数组合p = Pipeline([('vect', CountVectorizer(tokenizer=LemmaTokenizer(),
stop_words='english',
strip_accents='unicode',
max_df=0.5)),
('clf', MultinomialNB())
g = GridSearchCV(p,
param_grid={
'vect__max_dfs':[0,3,0.4,0.5,0.6,0.7], 'vect__ngram_range': [(1,1), (1,2), (2,2)]})
g.fit(X, y)
g.best_estimator_