Learns a covariate shift estimator for a given dataset via a kernel method using the Relative Unconstrained Least-Squares Importance Fitting algorithm [1].
The RULSIF kernel method estimates the relative ratio of probability densities
P(X_reference) / (alpha * P(X_reference) + (1 - alpha) * P(X_test))
from samples:
X_test[i] | X_test[i] in R^{d}, with i=1 to X_test{N}
drawn independently from P(X_test)
and samples
X_reference[i] | X_reference[i] in R^{d}, with i=1 to X_reference{N}
drawn independently from P(X_reference)
Using relative density ratios allows the RULSIF method to calculate a divergence score between a reference and test sample.
$ python
>>> import numpy
>>> from shift_detect import rulsif
>>> estimator = RULSIF()
# Acquire training data
>>> X_reference_train = numpy.array([[-327.538995,1060.88410,-5135.11159], \
[-6079.76383,4540.07072, 4683.89186], \
[-519.485848,-65.427245,-460.108594], \
[-102.050993,-486.05520,-373.829956]])
>>> X_test_train = numpy.array([[4968.97172, 3051.50683,-102.050991], \
[-5501.4825,-1951.72530,-44.1323003], \
[2872.91368,-555.026187, 1582.54918], \
[-715.46199,-544.196344,-61.4378131]])
# Train the model
>>> estimator.train(X_reference_train, X_test_train)
# Compare real data using the trained estimator
>>> for (X_reference, X_test) in real_dataset :
>>> divergence_score = estimator.apply(X_reference, X_test)
$ pip install shift-detect
To run the all tests run :
$ pyb run_unit_tests / $ pyb run_integration_tests
or
$ tox
- Relative Density-Ratio Estimation for Robust Distribution Comparison. Makoto Yamada, Taiji Suzuki, Takafumi Kanamori, Hirotaka Hachiya, and Masashi Sugiyama. NIPS, page 594-602. (2011)