Version 1.10#
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.10.dev0#
July 2026
Support for Array API#
Additional estimators and functions have been updated to include support for all Array API compliant inputs.
See Array API support (experimental) for more details.
Feature
covariance.LedoitWolfnow supports array API compatible inputs. By Tim Head #33573Enhancement
linear_model.LogisticRegressionnow supports array API compatible inputs withsolver="newton-cg". By Christian Lorentzen and Omar Salman. #34412Fix Fixed
metrics.median_absolute_errorto handle integer inputs when the input array namespace does not support integer inputs to itsquantilefunction (e.g., PyTorch). By Lucy Liu. #33778
Metadata routing#
Refer to the Metadata Routing User Guide for more details.
Fix Metadata is now correctly routed to the sub-estimator of meta-estimators such as
feature_selection.SelectFromModel,feature_selection.RFE,feature_selection.RFECV,feature_selection.SequentialFeatureSelector, andimpute.IterativeImputerwhen they are used as an intermediate step of apipeline.Pipeline, i.e. when their compositefit_transformmethod is the target of the routing. Previously, metadata such assample_weightwas silently dropped in this case. By Adrin Jalali and Kyle Schluns. #30869Fix
ensemble.BaggingClassifiernow correctly routes metadata viapredictandpredict_probadynamically to the corresponding method on the sub-estimator. By Stefanie Senger. #34188Fix
pipeline.Pipeline’sfit_transformandfit_predictnow correctly applytransform_inputto metadata routed to intermediate steps, matchingfit. By Stefanie Senger. #34201Fix
compose.TransformedTargetRegressornow correctly routes metadata such assample_weightto its default regressor (LinearRegression) when metadata routing is enabled. By Stefanie Senger. #34224
sklearn.calibration#
Feature
calibration.calibration_curve,calibration.CalibrationDisplay.from_estimator, andcalibration.CalibrationDisplay.from_predictionsnow supportn_bins="cube_root". This option sets the number of bins toceil(n_samples**(1/3)). By Zeyu Sun #33856
sklearn.datasets#
Fix
datasets.fetch_openmlnow correctly recovers from a corrupted download by re-downloading it, instead of raising an error. By Roman Yurchak. #34262
sklearn.ensemble#
Efficiency Part of the fit of
sklearn.ensemble.GradientBoostingClassifierwas optimized. The speed-up is mainly visible for deeper trees, which is not the primary use case for gradient boosting but can occur in grid searches. For very deep trees, this can be up to 20 times faster. By Arthur Lacote #32911Efficiency Fitting in
sklearn.ensemble.HistGradientBoostingClassifierandsklearn.ensemble.HistGradientBoostingRegressorwas optimized to be faster, by speeding up assignment of bins. By Itamar Turner-Trauring. #34194Efficiency Improved the performance of binning in
ensemble.HistGradientBoostingClassifierandensemble.HistGradientBoostingRegressor. Fitting with sample weights could be slow for datasets with fewer than 200,000 samples; this is now fixed. Binning without sample weights was also optimized. By Arthur Lacote. #34248API Change The
sklearn.experimental.enable_hist_gradient_boostingmodule is deprecated and will be removed in 1.12. It is no longer needed sinceensemble.HistGradientBoostingClassifierandensemble.HistGradientBoostingRegressorare stable and can be imported normally fromsklearn.ensemble. By Guillaume Lemaitre. #34236
sklearn.impute#
API Change
impute.IterativeImputeris no longer experimental. It can now be imported directly withfrom sklearn.impute import IterativeImputer, and importingsklearn.experimental.enable_iterative_imputeris no longer required (doing so now raises a warning and is a no-op). It also no longer raises aexceptions.ConvergenceWarningwhenmax_iteris reached without meeting thetolstopping criterion, as non-convergence of the round-robin imputation is expected. The User Guide now documents why the imputed values are not guaranteed to converge and why investing in better imputation often yields diminishing returns for prediction. By Guillaume Lemaitre. #34214
sklearn.inspection#
Enhancement The parameter
multiclass_colorswas deprecated in favour oftarget_colorsininspection.DecisionBoundaryDisplay. The attributemulticlass_colors_was also renamed totarget_colors_. Now they can be used for binary problems as well without causing confusion (which will be added in a follow-up PR). By Anne Beyer. #34092
sklearn.linear_model#
Efficiency The
"newton-cholesky"solver oflinear_model.LogisticRegression,linear_model.GammaRegressor,linear_model.PoissonRegressorandlinear_model.TweedieRegressornow uses an improved backtracking line search. Instead of halving the step size in each line search iteration, it uses cubic or quadratic polynomial interpolation to find the next trial step size. By Christian Lorentzen. #34157Enhancement
linear_model.PoissonRegressor,linear_model.GammaRegressorandlinear_model.TweedieRegressorgot a new solver:solver="newton-cg". This is the same Newton conjugate gradient solver, a.k.a. truncated Newton, that is already available withlinear_model.LogisticRegression. By Christian Lorentzen. #33759Fix The
solver="newton-cg"forlinear_model.LogisticRegression,linear_model.PoissonRegressorand other GLMs is now more robust. Many convergence issues have been fixed, e.g. for certain ill-conditioned problems with low regularization and nearly collinear features. The fix is about treating small or even negative curvature. By Christian Lorentzen. #34412
sklearn.metrics#
Efficiency
metrics.nan_euclidean_distancesis now several times faster on dense data, with a more moderate speed-up forimpute.KNNImputerand estimators usingmetric="nan_euclidean"such asneighbors.NearestNeighbors. By Roman Yurchak. #1140Efficiency Scorers created with
make_scorerno longer deep-copy metadata kwargs on each call, reducing memory usage during model selection and cross-validation. By Stefanie Senger. #34236Fix Fixed
metrics.average_precision_scoreto handle list-typey_scorefor multiclass data. By Lucy Liu. #34083API Change In
metrics.DetCurveDisplaytheestimator_nameparameter is deprecated in favour ofnameand will be removed in 1.12. The**kwargsparameter ofmetrics.DetCurveDisplay.plot,metrics.DetCurveDisplay.from_estimatorandmetrics.DetCurveDisplay.from_predictionsis also deprecated in favour ofcurve_kwargsand will be removed in 1.12. By @AnneBeyer. #34443
sklearn.mixture#
Efficiency
mixture.GaussianMixturewithcovariance_type="tied"is now faster, with the speed-up most visible for many components or high-dimensional data. By Roman Yurchak. #1140
sklearn.model_selection#
API Change
model_selection.HalvingGridSearchCVandmodel_selection.HalvingRandomSearchCVnow expose the cross-validation results of the last halving iteration incv_results_. The full per-iteration history is available in the newall_cv_results_attribute. By Guillaume Lemaitre. #34250
sklearn.neighbors#
Feature
neighbors.NeighborhoodComponentsAnalysisnow supports sparse input matrices forinitin['pca', 'random', 'identity']. By Arturo Amor. #34122Efficiency
neighbors.KNeighborsRegressor.predictis now faster for regression with many output targets. By Roman Yurchak. #1140
Efficiency
sklearn.neighbors.KNeighborsClassifieris now faster when running with multiple threads. The statistics returned fromsklearn.neighbors.BallTreeandsklearn.neighbors.KDTreeno longer reset on each query, and are no longer incorrect when the tree is used from multiple threads. #34187
sklearn.pipeline#
Fix The default value for the
transform_inputparameter ofPipelinewas changed fromNoneto("X_val",)so that the validation set, when passed tofit, is always transformed alongsideX, to prevent easy to miss mistakes. By Jérémie du Boisberranger. #34263
sklearn.preprocessing#
Efficiency Improved fit time of
preprocessing.OneHotEncoderandpreprocessing.OrdinalEncoderon object/string categorical features when category counts are needed, for instance withmin_frequencyormax_categories. By Itamar Turner-Trauring. #34386Efficiency
preprocessing.OneHotEncoder,preprocessing.OrdinalEncoder, andpreprocessing.TargetEncoderare now faster by using a Fortran-contiguous memory layout in their encoding paths. By Arthur Lacote. #34392
sklearn.svm#
Fix Fixed a memory leak when calling the
fitmethod ofsvm.LinearSVR. By Jake VanderPlas. #34256Fix Fixed an out-of-bound write in the
fitmethod ofsvm.LinearSVCmemory when usingmulti_class="crammer_singer". By Jake VanderPlas. #34273
sklearn.tree#
Major Feature
tree.DecisionTreeRegressor,tree.DecisionTreeClassifiernow have native support for categorical features for binary classification and single-output regression. Categorical features can be specified with thecategorical_featuresparameter. Up to 256 categories per features are supported. By:user:`Adam Li <adam2392>,:user:`Arthur Lacote <cakedev0>, Adrin Jalali and Christian Lorentzen #33354Feature Added a
fill_colorsparameter totree.plot_treeandtree.export_graphvizto allow user-defined class colors when rendering filled decision trees. By Simon-Martin Schröder. #33810
sklearn.utils#
Fix The HTML representation of estimators now truncates the output feature list to 100 entries to improve rendering performance for estimators with many output features. By Dea María Léon. #34362
Fix Array API supporting functions and estimators that handle mixed input namespaces now make negative-stride NumPy arrays contiguous before transferring them to PyTorch through DLPack, avoiding a Python process abort in
torch.from_dlpack. By Yin Li. #34380Fix
set_output(transform="polars")no longer emits aDeprecationWarningwithpolars>=1.42.1by usinghow="horizontal_extend"instead of the deprecatedhow="horizontal"when concatenating polars dataframes. By Felix Hoehle. #34447
Code and documentation contributors
Thanks to everyone who has contributed to the maintenance and improvement of the project since version 1.9, including:
TODO: update at the time of the release.