2013-05-08 66 views
7

是否可以在scikit-learn中調整嵌套管道的參數?例如:如何在scikit-learn中通過GridSearchCV調整嵌套管道的參數?

svm = Pipeline([ 
    ('chi2', SelectKBest(chi2)), 
    ('cls', LinearSVC(class_weight='auto')) 
]) 

classifier = Pipeline([ 
    ('vectorizer', TfIdfVectorizer()), 
    ('ova_svm', OneVsRestClassifier(svm)) 
}) 

parameters = ? 

GridSearchCV(classifier, parameters) 

如果不可能直接做到這一點,可能是一種解決方法?

回答

8

scikit-learn對此有一個雙下劃線符號,as exemplified here。它的工作原理遞歸併延伸至OneVsRestClassifier,需要提醒的是底層的估計必須明確地稱呼爲__estimator

parameters = {'ova_svm__estimator__cls__C': [1, 10, 100], 
       'ova_svm__estimator__chi2_k': [200, 500, 1000]} 
5

對於您所創建,你可以得到的參數列表與他們的標籤如下估計。

import pprint as pp 

pp.pprint(sorted(classifier.get_params().keys())) 

[ 'ova_svm', 'ova_svm__estimator', 'ova_svm__estimator__chi2', 'ova_svm__estimator__chi2__k', 'ova_svm__estimator__chi2__score_func', 'ova_svm__estimator__cls', 'ova_svm__estimator__cls__C', 'ova_svm__estimator__cls__class_weight', 'ova_svm__estimator__cls__dual' , 'ova_svm__estimator__cls__fit_intercept', 'ova_svm__estimator__cls__intercept_scaling', 'ova_svm__estimator__cls__loss', 'ova_svm__estimator__cls__max_iter', 「ova_svm__estimator__c ls__multi_class', 'ova_svm__estimator__cls__penalty', 'ova_svm__estimator__cls__random_state', 'ova_svm__estimator__cls__tol', 'ova_svm__estimator__cls__verbose', 'ova_svm__estimator__steps', 'ova_svm__n_jobs', '步驟', '矢量化', 'vectorizer__analyzer', 'vectorizer__binary', ' vectorizer__decode_error ' 'vectorizer__dtype', 'vectorizer__encoding', 'vectorizer__input', 'vectorizer__lowercase', 'vectorizer__max_df', 'vectorizer__max_features', 'vectorizer__min_df', 'vectorizer__ngram_range', 'vectorizer__norm', 'vectorizer__preprocessor',' vectorizer__smooth_idf ', 'vectorizer__stop_words','vectorizer__strip _accents', 'vectorizer__sublinear_tf', 'vectorizer__token_pattern', 'vectorizer__tokenizer', 'vectorizer__use_idf', 'vectorizer__vocabulary']

從這個列表中,那麼你可以設置你想要做一個GridSearchCV的參數。