Как передать вес при использовании Sklearn GridSearchCV с конвейером - PullRequest
0 голосов
/ 14 мая 2018

Я работаю над моделью классификации текста и использую Pipeline в сочетании с GridSearch Cross Validation. Фрагменты кода ниже:

count_vec=CountVectorizer(ngram_range=(1,2),stop_words=Stopwords_X,min_df=0.01)
TFIDF_Transformer=TfidfTransformer(sublinear_tf=True,norm='l2')

my_pipeline=Pipeline([('Count_Vectorizer',count_vec),
                    ('TF_IDF',TFIDF_Transformer),
                    ('MultiNomial_NB',MultinomialNB())])

param_grid={'Count_Vectorizer__ngram_range':[(1,1),(1,2),(2,2)],
               'Count_Vectorizer__stop_words':[Stopwords_X,stopwords],
               'Count_Vectorizer__min_df':[0.001,0.005,0.01],
               'TF_IDF__sublinear_tf':[True,False],
               'TF_IDF__norm':['l2'],
               'TF_IDF__smooth_idf':[True,False],
               'MultiNomial_NB__alpha':[0.2,0.4,0.5,0.6],
               'MultiNomial_NB__fit_prior':[True,False]}

# Grid Search CV with pipeline
model=GridSearchCV(estimator=my_pipeline,param_grid=param_grid,
                   scoring=scoring,cv=4,verbose=1,refit=False)

Однако , поскольку данные сильно разбалансированы, я хочу передать весовые коэффициенты в классификатор MultinomialNB в конвейере. Я знаю, что могу передавать веса элементам в конвейере (как показано ниже):

model.fit(Data_Labeled['Clean-Merged-Final'], 
          Data_Labeled['Labels'],MultiNomial_NB__sample_weight=weights)

У меня вопрос: как это компилируется без ошибки формы? , поскольку веса передаются только конечному элементу (классификатор MultiNomial_NB) в конвейере, в то время как CV разделяет фид X / Y, поступающий в конвейер.

1 Ответ

0 голосов
/ 14 мая 2018

GridSearchCV обрабатывает соответствующее разбиение sample_weights в соответствии с итератором перекрестной проверки.

GridSearchCV вызывает метод _fit_and_score() для внутренних данных и передает индексы для данных обучения. До сих пор fit_params для всех данных. Теперь эта функция в свою очередь вызывает функцию _index_param_value, которая обрабатывает разбиение sample_weight (или других fit_params) в этой строке:

     ...
     return safe_indexing(v, indices)
     ...

Это обсуждалось в следующих вопросах:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...