1

我有一个 Dask 数据框,它由分类数据和数字(浮点数和整数)数据组成。当我尝试使用下面的代码对分类列进行 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 中的分类数据的正确方法。提前致谢。

4

1 回答 1

1

在 scikit-learn / dask-ml 中,LabelEncoder 转换一维输入。所以你会在 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#dask_ml.preprocessing.LabelEncoder

于 2019-07-25T21:20:18.113 回答