ray.data.预处理器.MultiHotEncoder#

class ray.data.preprocessors.MultiHotEncoder(columns: List[str], *, max_categories: Dict[str, int] | None = None)[源代码]#

基类:Preprocessor

多热编码分类数据。

这个预处理器将每个类别列表替换为一个长度为 \(m\) 的二进制列表,其中 \(m\) 是列中唯一类别的数量或 max_categories 中指定的值。二进制列表的第 \(i\) 个元素为 \(1\) ,如果类别 \(i\) 在输入列表中,否则为 \(0\)

列必须包含可哈希对象或可哈希对象的列表。此外,同一列中不能同时包含这两种类型。

备注

该逻辑类似于 scikit-learn 的 MultiLabelBinarizer

示例

>>> import pandas as pd
>>> import ray
>>> from ray.data.preprocessors import MultiHotEncoder
>>>
>>> df = pd.DataFrame({
...     "name": ["Shaolin Soccer", "Moana", "The Smartest Guys in the Room"],
...     "genre": [
...         ["comedy", "action", "sports"],
...         ["animation", "comedy",  "action"],
...         ["documentary"],
...     ],
... })
>>> ds = ray.data.from_pandas(df)  
>>>
>>> encoder = MultiHotEncoder(columns=["genre"])
>>> encoder.fit_transform(ds).to_pandas()  
                            name            genre
0                 Shaolin Soccer  [1, 0, 1, 0, 1]
1                          Moana  [1, 1, 1, 0, 0]
2  The Smartest Guys in the Room  [0, 0, 0, 1, 0]

如果你指定 max_categories,那么 MultiHotEncoder 只为最频繁的类别创建特征。

>>> encoder = MultiHotEncoder(columns=["genre"], max_categories={"genre": 3})
>>> encoder.fit_transform(ds).to_pandas()  
                            name      genre
0                 Shaolin Soccer  [1, 1, 1]
1                          Moana  [1, 1, 0]
2  The Smartest Guys in the Room  [0, 0, 0]
>>> encoder.stats_  
OrderedDict([('unique_values(genre)', {'comedy': 0, 'action': 1, 'sports': 2})])
参数:
  • columns – 要单独编码的列。

  • max_categories – 每个列创建特征的最大数量。如果未为某一列指定值,则将为该列中的每个唯一类别创建一个特征。

参见

OneHotEncoder

如果你是编码单个类别而不是类别列表,请使用 OneHotEncoder

OrdinalEncoder

如果你的类别是有序的,你可能想使用 OrdinalEncoder

PublicAPI (alpha): 此API处于alpha阶段,可能在稳定之前发生变化。

方法

deserialize

加载通过 self.serialize() 序列化的原始预处理器。

fit

将此预处理器适配到数据集。

fit_transform

将此预处理器适配到数据集,然后转换数据集。

preferred_batch_format

批处理格式提示上游生产者尝试生成最佳块格式。

serialize

返回此预处理器的字符串序列化表示。

transform

转换给定的数据集。

transform_batch

转换单个批次的数据。