Hypercontractivity Coefficient
The hypercontractivity coefficient [BG16] of a pair of variables is
It is zero when \(X\) and \(Y\) are independent.
The supremum is often approached only as \(U\) becomes independent of \(X\), where the ratio tends to the squared maximal correlation, a lower bound on \(s^*\) [AGKN13].
Equivalently, \(s^*\) is the least \(\lambda\) for which \(H(Y) - \lambda H(X)\), as a function of the distribution of \(X\), touches its lower convex envelope at \(p(x)\) [AGKN13].
For \(|X| \leq 4\), dit also evaluates this envelope on a grid and takes the best of the resulting bound, the squared maximal correlation, and the direct optimization.
In [1]: from dit.divergences import hypercontractivity_coefficient
In [2]: from dit.example_dists import Xor
In [3]: hypercontractivity_coefficient(Xor(), [[0], [1]])
Out[3]: 0.0
API
- hypercontractivity_coefficient(dist, rvs, bound=None, niter=None)[source]
Computes the hypercontractivity coefficient:
\[s*(X||Y) = max_{U - X - Y} I[U:Y]/I[U:X]\]- Parameters:
dist (Distribution) – The distribution of interest.
rvs (iterable of iterables, len(rvs) == 2) – The variables to compute the hypercontractivity coefficient of. Order is important.
bound (int, None) – An external bound on the size of U. If None, \(|U| <= |X|+1\).
niter (int, None) – The number of basin-hopping steps to perform. If None, use the default.
- Returns:
hc – The hypercontractivity coefficient.
- Return type: