Source code for shapiq.approximator.sparse.spex

"""SPEX approximator for sparse higher-order interactions."""

from __future__ import annotations

from typing import Literal

from .base import Sparse, ValidSparseIndices


[docs] class SPEX(Sparse): """SPEX (SParse EXplainer) via Fourier transform sampling. An approximator for cardinal interaction indices using Fourier transform sampling to efficiently compute sparse higher-order interactions. SPEX is presented in :cite:t:`Kang.2025`. """ def __init__( self, *, n: int, max_order: int = 2, index: ValidSparseIndices = "k-SII", top_order: bool = False, random_state: int | None = None, decoder_type: Literal["soft", "hard"] = "soft", degree_parameter: int = 5, ) -> None: """Initialize the SPEX approximator. Args: n: Number of players (features). max_order: Maximum interaction order to consider. index: The Interaction index to use. All indices supported by shapiq's :class:`~shapiq.game_theory.moebius_converter.MoebiusConverter` are supported. top_order: If ``True``, only reports interactions of exactly order ``max_order``. Otherwise, reports all interactions up to order ``max_order``. Defaults to ``False``. random_state: Seed for random number generator. Defaults to ``None``. decoder_type: Type of decoder to use, either "soft" or "hard". Defaults to "soft". degree_parameter: A parameter that controls the maximum degree of the interactions to extract during execution of the algorithm. Note that this is a soft limit, and in practice, the algorithm may extract interactions of any degree. We typically find that there is little value going beyond ``5``. Defaults to ``5``. Note that increasing this parameter will need more ``budget`` in the :meth:`approximate` method. """ super().__init__( n=n, max_order=max_order, index=index, top_order=top_order, random_state=random_state, transform_type="fourier", decoder_type=decoder_type, degree_parameter=degree_parameter, )