Version 1.3¶
For a short description of the main highlights of the release, please refer to Release Highlights for scikit-learn 1.3.
Legend for changelogs
Major Feature something big that you couldn’t do before.
Feature something that you couldn’t do before.
Efficiency an existing feature now may not require as much computation or memory.
Enhancement a miscellaneous minor improvement.
Fix something that previously didn’t work as documented – or according to reasonable expectations – should now work.
API Change you will need to change your code to have the same effect in the future; or a feature will be removed in the future.
Version 1.3.2¶
October 2023
Changelog¶
sklearn.datasets
¶
Fix All dataset fetchers now accept
data_home
as any object that implements theos.PathLike
interface, for instance,pathlib.Path
. #27468 by Yao Xiao.
sklearn.decomposition
¶
Fix Fixes a bug in
decomposition.KernelPCA
by forcing the output of the internalpreprocessing.KernelCenterer
to be a default array. When the arpack solver is used, it expects an array with adtype
attribute. #27583 by Guillaume Lemaitre.
sklearn.metrics
¶
Fix Fixes a bug for metrics using
zero_division=np.nan
(e.g.precision_score
) within a paralell loop (e.g.cross_val_score
) where the singleton fornp.nan
will be different in the sub-processes. #27573 by Guillaume Lemaitre.
sklearn.tree
¶
Fix Do not leak data via non-initialized memory in decision tree pickle files and make the generation of those files deterministic. #27580 by Loïc Estève.
Version 1.3.1¶
September 2023
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 Ridge models with
solver='sparse_cg'
may have slightly different results with scipy>=1.12, because of an underlying change in the scipy solver (see scipy#18488 for more details) #26814 by Loïc Estève
Changes impacting all modules¶
Fix The
set_output
API correctly works with list input. #27044 by Thomas Fan.
Changelog¶
sklearn.calibration
¶
Fix
calibration.CalibratedClassifierCV
can now handle models that produce large prediction scores. Before it was numerically unstable. #26913 by Omar Salman.
sklearn.cluster
¶
Fix
cluster.BisectingKMeans
could crash when predicting on data with a different scale than the data used to fit the model. #27167 by Olivier Grisel.Fix
cluster.BisectingKMeans
now works with data that has a single feature. #27243 by Jérémie du Boisberranger.
sklearn.cross_decomposition
¶
Fix
cross_decomposition.PLSRegression
now automatically ravels the output ofpredict
if fitted with one dimensionaly
. #26602 by Yao Xiao.
sklearn.ensemble
¶
Fix Fix a bug in
ensemble.AdaBoostClassifier
withalgorithm="SAMME"
where the decision function of each weak learner should be symmetric (i.e. the sum of the scores should sum to zero for a sample). #26521 by Guillaume Lemaitre.
sklearn.feature_selection
¶
Fix
feature_selection.mutual_info_regression
now correctly computes the result whenX
is of integer dtype. #26748 by Yao Xiao.
sklearn.impute
¶
Fix
impute.KNNImputer
now correctly adds a missing indicator column intransform
whenadd_indicator
is set toTrue
and missing values are observed duringfit
. #26600 by Shreesha Kumar Bhat.
sklearn.metrics
¶
Fix Scorers used with
metrics.get_scorer
handle properly multilabel-indicator matrix. #27002 by Guillaume Lemaitre.
sklearn.mixture
¶
Fix The initialization of
mixture.GaussianMixture
from user-providedprecisions_init
forcovariance_type
offull
ortied
was not correct, and has been fixed. #26416 by Yang Tao.
sklearn.neighbors
¶
Fix
neighbors.KNeighborsClassifier.predict
no longer raises an exception forpandas.DataFrames
input. #26772 by Jérémie du Boisberranger.Fix Reintroduce
sklearn.neighbors.BallTree.valid_metrics
andsklearn.neighbors.KDTree.valid_metrics
as public class attributes. #26754 by Julien Jerphanion.Fix
sklearn.model_selection.HalvingRandomSearchCV
no longer raises when the input to theparam_distributions
parameter is a list of dicts. #26893 by Stefanie Senger.Fix Neighbors based estimators now correctly work when
metric="minkowski"
and the metric parameterp
is in the range0 < p < 1
, regardless of thedtype
ofX
. #26760 by Shreesha Kumar Bhat.
sklearn.preprocessing
¶
Fix
preprocessing.LabelEncoder
correctly acceptsy
as a keyword argument. #26940 by Thomas Fan.Fix
preprocessing.OneHotEncoder
shows a more informative error message whensparse_output=True
and the output is configured to be pandas. #26931 by Thomas Fan.
sklearn.tree
¶
Fix
tree.plot_tree
now acceptsclass_names=True
as documented. #26903 by Thomas RoehrFix The
feature_names
parameter oftree.plot_tree
now accepts any kind of array-like instead of just a list. #27292 by Rahil Parikh.
Version 1.3.0¶
June 2023
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.
Enhancement
multiclass.OutputCodeClassifier.predict
now uses a more efficient pairwise distance reduction. As a consequence, the tie-breaking strategy is different and thus the predicted labels may be different. #25196 by Guillaume Lemaitre.Enhancement The
fit_transform
method ofdecomposition.DictionaryLearning
is more efficient but may produce different results as in previous versions whentransform_algorithm
is not the same asfit_algorithm
and the number of iterations is small. #24871 by Omar Salman.Enhancement The
sample_weight
parameter now will be used in centroids initialization forcluster.KMeans
,cluster.BisectingKMeans
andcluster.MiniBatchKMeans
. This change will break backward compatibility, since numbers generated from same random seeds will be different. #25752 by Gleb Levitski, Jérémie du Boisberranger, Guillaume Lemaitre.Fix Treat more consistently small values in the
W
andH
matrices during thefit
andtransform
steps ofdecomposition.NMF
anddecomposition.MiniBatchNMF
which can produce different results than previous versions. #25438 by Yotam Avidar-Constantini.Fix
decomposition.KernelPCA
may produce different results throughinverse_transform
ifgamma
isNone
. Now it will be chosen correctly as1/n_features
of the data that it is fitted on, while previously it might be incorrectly chosen as1/n_features
of the data passed toinverse_transform
. A new attributegamma_
is provided for revealing the actual value ofgamma
used each time the kernel is called. #26337 by Yao Xiao.
Changed displays¶
Enhancement
model_selection.LearningCurveDisplay
displays both the train and test curves by default. You can setscore_type="test"
to keep the past behaviour. #25120 by Guillaume Lemaitre.Fix
model_selection.ValidationCurveDisplay
now accepts passing a list to theparam_range
parameter. #27311 by Arturo Amor.
Changes impacting all modules¶
Enhancement The
get_feature_names_out
method of the following classes now raises aNotFittedError
if the instance is not fitted. This ensures the error is consistent in all estimators with theget_feature_names_out
method.The
NotFittedError
displays an informative message asking to fit the instance with the appropriate arguments.#25294, #25308, #25291, #25367, #25402, by John Pangas, Rahil Parikh , and Alex Buzenet.
Enhancement Added a multi-threaded Cython routine to the compute squared Euclidean distances (sometimes followed by a fused reduction operation) for a pair of datasets consisting of a sparse CSR matrix and a dense NumPy.
This can improve the performance of following functions and estimators:
A typical example of this performance improvement happens when passing a sparse CSR matrix to the
predict
ortransform
method of estimators that rely on a dense NumPy representation to store their fitted parameters (or the reverse).For instance,
sklearn.neighbors.NearestNeighbors.kneighbors
is now up to 2 times faster for this case on commonly available laptops.Enhancement All estimators that internally rely on OpenMP multi-threading (via Cython) now use a number of threads equal to the number of physical (instead of logical) cores by default. In the past, we observed that using as many threads as logical cores on SMT hosts could sometimes cause severe performance problems depending on the algorithms and the shape of the data. Note that it is still possible to manually adjust the number of threads used by OpenMP as documented in Parallelism.
Experimental / Under Development¶
Major Feature Metadata routing’s related base methods are included in this release. This feature is only available via the
enable_metadata_routing
feature flag which can be enabled usingsklearn.set_config
andsklearn.config_context
. For now this feature is mostly useful for third party developers to prepare their code base for metadata routing, and we strongly recommend that they also hide it behind the same feature flag, rather than having it enabled by default. #24027 by Adrin Jalali, Benjamin Bossan, and Omar Salman.
Changelog¶
sklearn
¶
Feature Added a new option
skip_parameter_validation
, to the functionsklearn.set_config
and context managersklearn.config_context
, that allows to skip the validation of the parameters passed to the estimators and public functions. This can be useful to speed up the code but should be used with care because it can lead to unexpected behaviors or raise obscure error messages when setting invalid parameters. #25815 by Jérémie du Boisberranger.
sklearn.base
¶
Feature A
__sklearn_clone__
protocol is now available to override the default behavior ofbase.clone
. #24568 by Thomas Fan.Fix
base.TransformerMixin
now currently keeps a namedtuple’s class iftransform
returns a namedtuple. #26121 by Thomas Fan.
sklearn.calibration
¶
Fix
calibration.CalibratedClassifierCV
now does not enforce sample alignment onfit_params
. #25805 by Adrin Jalali.
sklearn.cluster
¶
Major Feature Added
cluster.HDBSCAN
, a modern hierarchical density-based clustering algorithm. Similarly tocluster.OPTICS
, it can be seen as a generalization ofcluster.DBSCAN
by allowing for hierarchical instead of flat clustering, however it varies in its approach fromcluster.OPTICS
. This algorithm is very robust with respect to its hyperparameters’ values and can be used on a wide variety of data without much, if any, tuning.This implementation is an adaptation from the original implementation of HDBSCAN in scikit-learn-contrib/hdbscan, by Leland McInnes et al.
Enhancement The
sample_weight
parameter now will be used in centroids initialization forcluster.KMeans
,cluster.BisectingKMeans
andcluster.MiniBatchKMeans
. This change will break backward compatibility, since numbers generated from same random seeds will be different. #25752 by Gleb Levitski, Jérémie du Boisberranger, Guillaume Lemaitre.Fix
cluster.KMeans
,cluster.MiniBatchKMeans
andcluster.k_means
now correctly handle the combination ofn_init="auto"
andinit
being an array-like, running one initialization in that case. #26657 by Binesh Bannerjee.API Change The
sample_weight
parameter inpredict
forcluster.KMeans.predict
andcluster.MiniBatchKMeans.predict
is now deprecated and will be removed in v1.5. #25251 by Gleb Levitski.API Change The
Xred
argument incluster.FeatureAgglomeration.inverse_transform
is renamed toXt
and will be removed in v1.5. #26503 by Adrin Jalali.
sklearn.compose
¶
Fix
compose.ColumnTransformer
raises an informative error when the individual transformers ofColumnTransformer
output pandas dataframes with indexes that are not consistent with each other and the output is configured to be pandas. #26286 by Thomas Fan.Fix
compose.ColumnTransformer
correctly sets the output of the remainder whenset_output
is called. #26323 by Thomas Fan.
sklearn.covariance
¶
Fix Allows
alpha=0
incovariance.GraphicalLasso
to be consistent withcovariance.graphical_lasso
. #26033 by Genesis Valencia.Fix
covariance.empirical_covariance
now gives an informative error message when input is not appropriate. #26108 by Quentin Barthélemy.API Change Deprecates
cov_init
incovariance.graphical_lasso
in 1.3 since the parameter has no effect. It will be removed in 1.5. #26033 by Genesis Valencia.API Change Adds
costs_
fitted attribute incovariance.GraphicalLasso
andcovariance.GraphicalLassoCV
. #26033 by Genesis Valencia.API Change Adds
covariance
parameter incovariance.GraphicalLasso
. #26033 by Genesis Valencia.API Change Adds
eps
parameter incovariance.GraphicalLasso
,covariance.graphical_lasso
, andcovariance.GraphicalLassoCV
. #26033 by Genesis Valencia.
sklearn.datasets
¶
Enhancement Allows to overwrite the parameters used to open the ARFF file using the parameter
read_csv_kwargs
indatasets.fetch_openml
when using the pandas parser. #26433 by Guillaume Lemaitre.Fix
datasets.fetch_openml
returns improved data types whenas_frame=True
andparser="liac-arff"
. #26386 by Thomas Fan.Fix Following the ARFF specs, only the marker
"?"
is now considered as a missing values when opening ARFF files fetched usingdatasets.fetch_openml
when using the pandas parser. The parameterread_csv_kwargs
allows to overwrite this behaviour. #26551 by Guillaume Lemaitre.Fix
datasets.fetch_openml
will consistently usenp.nan
as missing marker with both parsers"pandas"
and"liac-arff"
. #26579 by Guillaume Lemaitre.API Change The
data_transposed
argument ofdatasets.make_sparse_coded_signal
is deprecated and will be removed in v1.5. #25784 by @Jérémie du Boisberranger.
sklearn.decomposition
¶
Efficiency
decomposition.MiniBatchDictionaryLearning
anddecomposition.MiniBatchSparsePCA
are now faster for small batch sizes by avoiding duplicate validations. #25490 by Jérémie du Boisberranger.Enhancement
decomposition.DictionaryLearning
now accepts the parametercallback
for consistency with the functiondecomposition.dict_learning
. #24871 by Omar Salman.Fix Treat more consistently small values in the
W
andH
matrices during thefit
andtransform
steps ofdecomposition.NMF
anddecomposition.MiniBatchNMF
which can produce different results than previous versions. #25438 by Yotam Avidar-Constantini.API Change The
W
argument indecomposition.NMF.inverse_transform
anddecomposition.MiniBatchNMF.inverse_transform
is renamed toXt
and will be removed in v1.5. #26503 by Adrin Jalali.
sklearn.discriminant_analysis
¶
Enhancement
discriminant_analysis.LinearDiscriminantAnalysis
now supports the PyTorch. See Array API support (experimental) for more details. #25956 by Thomas Fan.
sklearn.ensemble
¶
Feature
ensemble.HistGradientBoostingRegressor
now supports the Gamma deviance loss vialoss="gamma"
. Using the Gamma deviance as loss function comes in handy for modelling skewed distributed, strictly positive valued targets. #22409 by Christian Lorentzen.Feature Compute a custom out-of-bag score by passing a callable to
ensemble.RandomForestClassifier
,ensemble.RandomForestRegressor
,ensemble.ExtraTreesClassifier
andensemble.ExtraTreesRegressor
. #25177 by Tim Head.Feature
ensemble.GradientBoostingClassifier
now exposes out-of-bag scores via theoob_scores_
oroob_score_
attributes. #24882 by Ashwin Mathur.Efficiency
ensemble.IsolationForest
predict time is now faster (typically by a factor of 8 or more). Internally, the estimator now precomputes decision path lengths per tree atfit
time. It is therefore not possible to load an estimator trained with scikit-learn 1.2 to make it predict with scikit-learn 1.3: retraining with scikit-learn 1.3 is required. #25186 by Felipe Breve Siola.Efficiency
ensemble.RandomForestClassifier
andensemble.RandomForestRegressor
withwarm_start=True
now only recomputes out-of-bag scores when there are actually moren_estimators
in subsequentfit
calls. #26318 by Joshua Choo Yun Keat.Enhancement
ensemble.BaggingClassifier
andensemble.BaggingRegressor
expose theallow_nan
tag from the underlying estimator. #25506 by Thomas Fan.Fix
ensemble.RandomForestClassifier.fit
setsmax_samples = 1
whenmax_samples
is a float andround(n_samples * max_samples) < 1
. #25601 by Jan Fidor.Fix
ensemble.IsolationForest.fit
no longer warns about missing feature names when called withcontamination
not"auto"
on a pandas dataframe. #25931 by Yao Xiao.Fix
ensemble.HistGradientBoostingRegressor
andensemble.HistGradientBoostingClassifier
treats negative values for categorical features consistently as missing values, following LightGBM’s and pandas’ conventions. #25629 by Thomas Fan.Fix Fix deprecation of
base_estimator
inensemble.AdaBoostClassifier
andensemble.AdaBoostRegressor
that was introduced in #23819. #26242 by Marko Toplak.
sklearn.exceptions
¶
Feature Added
exceptions.InconsistentVersionWarning
which is raised when a scikit-learn estimator is unpickled with a scikit-learn version that is inconsistent with the sckit-learn version the estimator was pickled with. #25297 by Thomas Fan.
sklearn.feature_extraction
¶
API Change
feature_extraction.image.PatchExtractor
now follows the transformer API of scikit-learn. This class is defined as a stateless transformer meaning that it is note required to callfit
before callingtransform
. Parameter validation only happens atfit
time. #24230 by Guillaume Lemaitre.
sklearn.feature_selection
¶
Enhancement All selectors in
sklearn.feature_selection
will preserve a DataFrame’s dtype when transformed. #25102 by Thomas Fan.Fix
feature_selection.SequentialFeatureSelector
’scv
parameter now supports generators. #25973 byYao Xiao <Charlie-XIAO>
.
sklearn.impute
¶
Enhancement Added the parameter
fill_value
toimpute.IterativeImputer
. #25232 by Thijs van Weezel.Fix
impute.IterativeImputer
now correctly preserves the Pandas Index when theset_config(transform_output="pandas")
. #26454 by Thomas Fan.
sklearn.inspection
¶
Enhancement Added support for
sample_weight
ininspection.partial_dependence
andinspection.PartialDependenceDisplay.from_estimator
. This allows for weighted averaging when aggregating for each value of the grid we are making the inspection on. The option is only available whenmethod
is set tobrute
. #25209 and #26644 by Carlo Lemos.API Change
inspection.partial_dependence
returns autils.Bunch
with new key:grid_values
. Thevalues
key is deprecated in favor ofgrid_values
and thevalues
key will be removed in 1.5. #21809 and #25732 by Thomas Fan.
sklearn.kernel_approximation
¶
Fix
kernel_approximation.AdditiveChi2Sampler
is now stateless. Thesample_interval_
attribute is deprecated and will be removed in 1.5. #25190 by Vincent Maladière.
sklearn.linear_model
¶
Efficiency Avoid data scaling when
sample_weight=None
and other unnecessary data copies and unexpected dense to sparse data conversion inlinear_model.LinearRegression
. #26207 by Olivier Grisel.Enhancement
linear_model.SGDClassifier
,linear_model.SGDRegressor
andlinear_model.SGDOneClassSVM
now preserve dtype fornumpy.float32
. #25587 by Omar Salman.Enhancement The
n_iter_
attribute has been included inlinear_model.ARDRegression
to expose the actual number of iterations required to reach the stopping criterion. #25697 by John Pangas.Fix Use a more robust criterion to detect convergence of
linear_model.LogisticRegression
withpenalty="l1"
andsolver="liblinear"
on linearly separable problems. #25214 by Tom Dupre la Tour.Fix Fix a crash when calling
fit
onlinear_model.LogisticRegression
withsolver="newton-cholesky"
andmax_iter=0
which failed to inspect the state of the model prior to the first parameter update. #26653 by Olivier Grisel.API Change Deprecates
n_iter
in favor ofmax_iter
inlinear_model.BayesianRidge
andlinear_model.ARDRegression
.n_iter
will be removed in scikit-learn 1.5. This change makes those estimators consistent with the rest of estimators. #25697 by John Pangas.
sklearn.manifold
¶
Fix
manifold.Isomap
now correctly preserves the Pandas Index when theset_config(transform_output="pandas")
. #26454 by Thomas Fan.
sklearn.metrics
¶
Feature Adds
zero_division=np.nan
to multiple classification metrics:metrics.precision_score
,metrics.recall_score
,metrics.f1_score
,metrics.fbeta_score
,metrics.precision_recall_fscore_support
,metrics.classification_report
. Whenzero_division=np.nan
and there is a zero division, the metric is undefined and is excluded from averaging. When not used for averages, the value returned isnp.nan
. #25531 by Marc Torrellas Socastro.Feature
metrics.average_precision_score
now supports the multiclass case. #17388 by Geoffrey Bolmier and #24769 by Ashwin Mathur.Efficiency The computation of the expected mutual information in
metrics.adjusted_mutual_info_score
is now faster when the number of unique labels is large and its memory usage is reduced in general. #25713 by Kshitij Mathur, Guillaume Lemaitre, Omar Salman and Jérémie du Boisberranger.Enhancement
metrics.silhouette_samples
nows accepts a sparse matrix of pairwise distances between samples, or a feature array. #18723 by Sahil Gupta and #24677 by Ashwin Mathur.Enhancement A new parameter
drop_intermediate
was added tometrics.precision_recall_curve
,metrics.PrecisionRecallDisplay.from_estimator
,metrics.PrecisionRecallDisplay.from_predictions
, which drops some suboptimal thresholds to create lighter precision-recall curves. #24668 by @dberenbaum.Enhancement
metrics.RocCurveDisplay.from_estimator
andmetrics.RocCurveDisplay.from_predictions
now accept two new keywords,plot_chance_level
andchance_level_kw
to plot the baseline chance level. This line is exposed in thechance_level_
attribute. #25987 by Yao Xiao.Enhancement
metrics.PrecisionRecallDisplay.from_estimator
andmetrics.PrecisionRecallDisplay.from_predictions
now accept two new keywords,plot_chance_level
andchance_level_kw
to plot the baseline chance level. This line is exposed in thechance_level_
attribute. #26019 by Yao Xiao.Fix
metrics.pairwise.manhattan_distances
now supports readonly sparse datasets. #25432 by Julien Jerphanion.Fix Fixed
metrics.classification_report
so that empty input will returnnp.nan
. Previously, “macro avg” andweighted avg
would return e.g.f1-score=np.nan
andf1-score=0.0
, being inconsistent. Now, they both returnnp.nan
. #25531 by Marc Torrellas Socastro.Fix
metrics.ndcg_score
now gives a meaningful error message for input of length 1. #25672 by Lene Preuss and Wei-Chun Chu.Fix
metrics.log_loss
raises a warning if the values of the parametery_pred
are not normalized, instead of actually normalizing them in the metric. Starting from 1.5 this will raise an error. #25299 by @Omar Salman <OmarManzoor.Fix In
metrics.roc_curve
, use the threshold valuenp.inf
instead of arbitrarymax(y_score) + 1
. This threshold is associated with the ROC curve pointtpr=0
andfpr=0
. #26194 by Guillaume Lemaitre.Fix The
'matching'
metric has been removed when using SciPy>=1.9 to be consistent withscipy.spatial.distance
which does not support'matching'
anymore. #26264 by Barata T. OnggoAPI Change The
eps
parameter of themetrics.log_loss
has been deprecated and will be removed in 1.5. #25299 by Omar Salman.
sklearn.gaussian_process
¶
Fix
gaussian_process.GaussianProcessRegressor
has a new argumentn_targets
, which is used to decide the number of outputs when sampling from the prior distributions. #23099 by Zhehao Liu.
sklearn.mixture
¶
Efficiency
mixture.GaussianMixture
is more efficient now and will bypass unnecessary initialization if the weights, means, and precisions are given by users. #26021 by Jiawei Zhang.
sklearn.model_selection
¶
Major Feature Added the class
model_selection.ValidationCurveDisplay
that allows easy plotting of validation curves obtained by the functionmodel_selection.validation_curve
. #25120 by Guillaume Lemaitre.API Change The parameter
log_scale
in the classmodel_selection.LearningCurveDisplay
has been deprecated in 1.3 and will be removed in 1.5. The default scale can be overridden by setting it directly on theax
object and will be set automatically from the spacing of the data points otherwise. #25120 by Guillaume Lemaitre.Enhancement
model_selection.cross_validate
accepts a new parameterreturn_indices
to return the train-test indices of each cv split. #25659 by Guillaume Lemaitre.
sklearn.multioutput
¶
Fix
getattr
onmultioutput.MultiOutputRegressor.partial_fit
andmultioutput.MultiOutputClassifier.partial_fit
now correctly raise anAttributeError
if done before callingfit
. #26333 by Adrin Jalali.
sklearn.naive_bayes
¶
Fix
naive_bayes.GaussianNB
does not raise anymore aZeroDivisionError
when the providedsample_weight
reduces the problem to a single class infit
. #24140 by Jonathan Ohayon and Chiara Marmo.
sklearn.neighbors
¶
Enhancement The performance of
neighbors.KNeighborsClassifier.predict
and ofneighbors.KNeighborsClassifier.predict_proba
has been improved whenn_neighbors
is large andalgorithm="brute"
with non Euclidean metrics. #24076 by Meekail Zain, Julien Jerphanion.Fix Remove support for
KulsinskiDistance
inneighbors.BallTree
. This dissimilarity is not a metric and cannot be supported by the BallTree. #25417 by Guillaume Lemaitre.API Change The support for metrics other than
euclidean
andmanhattan
and for callables inneighbors.NearestNeighbors
is deprecated and will be removed in version 1.5. #24083 by Valentin Laurent.
sklearn.neural_network
¶
Fix
neural_network.MLPRegressor
andneural_network.MLPClassifier
reports the rightn_iter_
whenwarm_start=True
. It corresponds to the number of iterations performed on the current call tofit
instead of the total number of iterations performed since the initialization of the estimator. #25443 by Marvin Krawutschke.
sklearn.pipeline
¶
Feature
pipeline.FeatureUnion
can now use indexing notation (e.g.feature_union["scalar"]
) to access transformers by name. #25093 by Thomas Fan.Feature
pipeline.FeatureUnion
can now access thefeature_names_in_
attribute if theX
value seen during.fit
has acolumns
attribute and all columns are strings. e.g. whenX
is apandas.DataFrame
#25220 by Ian Thompson.Fix
pipeline.Pipeline.fit_transform
now raises anAttributeError
if the last step of the pipeline does not supportfit_transform
. #26325 by Adrin Jalali.
sklearn.preprocessing
¶
Major Feature Introduces
preprocessing.TargetEncoder
which is a categorical encoding based on target mean conditioned on the value of the category. #25334 by Thomas Fan.Feature
preprocessing.OrdinalEncoder
now supports grouping infrequent categories into a single feature. Grouping infrequent categories is enabled by specifying how to select infrequent categories withmin_frequency
ormax_categories
. #25677 by Thomas Fan.Enhancement
preprocessing.PolynomialFeatures
now calculates the number of expanded terms a-priori when dealing with sparsecsr
matrices in order to optimize the choice ofdtype
forindices
andindptr
. It can now outputcsr
matrices withnp.int32
indices/indptr
components when there are few enough elements, and will automatically usenp.int64
for sufficiently large matrices. #20524 by niuk-a and #23731 by Meekail ZainEnhancement A new parameter
sparse_output
was added topreprocessing.SplineTransformer
, available as of SciPy 1.8. Ifsparse_output=True
,preprocessing.SplineTransformer
returns a sparse CSR matrix. #24145 by Christian Lorentzen.Enhancement Adds a
feature_name_combiner
parameter topreprocessing.OneHotEncoder
. This specifies a custom callable to create feature names to be returned bypreprocessing.OneHotEncoder.get_feature_names_out
. The callable combines input arguments(input_feature, category)
to a string. #22506 by Mario Kostelac.Enhancement Added support for
sample_weight
inpreprocessing.KBinsDiscretizer
. This allows specifying the parametersample_weight
for each sample to be used while fitting. The option is only available whenstrategy
is set toquantile
andkmeans
. #24935 by Seladus, Guillaume Lemaitre, and Dea María Léon, #25257 by Gleb Levitski.Enhancement Subsampling through the
subsample
parameter can now be used inpreprocessing.KBinsDiscretizer
regardless of the strategy used. #26424 by Jérémie du Boisberranger.Fix
preprocessing.PowerTransformer
now correctly preserves the Pandas Index when theset_config(transform_output="pandas")
. #26454 by Thomas Fan.Fix
preprocessing.PowerTransformer
now correctly raises error when usingmethod="box-cox"
on data with a constantnp.nan
column. #26400 by Yao Xiao.Fix
preprocessing.PowerTransformer
withmethod="yeo-johnson"
now leaves constant features unchanged instead of transforming with an arbitrary value for thelambdas_
fitted parameter. #26566 by Jérémie du Boisberranger.API Change The default value of the
subsample
parameter ofpreprocessing.KBinsDiscretizer
will change fromNone
to200_000
in version 1.5 whenstrategy="kmeans"
orstrategy="uniform"
. #26424 by Jérémie du Boisberranger.
sklearn.svm
¶
API Change
dual
parameter now acceptsauto
option forsvm.LinearSVC
andsvm.LinearSVR
. #26093 by Gleb Levitski.
sklearn.tree
¶
Major Feature
tree.DecisionTreeRegressor
andtree.DecisionTreeClassifier
support missing values whensplitter='best'
and criterion isgini
,entropy
, orlog_loss
, for classification orsquared_error
,friedman_mse
, orpoisson
for regression. #23595, #26376 by Thomas Fan.Enhancement Adds a
class_names
parameter totree.export_text
. This allows specifying the parameterclass_names
for each target class in ascending numerical order. #25387 by William M and crispinlogan.Fix
tree.export_graphviz
andtree.export_text
now acceptsfeature_names
andclass_names
as array-like rather than lists. #26289 by Yao Xiao
sklearn.utils
¶
Fix Fixes
utils.check_array
to properly convert pandas extension arrays. #25813 and #26106 by Thomas Fan.Fix
utils.check_array
now supports pandas DataFrames with extension arrays and object dtypes by return an ndarray with object dtype. #25814 by Thomas Fan.API Change
utils.estimator_checks.check_transformers_unfitted_stateless
has been introduced to ensure stateless transformers don’t raiseNotFittedError
duringtransform
with no prior call tofit
orfit_transform
. #25190 by Vincent Maladière.API Change A
FutureWarning
is now raised when instantiating a class which inherits from a deprecated base class (i.e. decorated byutils.deprecated
) and which overrides the__init__
method. #25733 by Brigitta Sipőcz and Jérémie du Boisberranger.
sklearn.semi_supervised
¶
Enhancement
semi_supervised.LabelSpreading.fit
andsemi_supervised.LabelPropagation.fit
now accepts sparse metrics. #19664 by Kaushik Amar Das.
Miscellaneous¶
Enhancement Replace obsolete exceptions
EnvironmentError
,IOError
andWindowsError
. #26466 by Dimitri Papadopoulos ORfanos.
Code and documentation contributors
Thanks to everyone who has contributed to the maintenance and improvement of the project since version 1.2, including:
2357juan, Abhishek Singh Kushwah, Adam Handke, Adam Kania, Adam Li, adienes, Admir Demiraj, adoublet, Adrin Jalali, A.H.Mansouri, Ahmedbgh, Ala-Na, Alex Buzenet, AlexL, Ali H. El-Kassas, amay, András Simon, André Pedersen, Andrew Wang, Ankur Singh, annegnx, Ansam Zedan, Anthony22-dev, Artur Hermano, Arturo Amor, as-90, ashah002, Ashish Dutt, Ashwin Mathur, AymericBasset, Azaria Gebremichael, Barata Tripramudya Onggo, Benedek Harsanyi, Benjamin Bossan, Bharat Raghunathan, Binesh Bannerjee, Boris Feld, Brendan Lu, Brevin Kunde, cache-missing, Camille Troillard, Carla J, carlo, Carlo Lemos, c-git, Changyao Chen, Chiara Marmo, Christian Lorentzen, Christian Veenhuis, Christine P. Chai, crispinlogan, Da-Lan, DanGonite57, Dave Berenbaum, davidblnc, david-cortes, Dayne, Dea María Léon, Denis, Dimitri Papadopoulos Orfanos, Dimitris Litsidis, Dmitry Nesterov, Dominic Fox, Dominik Prodinger, Edern, Ekaterina Butyugina, Elabonga Atuo, Emir, farhan khan, Felipe Siola, futurewarning, Gael Varoquaux, genvalen, Gleb Levitski, Guillaume Lemaitre, gunesbayir, Haesun Park, hujiahong726, i-aki-y, Ian Thompson, Ido M, Ily, Irene, Jack McIvor, jakirkham, James Dean, JanFidor, Jarrod Millman, JB Mountford, Jérémie du Boisberranger, Jessicakk0711, Jiawei Zhang, Joey Ortiz, JohnathanPi, John Pangas, Joshua Choo Yun Keat, Joshua Hedlund, JuliaSchoepp, Julien Jerphanion, jygerardy, ka00ri, Kaushik Amar Das, Kento Nozawa, Kian Eliasi, Kilian Kluge, Lene Preuss, Linus, Logan Thomas, Loic Esteve, Louis Fouquet, Lucy Liu, Madhura Jayaratne, Marc Torrellas Socastro, Maren Westermann, Mario Kostelac, Mark Harfouche, Marko Toplak, Marvin Krawutschke, Masanori Kanazu, mathurinm, Matt Haberland, Max Halford, maximeSaur, Maxwell Liu, m. bou, mdarii, Meekail Zain, Mikhail Iljin, murezzda, Nawazish Alam, Nicola Fanelli, Nightwalkx, Nikolay Petrov, Nishu Choudhary, NNLNR, npache, Olivier Grisel, Omar Salman, ouss1508, PAB, Pandata, partev, Peter Piontek, Phil, pnucci, Pooja M, Pooja Subramaniam, precondition, Quentin Barthélemy, Rafal Wojdyla, Raghuveer Bhat, Rahil Parikh, Ralf Gommers, ram vikram singh, Rushil Desai, Sadra Barikbin, SANJAI_3, Sashka Warner, Scott Gigante, Scott Gustafson, searchforpassion, Seoeun Hong, Shady el Gewily, Shiva chauhan, Shogo Hida, Shreesha Kumar Bhat, sonnivs, Sortofamudkip, Stanislav (Stanley) Modrak, Stefanie Senger, Steven Van Vaerenbergh, Tabea Kossen, Théophile Baranger, Thijs van Weezel, Thomas A Caswell, Thomas Germer, Thomas J. Fan, Tim Head, Tim P, Tom Dupré la Tour, tomiock, tspeng, Valentin Laurent, Veghit, VIGNESH D, Vijeth Moudgalya, Vinayak Mehta, Vincent M, Vincent-violet, Vyom Pathak, William M, windiana42, Xiao Yuan, Yao Xiao, Yaroslav Halchenko, Yotam Avidar-Constantini, Yuchen Zhou, Yusuf Raji, zeeshan lone