ray.data.预处理器.Normalizer#

class ray.data.preprocessors.Normalizer(columns: List[str], norm='l2')[源代码]#

基类:Preprocessor

将每个样本缩放到单位范数。

这个预处理器通过将每个样本(即行)除以样本的范数来工作。一般公式如下:

\[s' = \frac{s}{\lVert s \rVert_p}\]

其中 \(s\) 是样本,\(s'\) 是变换后的样本,:math:lVert s rVert`,以及 \(p\) 是范数类型。

支持以下规范:

  • “l1” (\(L^1\)):绝对值的和。

  • "l2" (\(L^2\)): 平方值之和的平方根。

  • "max" (\(L^\infty\)):最大值。

示例

>>> import pandas as pd
>>> import ray
>>> from ray.data.preprocessors import Normalizer
>>>
>>> df = pd.DataFrame({"X1": [1, 1], "X2": [1, 0], "X3": [0, 1]})
>>> ds = ray.data.from_pandas(df)  
>>> ds.to_pandas()  
   X1  X2  X3
0   1   1   0
1   1   0   1

第一个样本的 \(L^2\)-范数是 \(\sqrt{2}\),第二个样本的 \(L^2\)-范数是 \(1\)

>>> preprocessor = Normalizer(columns=["X1", "X2"])
>>> preprocessor.fit_transform(ds).to_pandas()  
         X1        X2  X3
0  0.707107  0.707107   0
1  1.000000  0.000000   1

第一个样本的 \(L^1\)-范数是 \(2\),第二个样本的 \(L^1\)-范数是 \(1\)

>>> preprocessor = Normalizer(columns=["X1", "X2"], norm="l1")
>>> preprocessor.fit_transform(ds).to_pandas()  
    X1   X2  X3
0  0.5  0.5   0
1  1.0  0.0   1

两组样本的 \(L^\infty\) 范数均为 \(1\)

>>> preprocessor = Normalizer(columns=["X1", "X2"], norm="max")
>>> preprocessor.fit_transform(ds).to_pandas()  
    X1   X2  X3
0  1.0  1.0   0
1  1.0  0.0   1
参数:
  • columns – 要缩放的列。对于每一行,这些列被缩放到单位范数。

  • norm – 使用的范数。支持的值为 "l1""l2""max"。默认为 "l2"

抛出:

ValueError – 如果 norm 不是 "l1""l2""max"

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

方法

deserialize

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

fit

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

fit_transform

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

preferred_batch_format

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

serialize

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

transform

转换给定的数据集。

transform_batch

转换单个批次的数据。