如何将 LabelEncoder 应用于 Dask DataFrame 以对分类值进行编码
How to apply LabelEncoder to a Dask DataFrame to Encode the Categorical Values
我有一个 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 中的分类数据的正确方法。提前致谢。
在 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
我有一个 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 中的分类数据的正确方法。提前致谢。
在 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