yobx.sklearn.cluster.affinity_propagation#

yobx.sklearn.cluster.affinity_propagation.sklearn_affinity_propagation(g: GraphBuilderExtendedProtocol, sts: Dict, outputs: List[str], estimator: AffinityPropagation, X: str, name: str = 'affinity_propagation') str | Tuple[str, str][source]#

Converts a sklearn.cluster.AffinityPropagation into ONNX.

The converter produces two outputs: the predicted cluster labels (equivalent to predict()) and the Euclidean distances from each sample to every cluster centre.

The predict method of AffinityPropagation assigns each sample to the nearest cluster centre using Euclidean distance, which is reproduced here via the identity:

||x - c||² = ||x||² - 2·x·cᵀ + ||c||²

Full graph structure:

X (N,F)
  │
  ├──Mul──ReduceSum(axis=1, keepdims=1)──────────────────────────────► x_sq (N,1)
  │                                                                         │
  └──MatMul(centersᵀ)────────────────────────────────────────────────► cross (N,K)
                                                                            │
c_sq (1,K) ─────────────────────── Add(x_sq) ─── Sub(Mul(2,cross)) ──► sq_dists (N,K)
                                                                            │
                                           Sqrt ──────────────────────► distances (N,K)
                                                                            │
                                       ArgMin(axis=1) ─────────────────► labels (N,)
Parameters:
  • g – the graph builder to add nodes to

  • sts – shapes defined by scikit-learn

  • estimator – a fitted AffinityPropagation

  • outputs – desired output names; outputs[0] receives the cluster labels and outputs[1] (if present) receives the distances matrix

  • X – input tensor name

  • name – prefix names for the added nodes

Returns:

tuple (labels, distances) when two outputs are requested, otherwise just labels