2013-05-08 3 views
7

È possibile ottimizzare i parametri delle pipeline nidificate in scikit-learn? Es .:Come ottimizzare i parametri delle pipeline nidificate di GridSearchCV in scikit-learn?

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

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

parameters = ? 

GridSearchCV(classifier, parameters) 

Se non è possibile farlo direttamente, quello che potrebbe essere una soluzione?

risposta

8

scikit-learn ha una doppia notazione di sottolineatura per questo, as exemplified here. Funziona in modo ricorsivo e si estende a OneVsRestClassifier, con l'avvertenza che lo stimatore di fondo deve essere affrontato in modo esplicito come __estimator:

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

Per lo stimatore che si è creato è possibile ottenere la lista dei parametri con i loro tag come segue.

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', 'passi', 'vectorizer', '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']

Da questo elenco è possibile impostare i parametri che si desidera fare un GridSearchCV su.