scikit-learn: Scorer not working on ClassifierChain

Describe the bug

ClassifeirChain fails when trying to make scoring predictions. The reason is: ClassifeirChain’s attribute classes_ is a list and not a np.array as the _get_response_values function expects.

Steps/Code to Reproduce

from sklearn.multioutput import ClassifierChain
from sklearn.metrics._scorer import get_scorer
from sklearn.datasets import make_multilabel_classification
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.multioutput import ClassifierChain


X, Y = make_multilabel_classification(n_samples=72, n_classes=3, random_state=0)
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, random_state=0)

base_lr = LogisticRegression(solver='lbfgs', random_state=0)
chain = ClassifierChain(base_lr, order='random', random_state=0)
y_pred = chain.fit(X_train, Y_train).predict(X_test)

print(get_scorer("average_precision")(chain, X_test, Y_test))

Expected Results

No error thrown.

Actual Results

  File "C:\Users\Mavs\Documents\Python\ATOM\test.py", line 204, in <module>
    print(get_scorer("average_precision")(chain, Y_test, y_pred))
  File "C:\Users\Mavs\Documents\Python\ATOM\venv310\lib\site-packages\sklearn\metrics\_scorer.py", line 266, in __call__
    return self._score(partial(_cached_call, None), estimator, X, y_true, **_kwargs)
  File "C:\Users\Mavs\Documents\Python\ATOM\venv310\lib\site-packages\sklearn\metrics\_scorer.py", line 466, in _score
    y_pred = method_caller(clf, "predict_proba", X, pos_label=pos_label)
  File "C:\Users\Mavs\Documents\Python\ATOM\venv310\lib\site-packages\sklearn\metrics\_scorer.py", line 86, in _cached_call
    result, _ = _get_response_values(
  File "C:\Users\Mavs\Documents\Python\ATOM\venv310\lib\site-packages\sklearn\utils\_response.py", line 77, in _get_response_values
    if pos_label is not None and pos_label not in classes.tolist():
AttributeError: 'list' object has no attribute 'tolist'

Versions

System:
    python: 3.10.2 (tags/v3.10.2:a58ebcc, Jan 17 2022, 14:12:15) [MSC v.1929 64 bit (AMD64)]
executable: C:\Users\Mavs\Documents\Python\ATOM\venv310\Scripts\python.exe
   machine: Windows-10-10.0.19045-SP0
Python dependencies:
      sklearn: 1.3.0
          pip: 23.1.2
   setuptools: 59.8.0
        numpy: 1.23.5
        scipy: 1.10.1
       Cython: 0.29.30
       pandas: 1.5.3
   matplotlib: 3.7.2
       joblib: 1.3.1
threadpoolctl: 3.1.0
Built with OpenMP: True
threadpoolctl info:
       user_api: blas
   internal_api: openblas
         prefix: libopenblas
       filepath: C:\Users\Mavs\Documents\Python\ATOM\venv310\Lib\site-packages\numpy\.libs\libopenblas.FB5AE2TYXYH2IJRDKGDGQ3XBKLKTF43H.gfortran-win_amd64.dll
        version: 0.3.20
threading_layer: pthreads
   architecture: Zen
    num_threads: 16
       user_api: openmp
   internal_api: openmp
         prefix: vcomp
       filepath: C:\Users\Mavs\Documents\Python\ATOM\venv310\Lib\site-packages\sklearn\.libs\vcomp140.dll
        version: None
    num_threads: 16
       user_api: blas
   internal_api: openblas
         prefix: libopenblas
       filepath: C:\Users\Mavs\Documents\Python\ATOM\venv310\Lib\site-packages\scipy.libs\libopenblas-802f9ed1179cb9c9b03d67ff79f48187.dll
        version: 0.3.18
threading_layer: pthreads
   architecture: Zen
    num_threads: 16
       user_api: openmp
   internal_api: openmp
         prefix: libiomp
       filepath: C:\Users\Mavs\Documents\Python\ATOM\venv310\Lib\site-packages\torch\lib\libiomp5md.dll
        version: None
    num_threads: 8
       user_api: openmp
   internal_api: openmp
         prefix: libiomp
       filepath: C:\Users\Mavs\Documents\Python\ATOM\venv310\Lib\site-packages\torch\lib\libiompstubs5md.dll
        version: None
    num_threads: 1

About this issue

  • Original URL
  • State: closed
  • Created a year ago
  • Comments: 16 (16 by maintainers)

Most upvoted comments

Hi @glemaitre,

It is okay, no problem!! I will go ahead with some issues that are less difficult than this.