Как применить 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)

https://ml.dask.org/modules/api.html

Другие вопросы по тегам