Skip to content

Latest commit

 

History

History
707 lines (549 loc) · 30.2 KB

v0.22.rst

File metadata and controls

707 lines (549 loc) · 30.2 KB

sklearn

Version 0.22.0

In Development

For a short description of the main highlights of the release, please refer to sphx_glr_auto_examples_release_highlights_plot_release_highlights_0_22_0.py.

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.

  • cluster.KMeans when n_jobs=1.
  • decomposition.SparseCoder, decomposition.DictionaryLearning, and decomposition.MiniBatchDictionaryLearning
  • decomposition.SparseCoder with algorithm='lasso_lars'
  • decomposition.SparsePCA where normalize_components has no effect due to deprecation.
  • ensemble.HistGradientBoostingClassifier and ensemble.HistGradientBoostingRegressor , , .
  • impute.IterativeImputer when X has features with no missing values.
  • linear_model.Ridge when X is sparse.
  • model_selection.StratifiedKFold and any use of cv=int with a classifier.

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

sklearn.base

  • From version 0.24 base.BaseEstimator.get_params will raise an AttributeError rather than return None for parameters that are in the estimator's constructor but not stored as attributes on the instance. 14464 by Joel Nothman.

sklearn.calibration

  • Fixed a bug that made calibration.CalibratedClassifierCV fail when given a sample_weight parameter of type list (in the case where sample_weights are not supported by the wrapped estimator). 13575 by William de Vazelhes <wdevazelhes>.

sklearn.cluster

  • cluster.SpectralClustering now accepts precomputed sparse neighbors graph as input. 10482 by Tom Dupre la Tour and Kumar Ashutosh <thechargedneutron>.
  • cluster.SpectralClustering now accepts a n_components parameter. This parameter extends SpectralClustering class functionality to match cluster.spectral_clustering. 13726 by Shuzhe Xiao <fdas3213>.
  • Fixed a bug where cluster.KMeans produced inconsistent results between n_jobs=1 and n_jobs>1 due to the handling of the random state. 9288 by Bryan Yang <bryanyang0528>.
  • Fixed a bug where elkan algorithm in cluster.KMeans was producing Segmentation Fault on large arrays due to integer index overflow. 15057 by Vladimir Korolev <balodja>.
  • ~cluster.MeanShift now accepts a max_iter with a default value of 300 instead of always using the default 300. It also now exposes an n_iter_ indicating the maximum number of iterations performed on each seed. 15120 by Adrin Jalali.

sklearn.compose

  • Fixed a bug in compose.ColumnTransformer which failed to select the proper columns when using a boolean list, with NumPy older than 1.12. 14510 by Guillaume Lemaitre <glemaitre>.
  • Fixed a bug in compose.TransformedTargetRegressor which did not pass **fit_params to the underlying regressor. 14890 by Miguel Cabrera <mfcabrera>.

sklearn.cross_decomposition

  • Fixed a bug where cross_decomposition.PLSCanonical and cross_decomposition.PLSRegression were raising an error when fitted with a target matrix Y in which the first column was constant. 13609 by Camila Williamson <camilaagw>.

sklearn.datasets

  • datasets.fetch_openml now supports heterogeneous data using pandas by setting as_frame=True. 13902 by Thomas Fan.
  • The parameter return_X_y was added to datasets.fetch_20newsgroups and datasets.fetch_olivetti_faces . 14259 by Sourav Singh <souravsingh>.
  • datasets.make_classification now accepts array-like weights parameter, i.e. list or numpy.array, instead of list only. 14764 by Cat Chenal <CatChenal>.
  • Fixed a bug in datasets.fetch_openml, which failed to load an OpenML dataset that contains an ignored feature. 14623 by Sarra Habchi <HabchiSarra>.

