#python #pandas #machine-learning #scikit-learn
#python #pandas #машинное обучение #scikit-learn
Вопрос:
Может понадобиться некоторая помощь с этим. У меня есть pd.DataFrame со столбцом текста, столбцом категории и целевым столбцом. Я хочу запустить модель классификатора для векторизованного текста, достаточно просто, но я хочу включить категорию в модель.
Я хочу использовать конвейер, чтобы я мог тестировать различные векторизаторы и параметры в GridSearchCV. Мне не удалось успешно создать конвейер с Countvectorizer текста и категории. Я использовал OneHotEncoder только для столбца category.
Я работаю над гораздо большим набором данных, но это предпосылка.
Вот пример df:
df = pd.DataFrame({
'favorite_color':['blue green red','green green blue','red blue red',
'green blue blue','blue red blue'],
'Cat': ['a','b','b','c','a'],
'target':[1,0,1,0,1]})
Я хочу векторизовать «любимый цвет» и включить «Cat» в качестве включенной функции, а «target» — это y. Я использую Ridgeclassifier для наполнителя. Я планирую запустить GridSearchCV на разных моделях.
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
categorical_preprocessing = Pipeline([('ohe', OneHotEncoder())])
text_preprocessing = Pipeline([('Vect', CountVectorizer())])
preprocess = ColumnTransformer([
('categorical_preprocessing', categorical_preprocessing, ['Cat']),
('text_preprocessing', text_preprocessing, ['favorite_color'])
])
pipeline = Pipeline([
('preprocess', preprocess),
('rcf', RidgeClassifier())
])
df_features = df[['favorite_color','Cat']]
df_target = df['target']
pipeline.fit(df_features, df_target)
Возвращенная ошибка
ValueError: blocks[0,:] has incompatible row dimensions. Got blocks[0,1].shape[0] == 1, expected 5.
Только для OneHotEncoder я использую это:
ohe = OneHotEncoder()
X = ohe.fit_transform(df.Cat.values.reshape(-1,1))
X
Я использовал этот сайт для примеров здесь
Любая помощь всегда приветствуется!
Спасибо,
Ответ №1:
Проблема в favorite_color
столбце. Чтобы исправить это, вам нужно передать text_preprocessing
имя столбца, но не массива:
preprocess = ColumnTransformer([('categorical_preprocessing', categorical_preprocessing, ['Cat']),
('text_preprocessing', text_preprocessing, 'favorite_color')])