Я новичок в 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())
])
Спасибо за помощь!