sklearn.decomposition

  • decomposition.dict_learning() and decomposition.dict_learning_online() now accept method_max_iter and pass it to decomposition.sparse_encode. 12650 by Adrin Jalali.
  • decomposition.SparseCoder, decomposition.DictionaryLearning, and decomposition.MiniBatchDictionaryLearning now take a transform_max_iter parameter and pass it to either decomposition.dict_learning() or decomposition.sparse_encode(). 12650 by Adrin Jalali.
  • decomposition.IncrementalPCA now accepts sparse matrices as input, converting them to dense in batches thereby avoiding the need to store the entire dense matrix at once. 13960 by Scott Gigante <scottgigante>.
  • decomposition.sparse_encode() now passes the max_iter to the underlying linear_model.LassoLars when algorithm='lasso_lars'. 12650 by Adrin Jalali.

sklearn.dummy

  • dummy.DummyClassifier now handles checking the existence of the provided constant in multiouput cases. 14908 by Martina G. Vilas <martinagvilas>.
  • The outputs_2d_ attribute is deprecated in dummy.DummyClassifier and dummy.DummyRegressor. It is equivalent to n_outputs > 1. 14933 by Nicolas Hug

sklearn.ensemble

  • Added ensemble.StackingClassifier and ensemble.StackingRegressor to stack predictors using a final classifier or regressor. 11047 by Guillaume Lemaitre <glemaitre> and Caio Oliveira <caioaao>.
  • Many improvements were made to ensemble.HistGradientBoostingClassifier and ensemble.HistGradientBoostingRegressor:

    • Estimators now natively support dense data with missing values both for training and predicting. They also support infinite values. 13911 and 14406 by Nicolas Hug, Adrin Jalali and Olivier Grisel.
    • Estimators now have an additional warm_start parameter that enables warm starting. 14012 by Johann Faouzi <johannfaouzi>.
    • for ensemble.HistGradientBoostingClassifier the training loss or score is now monitored on a class-wise stratified subsample to preserve the class balance of the original training set. 14194 by Johann Faouzi <johannfaouzi>.
    • inspection.partial_dependence and inspection.plot_partial_dependence now support the fast 'recursion' method for both estimators. 13769 by Nicolas Hug.
    • ensemble.HistGradientBoostingRegressor now supports the 'least_absolute_deviation' loss. 13896 by Nicolas Hug.
    • Estimators now bin the training and validation data separately to avoid any data leak. 13933 by Nicolas Hug.
    • Fixed a bug where early stopping would break with string targets. 14710 by Guillaume Lemaitre <glemaitre>.
    • ensemble.HistGradientBoostingClassifier now raises an error if categorical_crossentropy loss is given for a binary classification problem. 14869 by Adrin Jalali.

    Note that pickles from 0.21 will not work in 0.22.

  • ensemble.VotingClassifier.predict_proba will no longer be present when voting='hard'. 14287 by Thomas Fan.
  • Run by default utils.estimator_checks.check_estimator on both ensemble.VotingClassifier and ensemble.VotingRegressor. It leads to solve issues regarding shape consistency during predict which was failing when the underlying estimators were not outputting consistent array dimensions. Note that it should be replaced by refactoring the common tests in the future. 14305 by Guillaume Lemaitre <glemaitre>.
  • ensemble.AdaBoostClassifier computes probabilities based on the decision function as in the literature. Thus, predict and predict_proba give consistent results. 14114 by Guillaume Lemaitre <glemaitre>.
  • presort is now deprecated in ensemble.GradientBoostingClassifier and ensemble.GradientBoostingRegressor, and the parameter has no effect. Users are recommended to use ensemble.HistGradientBoostingClassifier and ensemble.HistGradientBoostingRegressor instead. 14907 by Adrin Jalali.
  • Addition of max_samples argument allows limiting size of bootstrap samples to be less than size of dataset. Added to ensemble.ForestClassifier, ensemble.ForestRegressor, ensemble.RandomForestClassifier, ensemble.RandomForestRegressor, ensemble.ExtraTreesClassifier, ensemble.ExtraTreesRegressor, ensemble.RandomTreesEmbedding. 14682 by Matt Hancock <notmatthancock> and 5963 by Pablo Duboue <DrDub>.
  • Stacking and Voting estimators now ensure that their underlying estimators are either all classifiers or all regressors. ensemble.StackingClassifier, ensemble.StackingRegressor, and ensemble.VotingClassifier and VotingRegressor now raise consistent error messages. 15084 by Guillaume Lemaitre <glemaitre>.

sklearn.feature_extraction

  • A warning will now be raised if a parameter choice means that another parameter will be unused on calling the fit() method for feature_extraction.text.HashingVectorizer, feature_extraction.text.CountVectorizer and feature_extraction.text.TfidfVectorizer. 14602 by Gaurav Chawla <getgaurav2>.
  • Functions created by build_preprocessor and build_analyzer of feature_extraction.text.VectorizerMixin can now be pickled. 14430 by Dillon Niederhut <deniederhut>.
  • Deprecated unused copy param for feature_extraction.text.TfidfVectorizer.transform it will be removed in v0.24. 14520 by Guillem G. Subies <guillemgsubies>.
  • feature_extraction.text.strip_accents_unicode now correctly removes accents from strings that are in NFKD normalized form. 15100 by Daniel Grady <DGrady>.

sklearn.feature_selection

  • Fixed a bug where feature_selection.VarianceThreshold with threshold=0 did not remove constant features due to numerical instability, by using range rather than variance in this case. 13704 by Roddy MacSween <rlms>.

sklearn.gaussian_process

  • gaussian_process.GaussianProcessClassifier.log_marginal_likelihood and gaussian_process.GaussianProcessRegressor.log_marginal_likelihood now accept a clone_kernel=True keyword argument. When set to False, the kernel attribute is modified, but may result in a performance improvement. 14378 by Masashi Shibata <c-bata>.
  • From version 0.24 gaussian_process.kernels.Kernel.get_params will raise an AttributeError rather than return None for parameters that are in the estimator's constructor but not stored as attributes on the instance. 14464 by Joel Nothman.

sklearn.impute

  • Added impute.KNNImputer, to impute missing values using k-Nearest Neighbors. 12852 by Ashim Bhattarai <ashimb9> and Thomas Fan.
  • impute.IterativeImputer has new skip_compute flag that is False by default, which, when True, will skip computation on features that have no missing values during the fit phase. 13773 by Sergey Feldman <sergeyf>.
  • impute.IterativeImputer now works when there is only one feature. By Sergey Feldman <sergeyf>.
  • impute.MissingIndicator.fit_transform avoid repeated computation of the masked matrix. 14356 by Harsh Soni <harsh020>.

sklearn.inspection

  • inspection.permutation_importance has been added to measure the importance of each feature in an arbitrary trained model with respect to a given scoring function. 13146 by Thomas Fan.
  • inspection.partial_dependence and inspection.plot_partial_dependence now support the fast 'recursion' method for ensemble.HistGradientBoostingClassifier and ensemble.HistGradientBoostingRegressor. 13769 by Nicolas Hug.

sklearn.kernel_approximation

  • Fixed a bug where kernel_approximation.Nystroem raised a KeyError when using kernel="precomputed". 14706 by Venkatachalam N <venkyyuvy>.

sklearn.linear_model

  • linear_model.BayesianRidge now accepts hyperparameters alpha_init and lambda_init which can be used to set the initial value of the maximization procedure in fit. 13618 by Yoshihiro Uchida <c56pony>.
  • The 'liblinear' logistic regression solver is now faster and requires less memory. 14108, pr:14170, pr:14296 by Alex Henrie <alexhenrie>.
  • linear_model.Ridge now correctly fits an intercept when X is sparse, solver="auto" and fit_intercept=True, because the default solver in this configuration has changed to sparse_cg, which can fit an intercept with sparse data. 13995 by Jérôme Dockès <jeromedockes>.
  • linear_model.Ridge with solver='sag' now accepts F-ordered and non-contiguous arrays and makes a conversion instead of failing. 14458 by Guillaume Lemaitre <glemaitre>.
  • linear_model.LassoCV no longer forces precompute=False when fitting the final model. 14591 by Andreas Müller.
  • linear_model.RidgeCV and linear_model.RidgeClassifierCV now correctly scores when cv=None. 14864 by Venkatachalam N <venkyyuvy>.
  • Fixed a bug in linear_model.LogisticRegressionCV where the scores_, n_iter_ and coefs_paths_ attribute would have a wrong ordering with penalty='elastic-net'. 15044 by Nicolas Hug
  • linear_model.MultiTaskLassoCV and linear_model.MultiTaskElasticNetCV with X of dtype int and fit_intercept=True. 15086 by Alex Gramfort <agramfort>.

