Version 1.8#

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.8.0#

December 2025

Changes impacting many modules#

  • Efficiency Improved CPU and memory usage in estimators and metric functions that rely on weighted percentiles and better match NumPy and Scipy (un-weighted) implementations of percentiles. By Lucy Liu #31775

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.

Metadata routing#

Refer to the Metadata Routing User Guide for more details.

  • Fix Fixed an issue where passing sample_weight to a Pipeline inside a GridSearchCV would raise an error with metadata routing enabled. By Adrin Jalali. #31898

Free-threaded CPython 3.14 support#

scikit-learn has support for free-threaded CPython, in particular free-threaded wheels are available for all of our supported platforms on Python 3.14.

Free-threaded (also known as nogil) CPython is a version of CPython that aims at enabling efficient multi-threaded use cases by removing the Global Interpreter Lock (GIL).

If you want to try out free-threaded Python, the recommendation is to use Python 3.14, that has fixed a number of issues compared to Python 3.13. Feel free to try free-threaded on your use case and report any issues!

For more details about free-threaded CPython see py-free-threading doc, in particular how to install a free-threaded CPython and Ecosystem compatibility tracking.

By Loïc Estève and Olivier Grisel and many other people in the wider Scientific Python and CPython ecosystem, for example Nathan Goldbaum, Ralf Gommers, Edgar Andrés Margffoy Tuay. #32079

sklearn.base#

sklearn.calibration#

sklearn.cluster#

sklearn.compose#

sklearn.covariance#

sklearn.decomposition#

sklearn.discriminant_analysis#

sklearn.ensemble#

sklearn.feature_selection#

sklearn.gaussian_process#

sklearn.linear_model#

sklearn.manifold#

  • Major Feature manifold.ClassicalMDS was implemented to perform classical MDS (eigendecomposition of the double-centered distance matrix). By Dmitry Kobak and Meekail Zain #31322

  • Feature manifold.MDS now supports arbitrary distance metrics (via metric and metric_params parameters) and initialization via classical MDS (via init parameter). The dissimilarity parameter was deprecated. The old metric parameter was renamed into metric_mds. By Dmitry Kobak #32229

  • Feature manifold.TSNE now supports PCA initialization with sparse input matrices. By Arturo Amor. #32433

sklearn.metrics#

sklearn.model_selection#

sklearn.multiclass#

sklearn.naive_bayes#

sklearn.preprocessing#

sklearn.semi_supervised#

sklearn.tree#

sklearn.utils#

  • Efficiency The function sklearn.utils.extmath.safe_sparse_dot was improved by a dedicated Cython routine for the case of a @ b with sparse 2-dimensional a and b and when a dense output is required, i.e., dense_output=True. This improves several algorithms in scikit-learn when dealing with sparse arrays (or matrices). By Christian Lorentzen. #31952

  • Enhancement The parameter table in the HTML representation of all scikit-learn estimators and more generally of estimators inheriting from base.BaseEstimator now displays the parameter description as a tooltip and has a link to the online documentation for each parameter. By Dea María Léon. #31564

  • Enhancement sklearn.utils._check_sample_weight now raises a clearer error message when the provided weights are neither a scalar nor a 1-D array-like of the same size as the input data. By Kapil Parekh. #31873

  • Enhancement sklearn.utils.estimator_checks.parametrize_with_checks now lets you configure strict mode for xfailing checks. Tests that unexpectedly pass will lead to a test failure. The default behaviour is unchanged. By Tim Head. #31951

  • Enhancement Fixed the alignment of the “?” and “i” symbols and improved the color style of the HTML representation of estimators. By Guillaume Lemaitre. #31969

  • Fix Changes the way color are chosen when displaying an estimator as an HTML representation. Colors are not adapted anymore to the user’s theme, but chosen based on theme declared color scheme (light or dark) for VSCode and JupyterLab. If theme does not declare a color scheme, scheme is chosen according to default text color of the page, if it fails fallbacks to a media query. By Matt J.. #32330

  • API Change utils.extmath.stable_cumsum is deprecated and will be removed in v1.10. Use np.cumulative_sum with the desired dtype directly instead. By Tiziano Zito. #32258

Code and documentation contributors

Thanks to everyone who has contributed to the maintenance and improvement of the project since version 1.7, including:

$id, 4hm3d, Acciaro Gennaro Daniele, achyuthan.s, Adam J. Stewart, Adriano Leão, Adrien Linares, Adrin Jalali, Aitsaid Azzedine Idir, Alexander Fabisch, Alexandre Abraham, Andrés H. Zapke, Anne Beyer, Anthony Gitter, AnthonyPrudent, antoinebaker, Arpan Mukherjee, Arthur, Arthur Lacote, Arturo Amor, ayoub.agouzoul, Ayrat, Ayush, Ayush Tanwar, Basile Jezequel, Bhavya Patwa, BRYANT MUSI BABILA, Casey Heath, Chems Ben, Christian Lorentzen, Christian Veenhuis, Christine P. Chai, cstec, C. Titus Brown, Daniel Herrera-Esposito, Dan Schult, dbXD320, Dea María Léon, Deepyaman Datta, dependabot[bot], Dhyey Findoriya, Dimitri Papadopoulos Orfanos, Dipak Dhangar, Dmitry Kobak, elenafillo, Elham Babaei, EmilyXinyi, Emily (Xinyi) Chen, Eugen-Bleck, Evgeni Burovski, fabarca, Fabrizio Damicelli, Faizan-Ul Huda, François Goupil, François Paugam, Gaetan, GaetandeCast, Gesa Loof, Gonçalo Guiomar, Gordon Grey, Gowtham Kumar K., Guilherme Peixoto, Guillaume Lemaitre, hakan çanakçı, Harshil Sanghvi, Henri Bonamy, Hleb Levitski, HulusiOzy, hvtruong, Ian Faust, Imad Saddik, Jérémie du Boisberranger, Jérôme Dockès, John Hendricks, Joris Van den Bossche, Josef Affourtit, Josh, jshn9515, Junaid, KALLA GANASEKHAR, Kapil Parekh, Kenneth Enevoldsen, Kian Eliasi, kostayScr, Krishnan Vignesh, kryggird, Kyle S, Lakshmi Krishnan, Leomax, Loic Esteve, Luca Bittarello, Lucas Colley, Lucy Liu, Luigi Giugliano, Luis, Mahdi Abid, Mahi Dhiman, Maitrey Talware, Mamduh Zabidi, Manikandan Gobalakrishnan, Marc Bresson, Marco Edward Gorelli, Marek Pokropiński, Maren Westermann, Marie Sacksick, Marija Vlajic, Matt J., Mayank Raj, Michael Burkhart, Michael Šimáček, Miguel Fernandes, Miro Hrončok, Mohamed DHIFALLAH, Muhammad Waseem, MUHAMMED SINAN D, Natalia Mokeeva, Nicholas Farr, Nicolas Bolle, Nicolas Hug, nithish-74, Nithurshen, Nitin Pratap Singh, NotAceNinja, Olivier Grisel, omahs, Omar Salman, Patrick Walsh, Peter Holzer, pfolch, ph-ll-pp, Prashant Bansal, Quan H. Nguyen, Radovenchyk, Rafael Ayllón Gavilán, Raghvender, Ranjodh Singh, Ravichandranayakar, Remi Gau, Reshama Shaikh, Richard Harris, RishiP2006, Ritvi Alagusankar, Roberto Mourao, Robert Pollak, Roshangoli, roychan, R Sagar Shresti, Sarthak Puri, saskra, scikit-learn-bot, Scott Huberty, Sercan Turkmen, Sergio P, Shashank S, Shaurya Bisht, Shivam, Shruti Nath, SIKAI ZHANG, sisird864, SiyuJin-1, S. M. Mohiuddin Khan Shiam, Somdutta Banerjee, sotagg, Sota Goto, Spencer Bradkin, Stefan, Stefanie Senger, Steffen Rehberg, Steven Hur, Success Moses, Sylvain Combettes, ThibaultDECO, Thomas J. Fan, Thomas Li, Thomas S., Tim Head, Tingwei Zhu, Tiziano Zito, TJ Norred, Username46786, Utsab Dahal, Vasanth K, Veghit, VirenPassi, Virgil Chan, Vivaan Nanavati, Xiao Yuan, xuzhang0327, Yaroslav Halchenko, Yaswanth Kumar, Zijun yi, zodchi94, Zubair Shakoor