Source code for moosefs.merging_strategies.l2_norm_merger

import numpy as np

from ..core.feature import Feature
from .base_merger import MergingStrategy


[docs] class L2NormMerger(MergingStrategy): """Rank-based merging using the L2-norm (RMS) of scores.""" name = "L2Norm"
[docs] def __init__(self, **kwargs) -> None: super().__init__("rank-based") self.kwargs = kwargs
[docs] def merge( self, subsets: list, num_features_to_select: int, **kwargs, ) -> list: """Return the top‑k feature names after L2-norm aggregation. Args: subsets: Feature lists (one list per selector). num_features_to_select: Number of names to return. Returns: Feature names sorted by aggregated L2 score. """ self._validate_input(subsets) if len(subsets) == 1: return [f.name for f in subsets[0]][:num_features_to_select] feature_names = [f.name for f in subsets[0]] scores = np.array([[f.score for f in s] for s in subsets]).T # Euclidean norm (root-mean-square) across selectors scores_merged = np.linalg.norm(scores, ord=2, axis=1) sorted_names = [ feature_names[i] for i in np.argsort(-scores_merged, kind="stable") ] return sorted_names[:num_features_to_select]