Похоже: Конвейер не работает с Label Encoder
Я хотел бы иметь объект, который обрабатывает кодирование меток (в моем случае с LabelEncoder
), преобразование ипредварительный расчет.Для меня важно, что все эти функции могут быть выполнены с помощью только одного объекта .
. Я пытался использовать конвейер следующим образом:
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import LabelEncoder
# mock training dataset
X = np.random.rand(1000, 100)
y = np.concatenate([["label1"] * 300, ["label2"] * 300, ["label3"] * 400])
le = LabelEncoder()
ss = StandardScaler()
clf = MyClassifier()
pl = Pipeline([('encoder', le),
('scaler', ss),
('clf', clf)])
pl.fit(X, y)
, который дает:
File "sklearn/pipeline.py", line 581, in _fit_transform_one
res = transformer.fit_transform(X, y, **fit_params)
TypeError: fit_transform() takes exactly 2 arguments (3 given)
Пояснения:
X
и y
- мой набор данных для обучения, X
- значения, а y
- целевые метки.
X
представляет собой numpy.ndarray
формы (n_sample, n_features) и типа float, значения в диапазоне от 0 до 1.
y
- это numpy.ndarray
формы (n_sample,) и типа string
Я ожидаю, что LabelEncoder
закодирует y
, а не X
.
Мне нужно y
только для MyClassifier
, и мне нужно, чтобы оно кодировалось в целые числа для MyClassifier
для работы.
Посленекоторые мысли и, столкнувшись с ошибкой выше, я чувствую, что было бы наивно думать, что Pipeline
справится с этим.Я понял, что Pipeline
вполне может справиться с моим преобразованием и классификатором вместе, но это была часть кодирования меток, которая потерпит неудачу.
Как правильно достичь того, чего я хочу?Под правильным я подразумеваю сделать что-то, что позволило бы многократное использование и некоторую согласованность с sklearn
.Есть ли в библиотеке sklearn
класс, который делает то, что я хочу?
Я очень удивлен, что не нашел ответа в Интернете, потому что я чувствую, что то, что я делаю, не является чем-то необычным.Я мог бы что-то здесь упустить.