sklearn.manifold

  • manifold.Isomap, manifold.TSNE, and manifold.SpectralEmbedding now accept precomputed sparse neighbors graph as input. 10482 by Tom Dupre la Tour and Kumar Ashutosh <thechargedneutron>.
  • Exposed the n_jobs parameter in manifold.TSNE for multi-core calculation of the neighbors graph. This parameter has no impact when metric="precomputed" or (metric="euclidean" and method="exact"). 15082 by Roman Yurchak.
  • Deprecate training_data_ unused attribute in manifold.Isomap. 10482 by Tom Dupre la Tour.
  • Fixed a bug where manifold.spectral_embedding (and therefore manifold.SpectralEmbedding and cluster.SpectralClustering) computed wrong eigenvalues with eigen_solver='amg' when n_samples < 5 * n_components. 14647 by Andreas Müller.
  • Fixed a bug in manifold.spectral_embedding used in manifold.SpectralEmbedding and cluster.SpectralClustering where eigen_solver="amg" would sometimes result in a LinAlgError. 13393 by Andrew Knyazev <lobpcg> 13707 by Scott White <whitews>

sklearn.metrics

  • metrics.plot_roc_curve has been added to plot roc curves. This function introduces the visualization API described in the User Guide <visualizations>. 14357 by Thomas Fan.
  • Added the metrics.pairwise.nan_euclidean_distances metric, which calculates euclidean distances in the presence of missing values. 12852 by Ashim Bhattarai <ashimb9> and Thomas Fan.
  • New ranking metrics metrics.ndcg_score and metrics.dcg_score have been added to compute Discounted Cumulative Gain and Normalized Discounted Cumulative Gain. 9951 by Jérôme Dockès <jeromedockes>.
  • Added multiclass support to metrics.roc_auc_score. 12789 by Kathy Chen <kathyxchen>, Mohamed Maskani <maskani-moh>, and Thomas Fan <thomasjpfan>.
  • Add metrics.mean_tweedie_deviance measuring the Tweedie deviance for a power parameter power. Also add mean Poisson deviance metrics.mean_poisson_deviance and mean Gamma deviance metrics.mean_gamma_deviance that are special cases of the Tweedie deviance for power=1 and power=2 respectively. 13938 by Christian Lorentzen <lorentzenchr> and Roman Yurchak.
  • The parameter beta in metrics.fbeta_score is updated to accept the zero and float('+inf') value. 13231 by Dong-hee Na <corona10>.
  • Added parameter squared in metrics.mean_squared_error to return root mean squared error. 13467 by Urvang Patel <urvang96>.
  • Allow computing averaged metrics in the case of no true positives. 14595 by Andreas Müller.
  • Raise a ValueError in metrics.silhouette_score when a precomputed distance matrix contains non-zero diagonal entries. 12258 by Stephen Tierney <sjtrny>.
  • scoring="neg_brier_score" should be used instead of scoring="brier_score_loss" which is now deprecated. 14898 by Stefan Matcovici <stefan-matcovici>.
  • Improved performance of metrics.pairwise.manhattan_distances in the case of sparse matrices. 15049 by Paolo Toccaceli <ptocca>.

sklearn.model_selection

  • Improved performance of multimetric scoring in model_selection.cross_validate, model_selection.GridSearchCV, and model_selection.RandomizedSearchCV. 14593 by Thomas Fan.
  • model_selection.learning_curve now accepts parameter return_times which can be used to retrieve computation times in order to plot model scalability (see learning_curve example). 13938 by Hadrien Reboul <H4dr1en>.
  • model_selection.RandomizedSearchCV now accepts lists of parameter distributions. 14549 by Andreas Müller.
  • Reimplemented model_selection.StratifiedKFold to fix an issue where one test set could be n_classes larger than another. Test sets should now be near-equally sized. 14704 by Joel Nothman.

sklearn.multioutput

  • multioutput.MultiOutputClassifier now has attribute classes_. 14629 by Agamemnon Krasoulis <agamemnonc>.

