scikit-adaptation / skada

Domain adaptation toolbox compatible with scikit-learn and pytorch
https://scikit-adaptation.github.io/
BSD 3-Clause "New" or "Revised" License
52 stars 16 forks source link

[MRG] Fix Circular validation for NO_DA_TARGET_ONLY #201

Closed YanisLalou closed 1 month ago

YanisLalou commented 1 month ago

Before when using the Circular validation while using the solver NO_DA_TARGET_ONLY:

Traceback (most recent call last):
  File "/Users/yanislalou/Documents/CMAP/skada_test_venv/lib/python3.9/site-packages/sklearn/metrics/_scorer.py", line 141, in __call__
    score = scorer(estimator, *args, **routed_params.get(name).score)
  File "/Users/yanislalou/Documents/CMAP/skada_test_venv/lib/python3.9/site-packages/skada/metrics.py", line 43, in __call__
    return self._score(estimator, X, y, sample_domain=sample_domain, **params)
  File "/Users/yanislalou/Documents/CMAP/skada_test_venv/lib/python3.9/site-packages/skada/metrics.py", line 586, in _score
    backward_estimator.fit(X, backward_y, sample_domain=backward_sample_domain)
  File "/Users/yanislalou/Documents/CMAP/skada_test_venv/lib/python3.9/site-packages/sklearn/base.py", line 1351, in wrapper
    return fit_method(estimator, *args, **kwargs)
  File "/Users/yanislalou/Documents/CMAP/skada_test_venv/lib/python3.9/site-packages/sklearn/pipeline.py", line 475, in fit
    self._final_estimator.fit(Xt, y, **last_step_params["fit"])
  File "/Users/yanislalou/Documents/CMAP/skada_test_venv/lib/python3.9/site-packages/skada/base.py", line 543, in fit
    return self._pre_filter('fit', X_container, y=y, **params)
  File "/Users/yanislalou/Documents/CMAP/skada_test_venv/lib/python3.9/site-packages/skada/base.py", line 539, in _pre_filter
    return getattr(super(), method_name)(X_container.merge_in((X_input, y, params)), y, **params)
  File "/Users/yanislalou/Documents/CMAP/skada_test_venv/lib/python3.9/site-packages/skada/base.py", line 390, in fit
    self._fit('fit', X_container, y, **params)
  File "/Users/yanislalou/Documents/CMAP/skada_test_venv/lib/python3.9/site-packages/skada/base.py", line 413, in _fit
    output = getattr(estimator, routing_method)(X, y, **routed_params)
  File "/Users/yanislalou/Documents/CMAP/skada-bench/benchmark_utils/base_solver.py", line 47, in fit
    self.estimator_.fit(X, y, sample_weight=sample_weight, **fit_params)
  File "/Users/yanislalou/Documents/CMAP/skada_test_venv/lib/python3.9/site-packages/sklearn/base.py", line 1351, in wrapper
    return fit_method(estimator, *args, **kwargs)
  File "/Users/yanislalou/Documents/CMAP/skada_test_venv/lib/python3.9/site-packages/sklearn/linear_model/_logistic.py", line 1201, in fit
    X, y = self._validate_data(
  File "/Users/yanislalou/Documents/CMAP/skada_test_venv/lib/python3.9/site-packages/sklearn/base.py", line 650, in _validate_data
    X, y = check_X_y(X, y, **check_params)
  File "/Users/yanislalou/Documents/CMAP/skada_test_venv/lib/python3.9/site-packages/sklearn/utils/validation.py", line 1192, in check_X_y
    X = check_array(
  File "/Users/yanislalou/Documents/CMAP/skada_test_venv/lib/python3.9/site-packages/sklearn/utils/validation.py", line 1026, in check_array
    raise ValueError(
ValueError: Found array with 0 sample(s) (shape=(0, 30)) while a minimum of 1 is required by LogisticRegression.

The problem was the target labels which were set to -1. However when using the SelectTarget selector we need to have unmasked labels.

kachayev commented 1 month ago

Ready for re-review? @YanisLalou