Как применить LabelEncoder к Dask DataFrame для кодирования категориальных значений
У меня есть Dask Data Frame, который состоит из категориальных данных и числовых (float и int) данных. Когда я пытаюсь LabelEncode категориальных столбцов, используя код ниже, я получаю сообщение об ошибке.
from dask_ml.preprocessing import LabelEncoder, Categorizer
encoder = LabelEncoder()
encoded = encoder.fit_transform(train_X.values)
Ошибка в следующем:
ValueError: bad input shape (36862367, 15)
Кроме того, я попробовал другой подход к этому:
from sklearn.externals.joblib import parallel_backend
with parallel_backend('dask'):
from sklearn.pipeline import make_pipeline
pipe = make_pipeline(
Categorizer(), LabelEncoder())
pipe.fit(train_X)
pipe.transform(train_X)
И это дает мне новую ошибку:
TypeError: fit() takes 2 positional arguments but 3 were given
Может ли кто-нибудь посоветовать мне, как правильно применять кодировку к категориальным данным в Dask DataFrame. Заранее спасибо.
1 ответ
Решение
В scikit-learn / dask-ml LabelEncoder преобразует 1-D вход. Таким образом, вы будете использовать его в серии pandas / dask, а не в DataFrame.
>>> import dask.dataframe as dd
>>> import pandas as pd
>>> data = dd.from_pandas(pd.Series(['a', 'a', 'b'], dtype='category'),
... npartitions=2)
>>> le.fit_transform(data)
dask.array<values, shape=(nan,), dtype=int8, chunksize=(nan,)>
>>> le.fit_transform(data).compute()
array([0, 0, 1], dtype=int8)