Я пытаюсь использовать несколько столбцов функций в GridSearch с Pipeline. Итак, я передаю два столбца, для которых хочу выполнить TfidfVectorizer, но у меня возникают проблемы при запуске GridSearch.
Xs = training_data.loc[:,['text','path_contents']]
y = training_data['class_recoded'].astype('int32')
for col in Xs:
print Xs[col].shape
print Xs.shape
print y.shape
# (2464L,)
# (2464L,)
# (2464, 2)
# (2464L,)
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import GridSearchCV
pipeline = Pipeline([('vectorizer', TfidfVectorizer(encoding="cp1252", stop_words="english")),
('nb', MultinomialNB())])
parameters = {
'vectorizer__max_df': (0.48, 0.5, 0.52,),
'vectorizer__max_features': (None, 8500, 9000, 9500),
'vectorizer__ngram_range': ((1, 3), (1, 4), (1, 5)),
'vectorizer__use_idf': (False, True)
}
if __name__ == "__main__":
grid_search = GridSearchCV(pipeline, parameters, n_jobs=-1, verbose=2)
grid_search.fit(Xs, y) # <- error thrown here
print("Best score: {0}".format(grid_search.best_score_))
print("Best parameters set:")
best_parameters = grid_search.best_estimator_.get_params()
for param_name in sorted(list(parameters.keys())):
print("\t{0}: {1}".format(param_name, best_parameters[param_name]))
Ошибка: ValueError: найдены входные переменные с несовместимым количеством выборок: [2, 1642]
Я прочитал аналогичную ошибку здесь и здесь, и я попробовал оба вопроса предложения, но безрезультатно.
Я попытался выбрать свои данные по-другому:
features = ['text', 'path_contents']
Xs = training_data[features]
Вместо этого я попытался использовать .values
, как было предложено здесь, например:
grid_search.fit(Xs.values, y.values)
но это дало мне следующую ошибку:
AttributeError: объект «numpy.ndarray» не имеет атрибута «нижний»
Так что же происходит? Я не уверен, как продолжить с этого.
TfidfVectorizer.fit()
нужен итерируемый объект, элементы которого являются строками, ноXs
содержит два столбца, поэтому каждый элементXs
является объектом массива, и когдаTfidfVectorizer
вызывает методlower()
элементов вXs
, он вызывает AttributeError: объект 'numpy.ndarray' не имеет атрибут «нижний». Итак, вопрос в том, почему вы передаете два столбца вTfidfVectorizer
. - person HYRY   schedule 27.05.2017