.. include:: _contributors.rst .. currentmodule:: sklearn .. _release_notes_1_0: =========== Version 1.0 =========== For a short description of the main highlights of the release, please refer to :ref:`sphx_glr_auto_examples_release_highlights_plot_release_highlights_1_0_0.py`. .. include:: changelog_legend.inc .. _changes_1_0_2: Version 1.0.2 ============= **December 2021** - |Fix| :class:`cluster.Birch`, :class:`feature_selection.RFECV`, :class:`ensemble.RandomForestRegressor`, :class:`ensemble.RandomForestClassifier`, :class:`ensemble.GradientBoostingRegressor`, and :class:`ensemble.GradientBoostingClassifier` do not raise warning when fitted on a pandas DataFrame anymore. :pr:`21578` by `Thomas Fan`_. Changelog --------- :mod:`sklearn.cluster` ...................... - |Fix| Fixed an infinite loop in :func:`cluster.SpectralClustering` by moving an iteration counter from try to except. :pr:`21271` by :user:`Tyler Martin `. :mod:`sklearn.datasets` ....................... - |Fix| :func:`datasets.fetch_openml` is now thread safe. Data is first downloaded to a temporary subfolder and then renamed. :pr:`21833` by :user:`Siavash Rezazadeh `. :mod:`sklearn.decomposition` ............................ - |Fix| Fixed the constraint on the objective function of :class:`decomposition.DictionaryLearning`, :class:`decomposition.MiniBatchDictionaryLearning`, :class:`decomposition.SparsePCA` and :class:`decomposition.MiniBatchSparsePCA` to be convex and match the referenced article. :pr:`19210` by :user:`Jérémie du Boisberranger `. :mod:`sklearn.ensemble` ....................... - |Fix| :class:`ensemble.RandomForestClassifier`, :class:`ensemble.RandomForestRegressor`, :class:`ensemble.ExtraTreesClassifier`, :class:`ensemble.ExtraTreesRegressor`, and :class:`ensemble.RandomTreesEmbedding` now raise a ``ValueError`` when ``bootstrap=False`` and ``max_samples`` is not ``None``. :pr:`21295` :user:`Haoyin Xu `. - |Fix| Solve a bug in :class:`ensemble.GradientBoostingClassifier` where the exponential loss was computing the positive gradient instead of the negative one. :pr:`22050` by :user:`Guillaume Lemaitre `. :mod:`sklearn.feature_selection` ................................ - |Fix| Fixed :class:`feature_selection.SelectFromModel` by improving support for base estimators that do not set `feature_names_in_`. :pr:`21991` by `Thomas Fan`_. :mod:`sklearn.impute` ..................... - |Fix| Fix a bug in :class:`linear_model.RidgeClassifierCV` where the method `predict` was performing an `argmax` on the scores obtained from `decision_function` instead of returning the multilabel indicator matrix. :pr:`19869` by :user:`Guillaume Lemaitre `. :mod:`sklearn.linear_model` ........................... - |Fix| :class:`linear_model.LassoLarsIC` now correctly computes AIC and BIC. An error is now raised when `n_features > n_samples` and when the noise variance is not provided. :pr:`21481` by :user:`Guillaume Lemaitre ` and :user:`Andrés Babino `. :mod:`sklearn.manifold` ....................... - |Fix| Fixed an unnecessary error when fitting :class:`manifold.Isomap` with a precomputed dense distance matrix where the neighbors graph has multiple disconnected components. :pr:`21915` by `Tom Dupre la Tour`_. :mod:`sklearn.metrics` ...................... - |Fix| All :class:`sklearn.metrics.DistanceMetric` subclasses now correctly support read-only buffer attributes. This fixes a regression introduced in 1.0.0 with respect to 0.24.2. :pr:`21694` by :user:`Julien Jerphanion `. - |Fix| All `sklearn.metrics.MinkowskiDistance` now accepts a weight parameter that makes it possible to write code that behaves consistently both with scipy 1.8 and earlier versions. In turns this means that all neighbors-based estimators (except those that use `algorithm="kd_tree"`) now accept a weight parameter with `metric="minknowski"` to yield results that are always consistent with `scipy.spatial.distance.cdist`. :pr:`21741` by :user:`Olivier Grisel `. :mod:`sklearn.multiclass` ......................... - |Fix| :meth:`multiclass.OneVsRestClassifier.predict_proba` does not error when fitted on constant integer targets. :pr:`21871` by `Thomas Fan`_. :mod:`sklearn.neighbors` ........................ - |Fix| :class:`neighbors.KDTree` and :class:`neighbors.BallTree` correctly supports read-only buffer attributes. :pr:`21845` by `Thomas Fan`_. :mod:`sklearn.preprocessing` ............................ - |Fix| Fixes compatibility bug with NumPy 1.22 in :class:`preprocessing.OneHotEncoder`. :pr:`21517` by `Thomas Fan`_. :mod:`sklearn.tree` ................... - |Fix| Prevents :func:`tree.plot_tree` from drawing out of the boundary of the figure. :pr:`21917` by `Thomas Fan`_. - |Fix| Support loading pickles of decision tree models when the pickle has been generated on a platform with a different bitness. A typical example is to train and pickle the model on 64 bit machine and load the model on a 32 bit machine for prediction. :pr:`21552` by :user:`Loïc Estève `. :mod:`sklearn.utils` .................... - |Fix| :func:`utils.estimator_html_repr` now escapes all the estimator descriptions in the generated HTML. :pr:`21493` by :user:`Aurélien Geron `. .. _changes_1_0_1: Version 1.0.1 ============= **October 2021** Fixed models ------------ - |Fix| Non-fit methods in the following classes do not raise a UserWarning when fitted on DataFrames with valid feature names: :class:`covariance.EllipticEnvelope`, :class:`ensemble.IsolationForest`, :class:`ensemble.AdaBoostClassifier`, :class:`neighbors.KNeighborsClassifier`, :class:`neighbors.KNeighborsRegressor`, :class:`neighbors.RadiusNeighborsClassifier`, :class:`neighbors.RadiusNeighborsRegressor`. :pr:`21199` by `Thomas Fan`_. :mod:`sklearn.calibration` .......................... - |Fix| Fixed :class:`calibration.CalibratedClassifierCV` to take into account `sample_weight` when computing the base estimator prediction when `ensemble=False`. :pr:`20638` by :user:`Julien Bohné `. - |Fix| Fixed a bug in :class:`calibration.CalibratedClassifierCV` with `method="sigmoid"` that was ignoring the `sample_weight` when computing the the Bayesian priors. :pr:`21179` by :user:`Guillaume Lemaitre `. :mod:`sklearn.cluster` ...................... - |Fix| Fixed a bug in :class:`cluster.KMeans`, ensuring reproducibility and equivalence between sparse and dense input. :pr:`21195` by :user:`Jérémie du Boisberranger `. :mod:`sklearn.ensemble` ....................... - |Fix| Fixed a bug that could produce a segfault in rare cases for :class:`ensemble.HistGradientBoostingClassifier` and :class:`ensemble.HistGradientBoostingRegressor`. :pr:`21130` :user:`Christian Lorentzen `. :mod:`sklearn.gaussian_process` ............................... - |Fix| Compute `y_std` properly with multi-target in :class:`sklearn.gaussian_process.GaussianProcessRegressor` allowing proper normalization in multi-target scene. :pr:`20761` by :user:`Patrick de C. T. R. Ferreira `. :mod:`sklearn.feature_extraction` ................................. - |Efficiency| Fixed an efficiency regression introduced in version 1.0.0 in the `transform` method of :class:`feature_extraction.text.CountVectorizer` which no longer checks for uppercase characters in the provided vocabulary. :pr:`21251` by :user:`Jérémie du Boisberranger `. - |Fix| Fixed a bug in :class:`feature_extraction.text.CountVectorizer` and :class:`feature_extraction.text.TfidfVectorizer` by raising an error when 'min_idf' or 'max_idf' are floating-point numbers greater than 1. :pr:`20752` by :user:`Alek Lefebvre `. :mod:`sklearn.linear_model` ........................... - |Fix| Improves stability of :class:`linear_model.LassoLars` for different versions of openblas. :pr:`21340` by `Thomas Fan`_. - |Fix| :class:`linear_model.LogisticRegression` now raises a better error message when the solver does not support sparse matrices with int64 indices. :pr:`21093` by `Tom Dupre la Tour`_. :mod:`sklearn.neighbors` ........................ - |Fix| :class:`neighbors.KNeighborsClassifier`, :class:`neighbors.KNeighborsRegressor`, :class:`neighbors.RadiusNeighborsClassifier`, :class:`neighbors.RadiusNeighborsRegressor` with `metric="precomputed"` raises an error for `bsr` and `dok` sparse matrices in methods: `fit`, `kneighbors` and `radius_neighbors`, due to handling of explicit zeros in `bsr` and `dok` :term:`sparse graph` formats. :pr:`21199` by `Thomas Fan`_. :mod:`sklearn.pipeline` ....................... - |Fix| :meth:`pipeline.Pipeline.get_feature_names_out` correctly passes feature names out from one step of a pipeline to the next. :pr:`21351` by `Thomas Fan`_. :mod:`sklearn.svm` .................. - |Fix| :class:`svm.SVC` and :class:`svm.SVR` check for an inconsistency in its internal representation and raise an error instead of segfaulting. This fix also resolves `CVE-2020-28975 `__. :pr:`21336` by `Thomas Fan`_. :mod:`sklearn.utils` .................... - |Enhancement| `utils.validation._check_sample_weight` can perform a non-negativity check on the sample weights. It can be turned on using the only_non_negative bool parameter. Estimators that check for non-negative weights are updated: :func:`linear_model.LinearRegression` (here the previous error message was misleading), :func:`ensemble.AdaBoostClassifier`, :func:`ensemble.AdaBoostRegressor`, :func:`neighbors.KernelDensity`. :pr:`20880` by :user:`Guillaume Lemaitre ` and :user:`András Simon `. - |Fix| Solve a bug in ``sklearn.utils.metaestimators.if_delegate_has_method`` where the underlying check for an attribute did not work with NumPy arrays. :pr:`21145` by :user:`Zahlii `. Miscellaneous ............. - |Fix| Fitting an estimator on a dataset that has no feature names, that was previously fitted on a dataset with feature names no longer keeps the old feature names stored in the `feature_names_in_` attribute. :pr:`21389` by :user:`Jérémie du Boisberranger `. .. _changes_1_0: Version 1.0.0 ============= **September 2021** Minimal dependencies -------------------- Version 1.0.0 of scikit-learn requires python 3.7+, numpy 1.14.6+ and scipy 1.1.0+. Optional minimal dependency is matplotlib 2.2.2+. Enforcing keyword-only arguments -------------------------------- In an effort to promote clear and non-ambiguous use of the library, most constructor and function parameters must now be passed as keyword arguments (i.e. using the `param=value` syntax) instead of positional. If a keyword-only parameter is used as positional, a `TypeError` is now raised. :issue:`15005` :pr:`20002` by `Joel Nothman`_, `Adrin Jalali`_, `Thomas Fan`_, `Nicolas Hug`_, and `Tom Dupre la Tour`_. See `SLEP009 `_ for more details. Changed models -------------- The following estimators and functions, when fit with the same data and parameters, may produce different models from the previous version. This often occurs due to changes in the modelling logic (bug fixes or enhancements), or in random sampling procedures. - |Fix| :class:`manifold.TSNE` now avoids numerical underflow issues during affinity matrix computation. - |Fix| :class:`manifold.Isomap` now connects disconnected components of the neighbors graph along some minimum distance pairs, instead of changing every infinite distances to zero. - |Fix| The splitting criterion of :class:`tree.DecisionTreeClassifier` and :class:`tree.DecisionTreeRegressor` can be impacted by a fix in the handling of rounding errors. Previously some extra spurious splits could occur. - |Fix| :func:`model_selection.train_test_split` with a `stratify` parameter and :class:`model_selection.StratifiedShuffleSplit` may lead to slightly different results. Details are listed in the changelog below. (While we are trying to better inform users by providing this information, we cannot assure that this list is complete.) Changelog --------- .. Entries should be grouped by module (in alphabetic order) and prefixed with one of the labels: |MajorFeature|, |Feature|, |Efficiency|, |Enhancement|, |Fix| or |API| (see whats_new.rst for descriptions). Entries should be ordered by those labels (e.g. |Fix| after |Efficiency|). Changes not specific to a module should be listed under *Multiple Modules* or *Miscellaneous*. Entries should end with: :pr:`123456` by :user:`Joe Bloggs `. where 123456 is the *pull request* number, not the issue number. - |API| The option for using the squared error via ``loss`` and ``criterion`` parameters was made more consistent. The preferred way is by setting the value to `"squared_error"`. Old option names are still valid, produce the same models, but are deprecated and will be removed in version 1.2. :pr:`19310` by :user:`Christian Lorentzen `. - For :class:`ensemble.ExtraTreesRegressor`, `criterion="mse"` is deprecated, use `"squared_error"` instead which is now the default. - For :class:`ensemble.GradientBoostingRegressor`, `loss="ls"` is deprecated, use `"squared_error"` instead which is now the default. - For :class:`ensemble.RandomForestRegressor`, `criterion="mse"` is deprecated, use `"squared_error"` instead which is now the default. - For :class:`ensemble.HistGradientBoostingRegressor`, `loss="least_squares"` is deprecated, use `"squared_error"` instead which is now the default. - For :class:`linear_model.RANSACRegressor`, `loss="squared_loss"` is deprecated, use `"squared_error"` instead. - For :class:`linear_model.SGDRegressor`, `loss="squared_loss"` is deprecated, use `"squared_error"` instead which is now the default. - For :class:`tree.DecisionTreeRegressor`, `criterion="mse"` is deprecated, use `"squared_error"` instead which is now the default. - For :class:`tree.ExtraTreeRegressor`, `criterion="mse"` is deprecated, use `"squared_error"` instead which is now the default. - |API| The option for using the absolute error via ``loss`` and ``criterion`` parameters was made more consistent. The preferred way is by setting the value to `"absolute_error"`. Old option names are still valid, produce the same models, but are deprecated and will be removed in version 1.2. :pr:`19733` by :user:`Christian Lorentzen `. - For :class:`ensemble.ExtraTreesRegressor`, `criterion="mae"` is deprecated, use `"absolute_error"` instead. - For :class:`ensemble.GradientBoostingRegressor`, `loss="lad"` is deprecated, use `"absolute_error"` instead. - For :class:`ensemble.RandomForestRegressor`, `criterion="mae"` is deprecated, use `"absolute_error"` instead. - For :class:`ensemble.HistGradientBoostingRegressor`, `loss="least_absolute_deviation"` is deprecated, use `"absolute_error"` instead. - For :class:`linear_model.RANSACRegressor`, `loss="absolute_loss"` is deprecated, use `"absolute_error"` instead which is now the default. - For :class:`tree.DecisionTreeRegressor`, `criterion="mae"` is deprecated, use `"absolute_error"` instead. - For :class:`tree.ExtraTreeRegressor`, `criterion="mae"` is deprecated, use `"absolute_error"` instead. - |API| `np.matrix` usage is deprecated in 1.0 and will raise a `TypeError` in 1.2. :pr:`20165` by `Thomas Fan`_. - |API| :term:`get_feature_names_out` has been added to the transformer API to get the names of the output features. `get_feature_names` has in turn been deprecated. :pr:`18444` by `Thomas Fan`_. - |API| All estimators store `feature_names_in_` when fitted on pandas Dataframes. These feature names are compared to names seen in non-`fit` methods, e.g. `transform` and will raise a `FutureWarning` if they are not consistent. These ``FutureWarning`` s will become ``ValueError`` s in 1.2. :pr:`18010` by `Thomas Fan`_. :mod:`sklearn.base` ................... - |Fix| :func:`config_context` is now threadsafe. :pr:`18736` by `Thomas Fan`_. :mod:`sklearn.calibration` .......................... - |Feature| :func:`calibration.CalibrationDisplay` added to plot calibration curves. :pr:`17443` by :user:`Lucy Liu `. - |Fix| The ``predict`` and ``predict_proba`` methods of :class:`calibration.CalibratedClassifierCV` can now properly be used on prefitted pipelines. :pr:`19641` by :user:`Alek Lefebvre `. - |Fix| Fixed an error when using a :class:`ensemble.VotingClassifier` as `base_estimator` in :class:`calibration.CalibratedClassifierCV`. :pr:`20087` by :user:`Clément Fauchereau `. :mod:`sklearn.cluster` ...................... - |Efficiency| The ``"k-means++"`` initialization of :class:`cluster.KMeans` and :class:`cluster.MiniBatchKMeans` is now faster, especially in multicore settings. :pr:`19002` by :user:`Jon Crall ` and :user:`Jérémie du Boisberranger `. - |Efficiency| :class:`cluster.KMeans` with `algorithm='elkan'` is now faster in multicore settings. :pr:`19052` by :user:`Yusuke Nagasaka `. - |Efficiency| :class:`cluster.MiniBatchKMeans` is now faster in multicore settings. :pr:`17622` by :user:`Jérémie du Boisberranger `. - |Efficiency| :class:`cluster.OPTICS` can now cache the output of the computation of the tree, using the `memory` parameter. :pr:`19024` by :user:`Frankie Robertson `. - |Enhancement| The `predict` and `fit_predict` methods of :class:`cluster.AffinityPropagation` now accept sparse data type for input data. :pr:`20117` by :user:`Venkatachalam Natchiappan ` - |Fix| Fixed a bug in :class:`cluster.MiniBatchKMeans` where the sample weights were partially ignored when the input is sparse. :pr:`17622` by :user:`Jérémie du Boisberranger `. - |Fix| Improved convergence detection based on center change in :class:`cluster.MiniBatchKMeans` which was almost never achievable. :pr:`17622` by :user:`Jérémie du Boisberranger `. - |FIX| :class:`cluster.AgglomerativeClustering` now supports readonly memory-mapped datasets. :pr:`19883` by :user:`Julien Jerphanion `. - |Fix| :class:`cluster.AgglomerativeClustering` correctly connects components when connectivity and affinity are both precomputed and the number of connected components is greater than 1. :pr:`20597` by `Thomas Fan`_. - |Fix| :class:`cluster.FeatureAgglomeration` does not accept a ``**params`` kwarg in the ``fit`` function anymore, resulting in a more concise error message. :pr:`20899` by :user:`Adam Li `. - |Fix| Fixed a bug in :class:`cluster.KMeans`, ensuring reproducibility and equivalence between sparse and dense input. :pr:`20200` by :user:`Jérémie du Boisberranger `. - |API| :class:`cluster.Birch` attributes, `fit_` and `partial_fit_`, are deprecated and will be removed in 1.2. :pr:`19297` by `Thomas Fan`_. - |API| the default value for the `batch_size` parameter of :class:`cluster.MiniBatchKMeans` was changed from 100 to 1024 due to efficiency reasons. The `n_iter_` attribute of :class:`cluster.MiniBatchKMeans` now reports the number of started epochs and the `n_steps_` attribute reports the number of mini batches processed. :pr:`17622` by :user:`Jérémie du Boisberranger `. - |API| :func:`cluster.spectral_clustering` raises an improved error when passed a `np.matrix`. :pr:`20560` by `Thomas Fan`_. :mod:`sklearn.compose` ...................... - |Enhancement| :class:`compose.ColumnTransformer` now records the output of each transformer in `output_indices_`. :pr:`18393` by :user:`Luca Bittarello `. - |Enhancement| :class:`compose.ColumnTransformer` now allows DataFrame input to have its columns appear in a changed order in `transform`. Further, columns that are dropped will not be required in transform, and additional columns will be ignored if `remainder='drop'`. :pr:`19263` by `Thomas Fan`_. - |Enhancement| Adds `**predict_params` keyword argument to :meth:`compose.TransformedTargetRegressor.predict` that passes keyword argument to the regressor. :pr:`19244` by :user:`Ricardo `. - |FIX| `compose.ColumnTransformer.get_feature_names` supports non-string feature names returned by any of its transformers. However, note that ``get_feature_names`` is deprecated, use ``get_feature_names_out`` instead. :pr:`18459` by :user:`Albert Villanova del Moral ` and :user:`Alonso Silva Allende `. - |Fix| :class:`compose.TransformedTargetRegressor` now takes nD targets with an adequate transformer. :pr:`18898` by :user:`Oras Phongpanagnam `. - |API| Adds `verbose_feature_names_out` to :class:`compose.ColumnTransformer`. This flag controls the prefixing of feature names out in :term:`get_feature_names_out`. :pr:`18444` and :pr:`21080` by `Thomas Fan`_. :mod:`sklearn.covariance` ......................... - |Fix| Adds arrays check to :func:`covariance.ledoit_wolf` and :func:`covariance.ledoit_wolf_shrinkage`. :pr:`20416` by :user:`Hugo Defois `. - |API| Deprecates the following keys in `cv_results_`: `'mean_score'`, `'std_score'`, and `'split(k)_score'` in favor of `'mean_test_score'` `'std_test_score'`, and `'split(k)_test_score'`. :pr:`20583` by `Thomas Fan`_. :mod:`sklearn.datasets` ....................... - |Enhancement| :func:`datasets.fetch_openml` now supports categories with missing values when returning a pandas dataframe. :pr:`19365` by `Thomas Fan`_ and :user:`Amanda Dsouza ` and :user:`EL-ATEIF Sara `. - |Enhancement| :func:`datasets.fetch_kddcup99` raises a better message when the cached file is invalid. :pr:`19669` `Thomas Fan`_. - |Enhancement| Replace usages of ``__file__`` related to resource file I/O with ``importlib.resources`` to avoid the assumption that these resource files (e.g. ``iris.csv``) already exist on a filesystem, and by extension to enable compatibility with tools such as ``PyOxidizer``. :pr:`20297` by :user:`Jack Liu `. - |Fix| Shorten data file names in the openml tests to better support installing on Windows and its default 260 character limit on file names. :pr:`20209` by `Thomas Fan`_. - |Fix| :func:`datasets.fetch_kddcup99` returns dataframes when `return_X_y=True` and `as_frame=True`. :pr:`19011` by `Thomas Fan`_. - |API| Deprecates `datasets.load_boston` in 1.0 and it will be removed in 1.2. Alternative code snippets to load similar datasets are provided. Please report to the docstring of the function for details. :pr:`20729` by `Guillaume Lemaitre`_. :mod:`sklearn.decomposition` ............................ - |Enhancement| added a new approximate solver (randomized SVD, available with `eigen_solver='randomized'`) to :class:`decomposition.KernelPCA`. This significantly accelerates computation when the number of samples is much larger than the desired number of components. :pr:`12069` by :user:`Sylvain Marié `. - |Fix| Fixes incorrect multiple data-conversion warnings when clustering boolean data. :pr:`19046` by :user:`Surya Prakash `. - |Fix| Fixed :func:`decomposition.dict_learning`, used by :class:`decomposition.DictionaryLearning`, to ensure determinism of the output. Achieved by flipping signs of the SVD output which is used to initialize the code. :pr:`18433` by :user:`Bruno Charron `. - |Fix| Fixed a bug in :class:`decomposition.MiniBatchDictionaryLearning`, :class:`decomposition.MiniBatchSparsePCA` and :func:`decomposition.dict_learning_online` where the update of the dictionary was incorrect. :pr:`19198` by :user:`Jérémie du Boisberranger `. - |Fix| Fixed a bug in :class:`decomposition.DictionaryLearning`, :class:`decomposition.SparsePCA`, :class:`decomposition.MiniBatchDictionaryLearning`, :class:`decomposition.MiniBatchSparsePCA`, :func:`decomposition.dict_learning` and :func:`decomposition.dict_learning_online` where the restart of unused atoms during the dictionary update was not working as expected. :pr:`19198` by :user:`Jérémie du Boisberranger `. - |API| In :class:`decomposition.DictionaryLearning`, :class:`decomposition.MiniBatchDictionaryLearning`, :func:`decomposition.dict_learning` and :func:`decomposition.dict_learning_online`, `transform_alpha` will be equal to `alpha` instead of 1.0 by default starting from version 1.2 :pr:`19159` by :user:`Benoît Malézieux `. - |API| Rename variable names in :class:`decomposition.KernelPCA` to improve readability. `lambdas_` and `alphas_` are renamed to `eigenvalues_` and `eigenvectors_`, respectively. `lambdas_` and `alphas_` are deprecated and will be removed in 1.2. :pr:`19908` by :user:`Kei Ishikawa `. - |API| The `alpha` and `regularization` parameters of :class:`decomposition.NMF` and :func:`decomposition.non_negative_factorization` are deprecated and will be removed in 1.2. Use the new parameters `alpha_W` and `alpha_H` instead. :pr:`20512` by :user:`Jérémie du Boisberranger `. :mod:`sklearn.dummy` .................... - |API| Attribute `n_features_in_` in :class:`dummy.DummyRegressor` and :class:`dummy.DummyRegressor` is deprecated and will be removed in 1.2. :pr:`20960` by `Thomas Fan`_. :mod:`sklearn.ensemble` ....................... - |Enhancement| :class:`~sklearn.ensemble.HistGradientBoostingClassifier` and :class:`~sklearn.ensemble.HistGradientBoostingRegressor` take cgroups quotas into account when deciding the number of threads used by OpenMP. This avoids performance problems caused by over-subscription when using those classes in a docker container for instance. :pr:`20477` by `Thomas Fan`_. - |Enhancement| :class:`~sklearn.ensemble.HistGradientBoostingClassifier` and :class:`~sklearn.ensemble.HistGradientBoostingRegressor` are no longer experimental. They are now considered stable and are subject to the same deprecation cycles as all other estimators. :pr:`19799` by `Nicolas Hug`_. - |Enhancement| Improve the HTML rendering of the :class:`ensemble.StackingClassifier` and :class:`ensemble.StackingRegressor`. :pr:`19564` by `Thomas Fan`_. - |Enhancement| Added Poisson criterion to :class:`ensemble.RandomForestRegressor`. :pr:`19836` by :user:`Brian Sun `. - |Fix| Do not allow to compute out-of-bag (OOB) score in :class:`ensemble.RandomForestClassifier` and :class:`ensemble.ExtraTreesClassifier` with multiclass-multioutput target since scikit-learn does not provide any metric supporting this type of target. Additional private refactoring was performed. :pr:`19162` by :user:`Guillaume Lemaitre `. - |Fix| Improve numerical precision for weights boosting in :class:`ensemble.AdaBoostClassifier` and :class:`ensemble.AdaBoostRegressor` to avoid underflows. :pr:`10096` by :user:`Fenil Suchak `. - |Fix| Fixed the range of the argument ``max_samples`` to be ``(0.0, 1.0]`` in :class:`ensemble.RandomForestClassifier`, :class:`ensemble.RandomForestRegressor`, where `max_samples=1.0` is interpreted as using all `n_samples` for bootstrapping. :pr:`20159` by :user:`murata-yu`. - |Fix| Fixed a bug in :class:`ensemble.AdaBoostClassifier` and :class:`ensemble.AdaBoostRegressor` where the `sample_weight` parameter got overwritten during `fit`. :pr:`20534` by :user:`Guillaume Lemaitre `. - |API| Removes `tol=None` option in :class:`ensemble.HistGradientBoostingClassifier` and :class:`ensemble.HistGradientBoostingRegressor`. Please use `tol=0` for the same behavior. :pr:`19296` by `Thomas Fan`_. :mod:`sklearn.feature_extraction` ................................. - |Fix| Fixed a bug in :class:`feature_extraction.text.HashingVectorizer` where some input strings would result in negative indices in the transformed data. :pr:`19035` by :user:`Liu Yu `. - |Fix| Fixed a bug in :class:`feature_extraction.DictVectorizer` by raising an error with unsupported value type. :pr:`19520` by :user:`Jeff Zhao `. - |Fix| Fixed a bug in :func:`feature_extraction.image.img_to_graph` and :func:`feature_extraction.image.grid_to_graph` where singleton connected components were not handled properly, resulting in a wrong vertex indexing. :pr:`18964` by `Bertrand Thirion`_. - |Fix| Raise a warning in :class:`feature_extraction.text.CountVectorizer` with `lowercase=True` when there are vocabulary entries with uppercase characters to avoid silent misses in the resulting feature vectors. :pr:`19401` by :user:`Zito Relova ` :mod:`sklearn.feature_selection` ................................ - |Feature| :func:`feature_selection.r_regression` computes Pearson's R correlation coefficients between the features and the target. :pr:`17169` by :user:`Dmytro Lituiev ` and :user:`Julien Jerphanion `. - |Enhancement| :func:`feature_selection.RFE.fit` accepts additional estimator parameters that are passed directly to the estimator's `fit` method. :pr:`20380` by :user:`Iván Pulido `, :user:`Felipe Bidu `, :user:`Gil Rutter `, and :user:`Adrin Jalali `. - |FIX| Fix a bug in :func:`isotonic.isotonic_regression` where the `sample_weight` passed by a user were overwritten during ``fit``. :pr:`20515` by :user:`Carsten Allefeld `. - |Fix| Change :func:`feature_selection.SequentialFeatureSelector` to allow for unsupervised modelling so that the `fit` signature need not do any `y` validation and allow for `y=None`. :pr:`19568` by :user:`Shyam Desai `. - |API| Raises an error in :class:`feature_selection.VarianceThreshold` when the variance threshold is negative. :pr:`20207` by :user:`Tomohiro Endo ` - |API| Deprecates `grid_scores_` in favor of split scores in `cv_results_` in :class:`feature_selection.RFECV`. `grid_scores_` will be removed in version 1.2. :pr:`20161` by :user:`Shuhei Kayawari ` and :user:`arka204`. :mod:`sklearn.inspection` ......................... - |Enhancement| Add `max_samples` parameter in :func:`inspection.permutation_importance`. It enables to draw a subset of the samples to compute the permutation importance. This is useful to keep the method tractable when evaluating feature importance on large datasets. :pr:`20431` by :user:`Oliver Pfaffel `. - |Enhancement| Add kwargs to format ICE and PD lines separately in partial dependence plots `inspection.plot_partial_dependence` and :meth:`inspection.PartialDependenceDisplay.plot`. :pr:`19428` by :user:`Mehdi Hamoumi `. - |Fix| Allow multiple scorers input to :func:`inspection.permutation_importance`. :pr:`19411` by :user:`Simona Maggio `. - |API| :class:`inspection.PartialDependenceDisplay` exposes a class method: :func:`~inspection.PartialDependenceDisplay.from_estimator`. `inspection.plot_partial_dependence` is deprecated in favor of the class method and will be removed in 1.2. :pr:`20959` by `Thomas Fan`_. :mod:`sklearn.kernel_approximation` ................................... - |Fix| Fix a bug in :class:`kernel_approximation.Nystroem` where the attribute `component_indices_` did not correspond to the subset of sample indices used to generate the approximated kernel. :pr:`20554` by :user:`Xiangyin Kong `. :mod:`sklearn.linear_model` ........................... - |MajorFeature| Added :class:`linear_model.QuantileRegressor` which implements linear quantile regression with L1 penalty. :pr:`9978` by :user:`David Dale ` and :user:`Christian Lorentzen `. - |Feature| The new :class:`linear_model.SGDOneClassSVM` provides an SGD implementation of the linear One-Class SVM. Combined with kernel approximation techniques, this implementation approximates the solution of a kernelized One Class SVM while benefitting from a linear complexity in the number of samples. :pr:`10027` by :user:`Albert Thomas `. - |Feature| Added `sample_weight` parameter to :class:`linear_model.LassoCV` and :class:`linear_model.ElasticNetCV`. :pr:`16449` by :user:`Christian Lorentzen `. - |Feature| Added new solver `lbfgs` (available with `solver="lbfgs"`) and `positive` argument to :class:`linear_model.Ridge`. When `positive` is set to `True`, forces the coefficients to be positive (only supported by `lbfgs`). :pr:`20231` by :user:`Toshihiro Nakae `. - |Efficiency| The implementation of :class:`linear_model.LogisticRegression` has been optimised for dense matrices when using `solver='newton-cg'` and `multi_class!='multinomial'`. :pr:`19571` by :user:`Julien Jerphanion `. - |Enhancement| `fit` method preserves dtype for numpy.float32 in :class:`linear_model.Lars`, :class:`linear_model.LassoLars`, :class:`linear_model.LassoLars`, :class:`linear_model.LarsCV` and :class:`linear_model.LassoLarsCV`. :pr:`20155` by :user:`Takeshi Oura `. - |Enhancement| Validate user-supplied gram matrix passed to linear models via the `precompute` argument. :pr:`19004` by :user:`Adam Midvidy `. - |Fix| :meth:`linear_model.ElasticNet.fit` no longer modifies `sample_weight` in place. :pr:`19055` by `Thomas Fan`_. - |Fix| :class:`linear_model.Lasso` and :class:`linear_model.ElasticNet` no longer have a `dual_gap_` not corresponding to their objective. :pr:`19172` by :user:`Mathurin Massias ` - |Fix| `sample_weight` are now fully taken into account in linear models when `normalize=True` for both feature centering and feature scaling. :pr:`19426` by :user:`Alexandre Gramfort ` and :user:`Maria Telenczuk `. - |Fix| Points with residuals equal to ``residual_threshold`` are now considered as inliers for :class:`linear_model.RANSACRegressor`. This allows fitting a model perfectly on some datasets when `residual_threshold=0`. :pr:`19499` by :user:`Gregory Strubel `. - |Fix| Sample weight invariance for :class:`linear_model.Ridge` was fixed in :pr:`19616` by :user:`Oliver Grisel ` and :user:`Christian Lorentzen `. - |Fix| The dictionary `params` in :func:`linear_model.enet_path` and :func:`linear_model.lasso_path` should only contain parameter of the coordinate descent solver. Otherwise, an error will be raised. :pr:`19391` by :user:`Shao Yang Hong `. - |API| Raise a warning in :class:`linear_model.RANSACRegressor` that from version 1.2, `min_samples` need to be set explicitly for models other than :class:`linear_model.LinearRegression`. :pr:`19390` by :user:`Shao Yang Hong `. - |API|: The parameter ``normalize`` of :class:`linear_model.LinearRegression` is deprecated and will be removed in 1.2. Motivation for this deprecation: ``normalize`` parameter did not take any effect if ``fit_intercept`` was set to False and therefore was deemed confusing. The behavior of the deprecated ``LinearModel(normalize=True)`` can be reproduced with a :class:`~sklearn.pipeline.Pipeline` with ``LinearModel`` (where ``LinearModel`` is :class:`~linear_model.LinearRegression`, :class:`~linear_model.Ridge`, :class:`~linear_model.RidgeClassifier`, :class:`~linear_model.RidgeCV` or :class:`~linear_model.RidgeClassifierCV`) as follows: ``make_pipeline(StandardScaler(with_mean=False), LinearModel())``. The ``normalize`` parameter in :class:`~linear_model.LinearRegression` was deprecated in :pr:`17743` by :user:`Maria Telenczuk ` and :user:`Alexandre Gramfort `. Same for :class:`~linear_model.Ridge`, :class:`~linear_model.RidgeClassifier`, :class:`~linear_model.RidgeCV`, and :class:`~linear_model.RidgeClassifierCV`, in: :pr:`17772` by :user:`Maria Telenczuk ` and :user:`Alexandre Gramfort `. Same for :class:`~linear_model.BayesianRidge`, :class:`~linear_model.ARDRegression` in: :pr:`17746` by :user:`Maria Telenczuk `. Same for :class:`~linear_model.Lasso`, :class:`~linear_model.LassoCV`, :class:`~linear_model.ElasticNet`, :class:`~linear_model.ElasticNetCV`, :class:`~linear_model.MultiTaskLasso`, :class:`~linear_model.MultiTaskLassoCV`, :class:`~linear_model.MultiTaskElasticNet`, :class:`~linear_model.MultiTaskElasticNetCV`, in: :pr:`17785` by :user:`Maria Telenczuk ` and :user:`Alexandre Gramfort `. - |API| The ``normalize`` parameter of :class:`~linear_model.OrthogonalMatchingPursuit` and :class:`~linear_model.OrthogonalMatchingPursuitCV` will default to False in 1.2 and will be removed in 1.4. :pr:`17750` by :user:`Maria Telenczuk ` and :user:`Alexandre Gramfort `. Same for :class:`~linear_model.Lars` :class:`~linear_model.LarsCV` :class:`~linear_model.LassoLars` :class:`~linear_model.LassoLarsCV` :class:`~linear_model.LassoLarsIC`, in :pr:`17769` by :user:`Maria Telenczuk ` and :user:`Alexandre Gramfort `. - |API| Keyword validation has moved from `__init__` and `set_params` to `fit` for the following estimators conforming to scikit-learn's conventions: :class:`~linear_model.SGDClassifier`, :class:`~linear_model.SGDRegressor`, :class:`~linear_model.SGDOneClassSVM`, :class:`~linear_model.PassiveAggressiveClassifier`, and :class:`~linear_model.PassiveAggressiveRegressor`. :pr:`20683` by `Guillaume Lemaitre`_. :mod:`sklearn.manifold` ....................... - |Enhancement| Implement `'auto'` heuristic for the `learning_rate` in :class:`manifold.TSNE`. It will become default in 1.2. The default initialization will change to `pca` in 1.2. PCA initialization will be scaled to have standard deviation 1e-4 in 1.2. :pr:`19491` by :user:`Dmitry Kobak `. - |Fix| Change numerical precision to prevent underflow issues during affinity matrix computation for :class:`manifold.TSNE`. :pr:`19472` by :user:`Dmitry Kobak `. - |Fix| :class:`manifold.Isomap` now uses `scipy.sparse.csgraph.shortest_path` to compute the graph shortest path. It also connects disconnected components of the neighbors graph along some minimum distance pairs, instead of changing every infinite distances to zero. :pr:`20531` by `Roman Yurchak`_ and `Tom Dupre la Tour`_. - |Fix| Decrease the numerical default tolerance in the lobpcg call in :func:`manifold.spectral_embedding` to prevent numerical instability. :pr:`21194` by :user:`Andrew Knyazev `. :mod:`sklearn.metrics` ...................... - |Feature| :func:`metrics.mean_pinball_loss` exposes the pinball loss for quantile regression. :pr:`19415` by :user:`Xavier Dupré ` and :user:`Oliver Grisel `. - |Feature| :func:`metrics.d2_tweedie_score` calculates the D^2 regression score for Tweedie deviances with power parameter ``power``. This is a generalization of the `r2_score` and can be interpreted as percentage of Tweedie deviance explained. :pr:`17036` by :user:`Christian Lorentzen `. - |Feature| :func:`metrics.mean_squared_log_error` now supports `squared=False`. :pr:`20326` by :user:`Uttam kumar `. - |Efficiency| Improved speed of :func:`metrics.confusion_matrix` when labels are integral. :pr:`9843` by :user:`Jon Crall `. - |Enhancement| A fix to raise an error in :func:`metrics.hinge_loss` when ``pred_decision`` is 1d whereas it is a multiclass classification or when ``pred_decision`` parameter is not consistent with the ``labels`` parameter. :pr:`19643` by :user:`Pierre Attard `. - |Fix| :meth:`metrics.ConfusionMatrixDisplay.plot` uses the correct max for colormap. :pr:`19784` by `Thomas Fan`_. - |Fix| Samples with zero `sample_weight` values do not affect the results from :func:`metrics.det_curve`, :func:`metrics.precision_recall_curve` and :func:`metrics.roc_curve`. :pr:`18328` by :user:`Albert Villanova del Moral ` and :user:`Alonso Silva Allende `. - |Fix| avoid overflow in :func:`metrics.adjusted_rand_score` with large amount of data. :pr:`20312` by :user:`Divyanshu Deoli `. - |API| :class:`metrics.ConfusionMatrixDisplay` exposes two class methods :func:`~metrics.ConfusionMatrixDisplay.from_estimator` and :func:`~metrics.ConfusionMatrixDisplay.from_predictions` allowing to create a confusion matrix plot using an estimator or the predictions. `metrics.plot_confusion_matrix` is deprecated in favor of these two class methods and will be removed in 1.2. :pr:`18543` by `Guillaume Lemaitre`_. - |API| :class:`metrics.PrecisionRecallDisplay` exposes two class methods :func:`~metrics.PrecisionRecallDisplay.from_estimator` and :func:`~metrics.PrecisionRecallDisplay.from_predictions` allowing to create a precision-recall curve using an estimator or the predictions. `metrics.plot_precision_recall_curve` is deprecated in favor of these two class methods and will be removed in 1.2. :pr:`20552` by `Guillaume Lemaitre`_. - |API| :class:`metrics.DetCurveDisplay` exposes two class methods :func:`~metrics.DetCurveDisplay.from_estimator` and :func:`~metrics.DetCurveDisplay.from_predictions` allowing to create a confusion matrix plot using an estimator or the predictions. `metrics.plot_det_curve` is deprecated in favor of these two class methods and will be removed in 1.2. :pr:`19278` by `Guillaume Lemaitre`_. :mod:`sklearn.mixture` ...................... - |Fix| Ensure that the best parameters are set appropriately in the case of divergency for :class:`mixture.GaussianMixture` and :class:`mixture.BayesianGaussianMixture`. :pr:`20030` by :user:`Tingshan Liu ` and :user:`Benjamin Pedigo `. :mod:`sklearn.model_selection` .............................. - |Feature| added :class:`model_selection.StratifiedGroupKFold`, that combines :class:`model_selection.StratifiedKFold` and :class:`model_selection.GroupKFold`, providing an ability to split data preserving the distribution of classes in each split while keeping each group within a single split. :pr:`18649` by :user:`Leandro Hermida ` and :user:`Rodion Martynov `. - |Enhancement| warn only once in the main process for per-split fit failures in cross-validation. :pr:`20619` by :user:`Loïc Estève ` - |Enhancement| The `model_selection.BaseShuffleSplit` base class is now public. :pr:`20056` by :user:`pabloduque0`. - |Fix| Avoid premature overflow in :func:`model_selection.train_test_split`. :pr:`20904` by :user:`Tomasz Jakubek `. :mod:`sklearn.naive_bayes` .......................... - |Fix| The `fit` and `partial_fit` methods of the discrete naive Bayes classifiers (:class:`naive_bayes.BernoulliNB`, :class:`naive_bayes.CategoricalNB`, :class:`naive_bayes.ComplementNB`, and :class:`naive_bayes.MultinomialNB`) now correctly handle the degenerate case of a single class in the training set. :pr:`18925` by :user:`David Poznik `. - |API| The attribute ``sigma_`` is now deprecated in :class:`naive_bayes.GaussianNB` and will be removed in 1.2. Use ``var_`` instead. :pr:`18842` by :user:`Hong Shao Yang `. :mod:`sklearn.neighbors` ........................ - |Enhancement| The creation of :class:`neighbors.KDTree` and :class:`neighbors.BallTree` has been improved for their worst-cases time complexity from :math:`\mathcal{O}(n^2)` to :math:`\mathcal{O}(n)`. :pr:`19473` by :user:`jiefangxuanyan ` and :user:`Julien Jerphanion `. - |FIX| `neighbors.DistanceMetric` subclasses now support readonly memory-mapped datasets. :pr:`19883` by :user:`Julien Jerphanion `. - |FIX| :class:`neighbors.NearestNeighbors`, :class:`neighbors.KNeighborsClassifier`, :class:`neighbors.RadiusNeighborsClassifier`, :class:`neighbors.KNeighborsRegressor` and :class:`neighbors.RadiusNeighborsRegressor` do not validate `weights` in `__init__` and validates `weights` in `fit` instead. :pr:`20072` by :user:`Juan Carlos Alfaro Jiménez `. - |API| The parameter `kwargs` of :class:`neighbors.RadiusNeighborsClassifier` is deprecated and will be removed in 1.2. :pr:`20842` by :user:`Juan Martín Loyola `. :mod:`sklearn.neural_network` ............................. - |Fix| :class:`neural_network.MLPClassifier` and :class:`neural_network.MLPRegressor` now correctly support continued training when loading from a pickled file. :pr:`19631` by `Thomas Fan`_. :mod:`sklearn.pipeline` ....................... - |API| The `predict_proba` and `predict_log_proba` methods of the :class:`pipeline.Pipeline` now support passing prediction kwargs to the final estimator. :pr:`19790` by :user:`Christopher Flynn `. :mod:`sklearn.preprocessing` ............................ - |Feature| The new :class:`preprocessing.SplineTransformer` is a feature preprocessing tool for the generation of B-splines, parametrized by the polynomial ``degree`` of the splines, number of knots ``n_knots`` and knot positioning strategy ``knots``. :pr:`18368` by :user:`Christian Lorentzen `. :class:`preprocessing.SplineTransformer` also supports periodic splines via the ``extrapolation`` argument. :pr:`19483` by :user:`Malte Londschien `. :class:`preprocessing.SplineTransformer` supports sample weights for knot position strategy ``"quantile"``. :pr:`20526` by :user:`Malte Londschien `. - |Feature| :class:`preprocessing.OrdinalEncoder` supports passing through missing values by default. :pr:`19069` by `Thomas Fan`_. - |Feature| :class:`preprocessing.OneHotEncoder` now supports `handle_unknown='ignore'` and dropping categories. :pr:`19041` by `Thomas Fan`_. - |Feature| :class:`preprocessing.PolynomialFeatures` now supports passing a tuple to `degree`, i.e. `degree=(min_degree, max_degree)`. :pr:`20250` by :user:`Christian Lorentzen `. - |Efficiency| :class:`preprocessing.StandardScaler` is faster and more memory efficient. :pr:`20652` by `Thomas Fan`_. - |Efficiency| Changed ``algorithm`` argument for :class:`cluster.KMeans` in :class:`preprocessing.KBinsDiscretizer` from ``auto`` to ``full``. :pr:`19934` by :user:`Gleb Levitskiy `. - |Efficiency| The implementation of `fit` for :class:`preprocessing.PolynomialFeatures` transformer is now faster. This is especially noticeable on large sparse input. :pr:`19734` by :user:`Fred Robinson `. - |Fix| The :func:`preprocessing.StandardScaler.inverse_transform` method now raises error when the input data is 1D. :pr:`19752` by :user:`Zhehao Liu `. - |Fix| :func:`preprocessing.scale`, :class:`preprocessing.StandardScaler` and similar scalers detect near-constant features to avoid scaling them to very large values. This problem happens in particular when using a scaler on sparse data with a constant column with sample weights, in which case centering is typically disabled. :pr:`19527` by :user:`Oliver Grisel ` and :user:`Maria Telenczuk ` and :pr:`19788` by :user:`Jérémie du Boisberranger `. - |Fix| :meth:`preprocessing.StandardScaler.inverse_transform` now correctly handles integer dtypes. :pr:`19356` by :user:`makoeppel`. - |Fix| :meth:`preprocessing.OrdinalEncoder.inverse_transform` is not supporting sparse matrix and raises the appropriate error message. :pr:`19879` by :user:`Guillaume Lemaitre `. - |Fix| The `fit` method of :class:`preprocessing.OrdinalEncoder` will not raise error when `handle_unknown='ignore'` and unknown categories are given to `fit`. :pr:`19906` by :user:`Zhehao Liu `. - |Fix| Fix a regression in :class:`preprocessing.OrdinalEncoder` where large Python numeric would raise an error due to overflow when casted to C type (`np.float64` or `np.int64`). :pr:`20727` by `Guillaume Lemaitre`_. - |Fix| :class:`preprocessing.FunctionTransformer` does not set `n_features_in_` based on the input to `inverse_transform`. :pr:`20961` by `Thomas Fan`_. - |API| The `n_input_features_` attribute of :class:`preprocessing.PolynomialFeatures` is deprecated in favor of `n_features_in_` and will be removed in 1.2. :pr:`20240` by :user:`Jérémie du Boisberranger `. :mod:`sklearn.svm` ................... - |API| The parameter `**params` of :func:`svm.OneClassSVM.fit` is deprecated and will be removed in 1.2. :pr:`20843` by :user:`Juan Martín Loyola `. :mod:`sklearn.tree` ................... - |Enhancement| Add `fontname` argument in :func:`tree.export_graphviz` for non-English characters. :pr:`18959` by :user:`Zero ` and :user:`wstates `. - |Fix| Improves compatibility of :func:`tree.plot_tree` with high DPI screens. :pr:`20023` by `Thomas Fan`_. - |Fix| Fixed a bug in :class:`tree.DecisionTreeClassifier`, :class:`tree.DecisionTreeRegressor` where a node could be split whereas it should not have been due to incorrect handling of rounding errors. :pr:`19336` by :user:`Jérémie du Boisberranger `. - |API| The `n_features_` attribute of :class:`tree.DecisionTreeClassifier`, :class:`tree.DecisionTreeRegressor`, :class:`tree.ExtraTreeClassifier` and :class:`tree.ExtraTreeRegressor` is deprecated in favor of `n_features_in_` and will be removed in 1.2. :pr:`20272` by :user:`Jérémie du Boisberranger `. :mod:`sklearn.utils` .................... - |Enhancement| Deprecated the default value of the `random_state=0` in :func:`~sklearn.utils.extmath.randomized_svd`. Starting in 1.2, the default value of `random_state` will be set to `None`. :pr:`19459` by :user:`Cindy Bezuidenhout ` and :user:`Clifford Akai-Nettey`. - |Enhancement| Added helper decorator :func:`utils.metaestimators.available_if` to provide flexibility in metaestimators making methods available or unavailable on the basis of state, in a more readable way. :pr:`19948` by `Joel Nothman`_. - |Enhancement| :func:`utils.validation.check_is_fitted` now uses ``__sklearn_is_fitted__`` if available, instead of checking for attributes ending with an underscore. This also makes :class:`pipeline.Pipeline` and :class:`preprocessing.FunctionTransformer` pass ``check_is_fitted(estimator)``. :pr:`20657` by `Adrin Jalali`_. - |Fix| Fixed a bug in :func:`utils.sparsefuncs.mean_variance_axis` where the precision of the computed variance was very poor when the real variance is exactly zero. :pr:`19766` by :user:`Jérémie du Boisberranger `. - |Fix| The docstrings of properties that are decorated with :func:`utils.deprecated` are now properly wrapped. :pr:`20385` by `Thomas Fan`_. - |Fix| `utils.stats._weighted_percentile` now correctly ignores zero-weighted observations smaller than the smallest observation with positive weight for ``percentile=0``. Affected classes are :class:`dummy.DummyRegressor` for ``quantile=0`` and `ensemble.HuberLossFunction` and `ensemble.HuberLossFunction` for ``alpha=0``. :pr:`20528` by :user:`Malte Londschien `. - |Fix| :func:`utils._safe_indexing` explicitly takes a dataframe copy when integer indices are provided avoiding to raise a warning from Pandas. This warning was previously raised in resampling utilities and functions using those utilities (e.g. :func:`model_selection.train_test_split`, :func:`model_selection.cross_validate`, :func:`model_selection.cross_val_score`, :func:`model_selection.cross_val_predict`). :pr:`20673` by :user:`Joris Van den Bossche `. - |Fix| Fix a regression in `utils.is_scalar_nan` where large Python numbers would raise an error due to overflow in C types (`np.float64` or `np.int64`). :pr:`20727` by `Guillaume Lemaitre`_. - |Fix| Support for `np.matrix` is deprecated in :func:`~sklearn.utils.check_array` in 1.0 and will raise a `TypeError` in 1.2. :pr:`20165` by `Thomas Fan`_. - |API| `utils._testing.assert_warns` and `utils._testing.assert_warns_message` are deprecated in 1.0 and will be removed in 1.2. Used `pytest.warns` context manager instead. Note that these functions were not documented and part from the public API. :pr:`20521` by :user:`Olivier Grisel `. - |API| Fixed several bugs in `utils.graph.graph_shortest_path`, which is now deprecated. Use `scipy.sparse.csgraph.shortest_path` instead. :pr:`20531` by `Tom Dupre la Tour`_. .. rubric:: Code and documentation contributors Thanks to everyone who has contributed to the maintenance and improvement of the project since version 0.24, including: Abdulelah S. Al Mesfer, Abhinav Gupta, Adam J. Stewart, Adam Li, Adam Midvidy, Adrian Garcia Badaracco, Adrian Sadłocha, Adrin Jalali, Agamemnon Krasoulis, Alberto Rubiales, Albert Thomas, Albert Villanova del Moral, Alek Lefebvre, Alessia Marcolini, Alexandr Fonari, Alihan Zihna, Aline Ribeiro de Almeida, Amanda, Amanda Dsouza, Amol Deshmukh, Ana Pessoa, Anavelyz, Andreas Mueller, Andrew Delong, Ashish, Ashvith Shetty, Atsushi Nukariya, Aurélien Geron, Avi Gupta, Ayush Singh, baam, BaptBillard, Benjamin Pedigo, Bertrand Thirion, Bharat Raghunathan, bmalezieux, Brian Rice, Brian Sun, Bruno Charron, Bryan Chen, bumblebee, caherrera-meli, Carsten Allefeld, CeeThinwa, Chiara Marmo, chrissobel, Christian Lorentzen, Christopher Yeh, Chuliang Xiao, Clément Fauchereau, cliffordEmmanuel, Conner Shen, Connor Tann, David Dale, David Katz, David Poznik, Dimitri Papadopoulos Orfanos, Divyanshu Deoli, dmallia17, Dmitry Kobak, DS_anas, Eduardo Jardim, EdwinWenink, EL-ATEIF Sara, Eleni Markou, EricEllwanger, Eric Fiegel, Erich Schubert, Ezri-Mudde, Fatos Morina, Felipe Rodrigues, Felix Hafner, Fenil Suchak, flyingdutchman23, Flynn, Fortune Uwha, Francois Berenger, Frankie Robertson, Frans Larsson, Frederick Robinson, frellwan, Gabriel S Vicente, Gael Varoquaux, genvalen, Geoffrey Thomas, geroldcsendes, Gleb Levitskiy, Glen, Glòria Macià Muñoz, gregorystrubel, groceryheist, Guillaume Lemaitre, guiweber, Haidar Almubarak, Hans Moritz Günther, Haoyin Xu, Harris Mirza, Harry Wei, Harutaka Kawamura, Hassan Alsawadi, Helder Geovane Gomes de Lima, Hugo DEFOIS, Igor Ilic, Ikko Ashimine, Isaack Mungui, Ishaan Bhat, Ishan Mishra, Iván Pulido, iwhalvic, J Alexander, Jack Liu, James Alan Preiss, James Budarz, James Lamb, Jannik, Jeff Zhao, Jennifer Maldonado, Jérémie du Boisberranger, Jesse Lima, Jianzhu Guo, jnboehm, Joel Nothman, JohanWork, John Paton, Jonathan Schneider, Jon Crall, Jon Haitz Legarreta Gorroño, Joris Van den Bossche, José Manuel Nápoles Duarte, Juan Carlos Alfaro Jiménez, Juan Martin Loyola, Julien Jerphanion, Julio Batista Silva, julyrashchenko, JVM, Kadatatlu Kishore, Karen Palacio, Kei Ishikawa, kmatt10, kobaski, Kot271828, Kunj, KurumeYuta, kxytim, lacrosse91, LalliAcqua, Laveen Bagai, Leonardo Rocco, Leonardo Uieda, Leopoldo Corona, Loic Esteve, LSturtew, Luca Bittarello, Luccas Quadros, Lucy Jiménez, Lucy Liu, ly648499246, Mabu Manaileng, Manimaran, makoeppel, Marco Gorelli, Maren Westermann, Mariangela, Maria Telenczuk, marielaraj, Martin Hirzel, Mateo Noreña, Mathieu Blondel, Mathis Batoul, mathurinm, Matthew Calcote, Maxime Prieur, Maxwell, Mehdi Hamoumi, Mehmet Ali Özer, Miao Cai, Michal Karbownik, michalkrawczyk, Mitzi, mlondschien, Mohamed Haseeb, Mohamed Khoualed, Muhammad Jarir Kanji, murata-yu, Nadim Kawwa, Nanshan Li, naozin555, Nate Parsons, Neal Fultz, Nic Annau, Nicolas Hug, Nicolas Miller, Nico Stefani, Nigel Bosch, Nikita Titov, Nodar Okroshiashvili, Norbert Preining, novaya, Ogbonna Chibuike Stephen, OGordon100, Oliver Pfaffel, Olivier Grisel, Oras Phongpanangam, Pablo Duque, Pablo Ibieta-Jimenez, Patric Lacouth, Paulo S. Costa, Paweł Olszewski, Peter Dye, PierreAttard, Pierre-Yves Le Borgne, PranayAnchuri, Prince Canuma, putschblos, qdeffense, RamyaNP, ranjanikrishnan, Ray Bell, Rene Jean Corneille, Reshama Shaikh, ricardojnf, RichardScottOZ, Rodion Martynov, Rohan Paul, Roman Lutz, Roman Yurchak, Samuel Brice, Sandy Khosasi, Sean Benhur J, Sebastian Flores, Sebastian Pölsterl, Shao Yang Hong, shinehide, shinnar, shivamgargsya, Shooter23, Shuhei Kayawari, Shyam Desai, simonamaggio, Sina Tootoonian, solosilence, Steven Kolawole, Steve Stagg, Surya Prakash, swpease, Sylvain Marié, Takeshi Oura, Terence Honles, TFiFiE, Thomas A Caswell, Thomas J. Fan, Tim Gates, TimotheeMathieu, Timothy Wolodzko, Tim Vink, t-jakubek, t-kusanagi, tliu68, Tobias Uhmann, tom1092, Tomás Moreyra, Tomás Ronald Hughes, Tom Dupré la Tour, Tommaso Di Noto, Tomohiro Endo, TONY GEORGE, Toshihiro NAKAE, tsuga, Uttam kumar, vadim-ushtanit, Vangelis Gkiastas, Venkatachalam N, Vilém Zouhar, Vinicius Rios Fuck, Vlasovets, waijean, Whidou, xavier dupré, xiaoyuchai, Yasmeen Alsaedy, yoch, Yosuke KOBAYASHI, Yu Feng, YusukeNagasaka, yzhenman, Zero, ZeyuSun, ZhaoweiWang, Zito, Zito Relova