Skip to content

FIX MLKNNClassificationVoter errors possibly due to scipy deprecations #548

@PSSF23

Description

@PSSF23

My issue is about fixing test errors on MLKNNClassificationVoter.

Reproducing code example:

def test_correct_vote(self):
# set random seed
np.random.seed(0)
# generate training data and classes
X = np.concatenate(
(
np.random.normal(0, 0.5, (100, 100)),
np.random.normal(1, 0.5, (100, 100)),
)
)
Y = np.concatenate((np.zeros((100, 1)), np.ones((100, 1))))
# train model
mlkcv = MLKNNClassificationVoter(5)
mlkcv.fit(X, Y)
# generate testing data and class probability
X_test = np.zeros((6, 100))
Y_test = np.zeros((6, 1))
# check if model predicts as expected
testing.assert_allclose(Y_test, mlkcv.predict(X_test), atol=1e-4)

Error message

__ TestKNNClassificationVoter.TestMLKNNClassificationVoter.test_correct_vote ___ x = 0.0 def isintlike(x): """Is x appropriate as an index into a sparse matrix? Returns True if it can be cast safely to a machine int. """ # Fast-path check to eliminate non-scalar values. operator.index would # catch this case too, but the exception catching is slow. if np.ndim(x) != 0: return False try: > operator.index(x) E TypeError: 'numpy.float64' object cannot be interpreted as an integer venv/lib/python3.9/site-packages/scipy/sparse/_sputils.py:208: TypeError During handling of the above exception, another exception occurred: self = <proglearn.tests.test_voter.TestKNNClassificationVoter.TestMLKNNClassificationVoter object at 0x7fb8e1d44130> def test_correct_vote(self): # set random seed np.random.seed(0) # generate training data and classes X = np.concatenate( ( np.random.normal(0, 0.5, (100, 100)), np.random.normal(1, 0.5, (100, 100)), ) ) Y = np.concatenate((np.zeros((100, 1)), np.ones((100, 1)))) # train model mlkcv = MLKNNClassificationVoter(5) > mlkcv.fit(X, Y) proglearn/tests/test_voter.py:96: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ proglearn/voters.py:364: in fit self.mlknn_.fit(X_flattened, y_flattened) venv/lib/python3.9/site-packages/skmultilearn/adapt/mlknn.py:218: in fit self._cond_prob_true, self._cond_prob_false = self._compute_cond(X, self._label_cache) venv/lib/python3.9/site-packages/skmultilearn/adapt/mlknn.py:180: in _compute_cond cn[label, deltas[0, label]] += 1 venv/lib/python3.9/site-packages/scipy/sparse/_lil.py:211: in __getitem__ return IndexMixin.__getitem__(self, key) venv/lib/python3.9/site-packages/scipy/sparse/_index.py:47: in __getitem__ row, col = self._validate_indices(key) venv/lib/python3.9/site-packages/scipy/sparse/_index.py:161: in _validate_indices if isintlike(col): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ x = 0.0 def isintlike(x): """Is x appropriate as an index into a sparse matrix? Returns True if it can be cast safely to a machine int. """ # Fast-path check to eliminate non-scalar values. operator.index would # catch this case too, but the exception catching is slow. if np.ndim(x) != 0: return False try: operator.index(x) except (TypeError, ValueError): try: loose_int = bool(int(x) == x) except (TypeError, ValueError): return False if loose_int: msg = "Inexact indices into sparse matrices are not allowed" > raise ValueError(msg) E ValueError: Inexact indices into sparse matrices are not allowed venv/lib/python3.9/site-packages/scipy/sparse/_sputils.py:216: ValueError =============================== warnings summary =============================== venv/lib/python3.9/site-packages/sklearn/utils/multiclass.py:14 /home/circleci/project/venv/lib/python3.9/site-packages/sklearn/utils/multiclass.py:14: DeprecationWarning: Please use `spmatrix` from the `scipy.sparse` namespace, the `scipy.sparse.base` namespace is deprecated. from scipy.sparse.base import spmatrix venv/lib/python3.9/site-packages/sklearn/utils/optimize.py:18 /home/circleci/project/venv/lib/python3.9/site-packages/sklearn/utils/optimize.py:18: DeprecationWarning: Please use `line_search_wolfe2` from the `scipy.optimize` namespace, the `scipy.optimize.linesearch` namespace is deprecated. from scipy.optimize.linesearch import line_search_wolfe2, line_search_wolfe1 venv/lib/python3.9/site-packages/sklearn/utils/optimize.py:18 /home/circleci/project/venv/lib/python3.9/site-packages/sklearn/utils/optimize.py:18: DeprecationWarning: Please use `line_search_wolfe1` from the `scipy.optimize` namespace, the `scipy.optimize.linesearch` namespace is deprecated. from scipy.optimize.linesearch import line_search_wolfe2, line_search_wolfe1 proglearn/tests/test_voter.py::TestKNNClassificationVoter::TestMLKNNClassificationVoter::test_correct_vote /home/circleci/project/venv/lib/python3.9/site-packages/sklearn/utils/validation.py:70: FutureWarning: Pass n_neighbors=5 as keyword args. From version 1.0 (renaming of 0.25) passing these as positional arguments will result in an error warnings.warn(f"Pass {args_msg} as keyword args. From version " -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ------ generated xml file: /home/circleci/project/test-reports/junit.xml ------- ---------- coverage: platform linux, python 3.9.13-final-0 ----------- Coverage XML written to file coverage.xml 

Version information

  • CircleCI Pytest

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions