yobx.sklearn.preprocessing.quantile_transformer#

yobx.sklearn.preprocessing.quantile_transformer.sklearn_quantile_transformer(g: GraphBuilderExtendedProtocol, sts: Dict, outputs: List[str], estimator: QuantileTransformer, X: str, name: str = 'quantile_transformer') str[source]#

Converts a sklearn.preprocessing.QuantileTransformer into ONNX.

The transformation maps each feature to a uniform or normal distribution using piecewise linear interpolation through the fitted quantile values.

X  ──interp(quantiles_, references_)──►  uniform [0,1]
                                            │
                      output_distribution='uniform'? ──► output
                                            │
                      output_distribution='normal'
                                            │
                                        ▼  ndtri  ▼
                                  ──Clip(clip_min, clip_max)──► output

Interpolation follows sklearn exactly: for each feature j the forward transform computes the bidirectional average

0.5 · (interp(x, q_j, r) - interp(-x, -q_j_rev, -r_rev))

which correctly handles tied quantile values (repeated feature values in the training data).

Normal distribution output uses Acklam’s rational-function approximation of the inverse normal CDF (max error ≈ 1.15 x 10⁻⁹).

Minimum opset requirements:

  • opset ≥ 13 - ReduceSum with axes as input tensor

Parameters:
  • g – the graph builder to add nodes to

  • sts – shapes defined by scikit-learn

  • estimator – a fitted QuantileTransformer

  • outputs – desired output names

  • X – input name (shape (N, F))

  • name – prefix name for the added nodes

Returns:

output name