Создание функции конвейера для нескольких категориальных переменных в sklearn - PullRequest
0 голосов
/ 03 апреля 2020

Я новичок в sklearn для Python.

Я хочу создать конвейер, который объединит мои числовые и категориальные преобразования, используя FeatureUnion ()

Мой набор данных diamonds выглядит следующим образом :

    carat   cut color   clarity depth   table   price   x   y   z
0   0.23    Ideal   E   SI2 61.5    55.0    326 3.95    3.98    2.43
1   0.21    Premium E   SI1 59.8    61.0    326 3.89    3.84    2.31
2   0.23    Good    E   VS1 56.9    65.0    327 4.05    4.07    2.31
3   0.29    Premium I   VS2 62.4    58.0    334 4.20    4.23    2.63
4   0.31    Good    J   SI2 63.3    58.0    335 4.34    4.35    2.75

и мой код для конвейера выглядит так:

from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import LabelEncoder
from sklearn.pipeline import FeatureUnion
import numpy as np

from sklearn.preprocessing import RobustScaler

num_attribs = diamonds.select_dtypes(include= np.number).columns.tolist()
cat_attribs = diamonds.select_dtypes(include=np.object).columns.tolist()

num_pipeline = Pipeline([
    ('selector', ColumnTransformer(num_attribs)),
    ('imputer', SimpleImputer(strategy="median")),
    ('std_scaler', StandardScaler()),

])

cat_pipeline = Pipeline([
    ('selector', ColumnTransformer(cat_attribs)),
    ('label_encoder', LabelEncoder())
])

full_pipeline = FeatureUnion(transformer_list=[
    ("num_pipeline", num_pipeline),
    ("cat_pipeline", cat_pipeline)
])

diamonds_prepared = full_pipeline.fit_transform(diamonds)

Однако я получаю это сообщение:

ValueError: not enough values to unpack (expected 3, got 1)

Я думаю, что я пытаюсь сделать несколько преобразований за один шаг в cat_pipeline. Я успешно создал конвейер для категориальных категорий, но его нет в функции

diamonds_cat = diamonds.select_dtypes(include=np.object)
diamonds_cat.apply(LabelEncoder().fit_transform)

Я хотел бы поместить этот код в мою cat_pipeline и найти способ заменить строку label_encoder

cat_pipeline = Pipeline([
    ('selector', ColumnTransformer(cat_attribs)),
    ('label_encoder', LabelEncoder())
])

Спасибо за помощь!

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