From aa2172de1af414bb296f8aa5446f5d5adc2123bf Mon Sep 17 00:00:00 2001 From: Chiara Marmo Date: Tue, 20 Sep 2022 09:59:16 -1000 Subject: [PATCH 1/5] Fix ranking for scipy >= 1.10. --- sklearn/model_selection/_search.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/sklearn/model_selection/_search.py b/sklearn/model_selection/_search.py index 7cf2307ac85e0..5bb892f57c66f 100644 --- a/sklearn/model_selection/_search.py +++ b/sklearn/model_selection/_search.py @@ -965,11 +965,13 @@ def _store(key_name, array, weights=None, splits=False, rank=False): results["std_%s" % key_name] = array_stds if rank: - rank_result = rankdata(-array_means, method="min") # when input is nan, scipy >= 1.10 rankdata returns nan. To # keep previous behaviour nans are set to the - # maximum possible rank - rank_result[np.isnan(rank_result)] = len(rank_result) + # minimum value in the array before ranking + array_means = np.asarray( + [min(array_means) - 1 if np.isnan(a) else a for a in array_means] + ) + rank_result = rankdata(-array_means, method="min") rank_result = np.asarray(rank_result, dtype=np.int32) results["rank_%s" % key_name] = rank_result From a21429e9b4a469fa3376ec3ba3cddc743ca527ea Mon Sep 17 00:00:00 2001 From: Chiara Marmo Date: Tue, 20 Sep 2022 10:51:54 -1000 Subject: [PATCH 2/5] Remove for loop. --- sklearn/model_selection/_search.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/sklearn/model_selection/_search.py b/sklearn/model_selection/_search.py index 5bb892f57c66f..981bc79d80715 100644 --- a/sklearn/model_selection/_search.py +++ b/sklearn/model_selection/_search.py @@ -968,9 +968,8 @@ def _store(key_name, array, weights=None, splits=False, rank=False): # when input is nan, scipy >= 1.10 rankdata returns nan. To # keep previous behaviour nans are set to the # minimum value in the array before ranking - array_means = np.asarray( - [min(array_means) - 1 if np.isnan(a) else a for a in array_means] - ) + min_array_means = min(array_means) - 1 + np.nan_to_num(array_means, copy=False, nan=min_array_means) rank_result = rankdata(-array_means, method="min") rank_result = np.asarray(rank_result, dtype=np.int32) results["rank_%s" % key_name] = rank_result From 937b21cd3b80c4c4b14f123d6287ca570360d4e4 Mon Sep 17 00:00:00 2001 From: Chiara Marmo Date: Tue, 20 Sep 2022 15:23:13 -1000 Subject: [PATCH 3/5] Update sklearn/model_selection/_search.py Co-authored-by: Meekail Zain <34613774+Micky774@users.noreply.github.com> --- sklearn/model_selection/_search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/model_selection/_search.py b/sklearn/model_selection/_search.py index 981bc79d80715..911a915dbe5ba 100644 --- a/sklearn/model_selection/_search.py +++ b/sklearn/model_selection/_search.py @@ -966,7 +966,7 @@ def _store(key_name, array, weights=None, splits=False, rank=False): if rank: # when input is nan, scipy >= 1.10 rankdata returns nan. To - # keep previous behaviour nans are set to the + # keep previous behaviour nans are set to be smaller than the # minimum value in the array before ranking min_array_means = min(array_means) - 1 np.nan_to_num(array_means, copy=False, nan=min_array_means) From 0b31282b0b152999ead51d72881d8bac03f220d4 Mon Sep 17 00:00:00 2001 From: Chiara Marmo Date: Wed, 21 Sep 2022 08:46:02 -1000 Subject: [PATCH 4/5] Copy the array of means to keep results unchanged. --- sklearn/model_selection/_search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/model_selection/_search.py b/sklearn/model_selection/_search.py index 911a915dbe5ba..37b26eb1c72d3 100644 --- a/sklearn/model_selection/_search.py +++ b/sklearn/model_selection/_search.py @@ -969,7 +969,7 @@ def _store(key_name, array, weights=None, splits=False, rank=False): # keep previous behaviour nans are set to be smaller than the # minimum value in the array before ranking min_array_means = min(array_means) - 1 - np.nan_to_num(array_means, copy=False, nan=min_array_means) + array_means = np.nan_to_num(array_means, copy=True, nan=min_array_means) rank_result = rankdata(-array_means, method="min") rank_result = np.asarray(rank_result, dtype=np.int32) results["rank_%s" % key_name] = rank_result From c22ccaa269974d902149f0e44f76f8c07ac7dca6 Mon Sep 17 00:00:00 2001 From: Olivier Grisel Date: Fri, 23 Sep 2022 14:42:42 +0200 Subject: [PATCH 5/5] Trigger [scipy-dev]