sklearn.naive_bayes

  • Added naive_bayes.CategoricalNB that implements the Categorical Naive Bayes classifier. 12569 by Tim Bicker <timbicker> and Florian Wilhelm <FlorianWilhelm>.

sklearn.neighbors

  • Added neighbors.KNeighborsTransformer and neighbors.RadiusNeighborsTransformer, which transform input dataset into a sparse neighbors graph. They give finer control on nearest neighbors computations and enable easy pipeline caching for multiple use. 10482 by Tom Dupre la Tour.
  • neighbors.KNeighborsClassifier, neighbors.KNeighborsRegressor, neighbors.RadiusNeighborsClassifier, neighbors.RadiusNeighborsRegressor, and neighbors.LocalOutlierFactor now accept precomputed sparse neighbors graph as input. 10482 by Tom Dupre la Tour and Kumar Ashutosh <thechargedneutron>.
  • neighbors.RadiusNeighborsClassifier now supports predicting probabilities by using predict_proba and supports more outlier_label options: 'most_frequent', or different outlier_labels for multi-outputs. 9597 by Wenbo Zhao <webber26232>.
  • Efficiency improvements for neighbors.RadiusNeighborsClassifier.predict. 9597 by Wenbo Zhao <webber26232>.
  • neighbors.KNeighborsRegressor now throws error when metric='precomputed' and fit on non-square data. 14336 by Gregory Dexter <gdex1>.

sklearn.neural_network

  • Add max_fun parameter in neural_network.BaseMultilayerPerceptron, neural_network.MLPRegressor, and neural_network.MLPClassifier to give control over maximum number of function evaluation to not meet tol improvement. 9274 by Daniel Perry <daniel-perry>.

sklearn.pipeline

  • pipeline.Pipeline now supports score_samples if the final estimator does. 13806 by Anaël Beaugnon <ab-anssi>.
  • None as a transformer is now deprecated in pipeline.FeatureUnion. Please use 'drop' instead. 15053 by Thomas Fan.
  • The fit in ~pipeline.FeatureUnion now accepts fit_params to pass to the underlying transformers. 15119 by Adrin Jalali.

sklearn.preprocessing

  • Avoid unnecessary data copy when fitting preprocessors preprocessing.StandardScaler, preprocessing.MinMaxScaler, preprocessing.MaxAbsScaler, preprocessing.RobustScaler and preprocessing.QuantileTransformer which results in a slight performance improvement. 13987 by Roman Yurchak.
  • KernelCenterer now throws error when fit on non-square preprocessing.KernelCenterer 14336 by Gregory Dexter <gdex1>.

sklearn.svm

  • svm.SVC and svm.NuSVC now accept a break_ties parameter. This parameter results in predict breaking the ties according to the confidence values of decision_function, if decision_function_shape='ovr', and the number of target classes > 2. 12557 by Adrin Jalali.
  • SVM estimators now throw a more specific error when kernel='precomputed' and fit on non-square data. 14336 by Gregory Dexter <gdex1>.
  • svm.SVC, svm.SVR, svm.NuSVR and svm.OneClassSVM when received values negative or zero for parameter sample_weight in method fit(), generated an invalid model. This behavior occured only in some border scenarios. Now in these cases, fit() will fail with an Exception. 14286 by Alex Shacked <alexshacked>.
  • The n_support_ attribute of svm.SVR and svm.OneClassSVM was previously non-initialized, and had size 2. It has now size 1 with the correct value. 15099 by Nicolas Hug.
  • fixed a bug in BaseLibSVM._sparse_fit where n_SV=0 raised a ZeroDivisionError. 14894 by Danna Naser <danna-naser>.

