Конвейер Sklearn с CountVectorizer и category в фрейме данных Pandas

#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')])