Sklearn-Nature-Inspired-Algorithms icon indicating copy to clipboard operation
Sklearn-Nature-Inspired-Algorithms copied to clipboard

"Add support for dict of scores in 'scoring' attribute"

Open MarekWadinger opened this issue 1 year ago • 0 comments

Complete Description of the Issue

As a software developer, I want to track the improvement of ML model over iterations using multiple scoring metrics. This is a default behavior of parameter searching algorithms in sklearn (e.g., GridSearchCV ). Though able to use same API, NatureInspiredSearchCV raises a KeyError.

This seems to be due to default cv_results key used for evaluation, that changes from 'mean_test_score' to f'mean_test_{self.refit}'. However, method refit is not passed to ParameterSearch.

Simplest Possible Self-Contained Example Showing the Bug

from sklearn.datasets import make_classification
from sklearn.tree import DecisionTreeClassifier as DTC
from sklearn_nature_inspired_algorithms.model_selection import\
    NatureInspiredSearchCV as NIS_CV

X, y = make_classification()

tree = DTC(random_state=0)

param_grid = {'max_depth': [1, 2]}

scoring = {'AUC': 'roc_auc', 'F1': 'f1_macro'}

sh = NIS_CV(tree, param_grid,
            scoring=scoring, refit=False).fit(X, y)

Full Backtrace of Exception

Exception has occurred: KeyError Exception has occurred: KeyError 'mean_test_score' File "./Sklearn-Nature-Inspired-Search/sklearn_nature_inspired_algorithms/model_selection/_parameter_search.py", line 39, in _evaluate mean_test_score = cv_results['mean_test_score'] File "./Sklearn-Nature-Inspired-Search/sklearn_nature_inspired_algorithms/model_selection/_stagnation_stopping_task.py", line 40, in eval x_f = super().eval(A) File "./Sklearn-Nature-Inspired-Search/sklearn_nature_inspired_algorithms/model_selection/nature_inspired_search_cv.py", line 47, in _run_search self.__algorithm.run(task=task) File "./Sklearn-Nature-Inspired-Search/sklearn_nature_inspired_algorithms/model_selection/nature_inspired_search_cv.py", line 19, in fit return super().fit(X, y, groups=groups, **fit_params) File "./RnD/Similarity/bug_nia.py", line 15, in scoring=scoring, refit=False).fit(X, y) KeyError: 'mean_test_score'

MarekWadinger avatar Apr 24 '23 07:04 MarekWadinger