Как я могу использовать FeatureUnion в scikit learn, так что Gridsearch может обрабатывать его части по желанию?scikit-learn FeatureUnion gridsearch над подмножествами функций
Код ниже работает и устанавливает FeatureUnion с TfidfVectorizer для слов и TfidfVectorizer для символов.
При выполнении Gridsearch в дополнение к тестированию заданного пространства параметров я также хотел бы протестировать только «vect__wordvect» с его параметром ngram_range (без наличия TfidfVectorizer для символов), а также только «vect__lettervect» с нижний регистр True и False, другой TfidfVectorizer отключен.
EDIT: полный пример кода, основанный на предположении maxymoo.
Как это можно сделать?
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.pipeline import Pipeline, FeatureUnion
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.grid_search import GridSearchCV
from sklearn.datasets import fetch_20newsgroups
# setup the featureunion
wordvect = TfidfVectorizer(analyzer='word')
lettervect = CountVectorizer(analyzer='char')
featureunionvect = FeatureUnion([("lettervect", lettervect), ("wordvect", wordvect)])
# setup the pipeline
classifier = LogisticRegression(class_weight='balanced')
pipeline = Pipeline([('vect', featureunionvect), ('classifier', classifier)])
# gridsearch parameters
parameters = {
'vect__wordvect__ngram_range': [(1, 1), (1, 2)], # commenting out these two lines
'vect__lettervect__lowercase': [True, False], # runs, but there is no parameterization anymore
'vect__transformer_list': [[('wordvect', wordvect)],
[('lettervect', lettervect)],
[('wordvect', wordvect), ('lettervect', lettervect)]]}
gs_clf = GridSearchCV(pipeline, parameters)
# data
newsgroups_train = fetch_20newsgroups(subset='train', categories=['alt.atheism', 'sci.space'])
# gridsearch CV
gs_clf = GridSearchCV(pipeline, parameters)
gs_clf = gs_clf.fit(newsgroups_train.data, newsgroups_train.target)
for score in gs_clf.grid_scores_:
print "gridsearch scores: ", score
Отсутствует после vect__transformer_list. Даже после его исправления я получаю: 'vect__transformer_list': [[('wordvec': wordvec)], ^^ SyntaxError: недействительный синтаксис – tkja
Документация по transformer_list довольно разрежена, я не понимаю, как исправить/скорректировать код на scikit learn 0.17.1 – tkja
Извините, в моем ответе было много странных опечаток, я исправил его, теперь он работает? – maxymoo