sklearn.tree

  • Adds minimal cost complexity pruning, controlled by ccp_alpha, to tree.DecisionTreeClassifier, tree.DecisionTreeRegressor, tree.ExtraTreeClassifier, tree.ExtraTreeRegressor, ensemble.RandomForestClassifier, ensemble.RandomForestRegressor, ensemble.ExtraTreesClassifier, ensemble.ExtraTreesRegressor, ensemble.RandomTreesEmbedding, ensemble.GradientBoostingClassifier, and ensemble.GradientBoostingRegressor. 12887 by Thomas Fan.
  • presort is now deprecated in tree.DecisionTreeClassifier and tree.DecisionTreeRegressor, and the parameter has no effect. 14907 by Adrin Jalali.
  • The classes_ and n_classes_ attributes of tree.DecisionTreeRegressor are now deprecated. 15028 by Mei Guan <meiguan>, Nicolas Hug, and Adrin Jalali.

sklearn.utils

  • ~utils.estimator_checks.check_estimator can now generate checks by setting generate_only=True. Previously, running ~utils.estimator_checks.check_estimator will stop when the first check fails. With generate_only=True, all checks can run independently and report the ones that are failing. Read more in rolling_your_own_estimator. 14381 by Thomas Fan.
  • Added a pytest specific decorator, ~utils.estimator_checks.parametrize_with_checks, to parametrize estimator checks for a list of estimators. 14381 by Thomas Fan.
  • The following utils have been deprecated and are now private:
    • choose_check_classifiers_labels
    • enforce_estimator_tags_y
    • `optimize.newton_cg
    • random.random_choice_csc
    • safe_indexing
  • A new random variable, utils.fixes.loguniform implements a log-uniform random variable (e.g., for use in RandomizedSearchCV). For example, the outcomes 1, 10 and 100 are all equally likely for loguniform(1, 100). See 11232 by Scott Sievert <stsievert> and Nathaniel Saul <sauln>, and SciPy PR 10815 <scipy/scipy#10815>.
  • utils.safe_indexing (now deprecated) accepts an axis parameter to index array-like across rows and columns. The column indexing can be done on NumPy array, SciPy sparse matrix, and Pandas DataFrame. An additional refactoring was done. 14035 and 14475 by Guillaume Lemaitre <glemaitre>.
  • utils.extmath.safe_sparse_dot works between 3D+ ndarray and sparse matrix. 14538 by Jérémie du Boisberranger <jeremiedbb>.
  • utils.check_array is now raising an error instead of casting NaN to integer. 14872 by Roman Yurchak.
  • utils.check_array will now correctly detect numeric dtypes in pandas dataframes, fixing a bug where float32 was upcast to float64 unnecessarily. 15094 by Andreas Müller.
  • The following utils have been deprecated and are now private:
    • choose_check_classifiers_labels
    • enforce_estimator_tags_y
    • mocking.MockDataFrame
    • mocking.CheckingClassifier
    • `optimize.newton_cg
    • random.random_choice_csc

sklearn.isotonic

  • Fixed a bug where isotonic.IsotonicRegression.fit raised error when X.dtype == 'float32' and X.dtype != y.dtype. 14902 by Lucas <lostcoaster>.

Miscellaneous

  • Replace manual checks with check_is_fitted. Errors thrown when using a non-fitted estimators are now more uniform. 13013 by Agamemnon Krasoulis <agamemnonc>.
  • Port lobpcg from SciPy which implement some bug fixes but only available in 1.3+. 13609 by Guillaume Lemaitre <glemaitre>.

Changes to estimator checks

These changes mostly affect library developers.

  • Estimators are now expected to raise a NotFittedError if predict or transform is called before fit; previously an AttributeError or ValueError was acceptable. 13013 by by Agamemnon Krasoulis <agamemnonc>.
  • Binary only classifiers are now supported in estimator checks. Such classifiers need to have the binary_only=True estimator tag. 13875 by Trevor Stephens.
  • requires_positive_X estimator tag (for models that require X to be non-negative) is now used by utils.estimator_checks.check_estimator to make sure a proper error message is raised if X contains some negative entries. 14680 by Alex Gramfort <agramfort>.
  • Added check that pairwise estimators raise error on non-square data 14336 by Gregory Dexter <gdex1>.
  • Added two common multioutput estimator tests ~utils.estimator_checks.check_classifier_multioutput and ~utils.estimator_checks.check_regressor_multioutput. 13392 by Rok Mihevc <rok>.
  • Added check_transformer_data_not_an_array to checks where missing