Версия 1.8#

Для краткого описания основных особенностей выпуска, пожалуйста, обратитесь к Основные нововведения в scikit-learn 1.8.

Легенда для списков изменений

  • Основная функция что-то большое, что вы не могли сделать раньше.

  • Функция что-то, что вы не могли делать раньше.

  • Эффективность существующий признак теперь может не требовать столько вычислений или памяти.

  • Улучшение различные мелкие улучшения.

  • Исправление то, что ранее не работало, как задокументировано – или согласно разумным ожиданиям – теперь должно работать.

  • Изменение API вам потребуется изменить свой код, чтобы добиться того же эффекта в будущем; или функция будет удалена в будущем.

Версия 1.8.0#

Декабрь 2025

Изменения, затрагивающие многие модули#

  • Эффективность Улучшено использование процессора и памяти в оценщиках и функциях метрик, которые полагаются на взвешенные процентили, и лучше соответствуют реализациям процентилей NumPy и Scipy (без взвешивания). Lucy Liu #31775

Поддержка Array API#

Дополнительные оценщики и функции были обновлены для включения поддержки всех Array API соответствующие входные данные.

См. Поддержка Array API (экспериментальная) для получения дополнительной информации.

при использовании парсера pandas. Параметр#

См. Руководство по маршрутизации метаданных для более подробной информации.

  • Исправление Исправлена проблема, когда передача sample_weight в Pipeline внутри GridSearchCV выдаст ошибку при включенной маршрутизации метаданных. Путем Адрин Джалали. #31898

Поддержка свободнопоточного CPython 3.14#

scikit-learn поддерживает свободнопоточный CPython, в частности свободнопоточные сборки доступны для всех поддерживаемых платформ на Python 3.14.

Свободнопоточный (также известный как nogil) CPython — это версия CPython, которая направлена на обеспечение эффективных многопоточных сценариев использования путем удаления глобальной блокировки интерпретатора (GIL).

Если вы хотите попробовать свободнопоточный Python, рекомендуется использовать Python 3.14, в котором исправлен ряд проблем по сравнению с Python 3.13. Не стесняйтесь пробовать свободнопоточную версию на вашем случае использования и сообщать о любых проблемах!

Для получения дополнительной информации о свободнопоточном CPython см. документация py-free-threading, в частности как установить свободнопоточный CPython и Отслеживание совместимости экосистемы.

По Loïc Estève и Оливье Гризель и многие другие люди в более широкой экосистеме Scientific Python и CPython, например Nathan Goldbaum, Ralf Gommers, Эдгар Андрес Маргффой Туай. #32079

sklearn.base#

  • Функция Рефакторинг dir в BaseEstimator для распознавания проверки условия в available_if. Путем Джон Хендрикс и Miguel Parece. #31928

  • Исправление Исправлена обработка пропущенных значений pandas в HTML-отображении всех оценивателей. От Dea María Léon. #32341

sklearn.calibration#

sklearn.cluster#

  • Эффективность cluster.kmeans_plusplus теперь использует np.cumsum напрямую без дополнительных проверок численной устойчивости и без приведения к np.float64. Путем Тициано Зито #31991

  • Исправление Значение по умолчанию для copy параметр в cluster.HDBSCAN изменится с False to True в 1.10, чтобы избежать модификации данных и сохранить согласованность с другими оценщиками. По Sarthak Puri. #31973

sklearn.compose#

  • Исправление The compose.ColumnTransformer теперь корректно обучается на данных, предоставленных в виде polars.DataFrame когда любой преобразователь имеет разреженный вывод. При Филипп Гнан. #32188

sklearn.covariance#

sklearn.decomposition#

sklearn.discriminant_analysis#

sklearn.ensemble#

  • Исправление ensemble.BaggingClassifier, ensemble.BaggingRegressor и ensemble.IsolationForest теперь использует sample_weight для выборки образцов вместо их передачи, умноженных на равномерно выбранную маску, к базовым оценщикам. Кроме того, когда max_samples является float, теперь интерпретируется как доля sample_weight.sum() вместо X.shape[0]. Новое значение по умолчанию max_samples=None рисует X.shape[0] образцов, независимо от sample_weight. Путем Antoine Baker. #31414 и #32825

sklearn.feature_selection#

  • Улучшение feature_selection.SelectFromModel теперь не принуждает max_features должно быть меньше или равно количеству входных признаков. Путём Thibault #31939

sklearn.gaussian_process#

  • Эффективность make GaussianProcessRegressor.predict быстрее, когда return_cov и return_std оба False. Путем Rafael Ayllón Gavilán. #31431

sklearn.linear_model#

  • Эффективность linear_model.ElasticNet и linear_model.Lasso с precompute=False использовать меньше памяти для плотных X и немного быстрее. Ранее они использовали вдвое больше памяти, чем X даже для Fortran-непрерывных X. Путем Christian Lorentzen #31665

  • Эффективность linear_model.ElasticNet и linear_model.Lasso избежать двойной проверки входных данных и поэтому немного быстрее. По Christian Lorentzen. #31848

  • Эффективность linear_model.ElasticNet, linear_model.ElasticNetCV, linear_model.Lasso, linear_model.LassoCV, linear_model.MultiTaskElasticNet, linear_model.MultiTaskElasticNetCV, linear_model.MultiTaskLasso и linear_model.MultiTaskLassoCV обучаются быстрее, избегая вызова BLAS уровня 1 (axpy) во внутреннем цикле. То же самое для функций linear_model.enet_path и linear_model.lasso_path. Путем Christian Lorentzen #31956 и #31880

  • Эффективность linear_model.ElasticNetCV, linear_model.LassoCV, linear_model.MultiTaskElasticNetCV и linear_model.MultiTaskLassoCV избежать дополнительной копии X со значением по умолчанию copy_X=True. Путем Christian Lorentzen. #31946

  • Эффективность linear_model.ElasticNet, linear_model.ElasticNetCV, linear_model.Lasso, linear_model.LassoCV, linear_model.MultiTaskElasticNet, linear_model.MultiTaskElasticNetCV linear_model.MultiTaskLasso, linear_model.MultiTaskLassoCV а также linear_model.lasso_path и linear_model.enet_path теперь реализуют правила безопасного отсечения зазора в решателе координатного спуска для плотных и разреженных X. Ускорение времени обучения особенно заметно (возможно в 10 раз) при вычислении путей регуляризации, как это делают *CV-варианты вышеуказанных оценщиков. Теперь есть дополнительная проверка критерия остановки перед входом в основной цикл шагов спуска. Поскольку критерий остановки требует вычисления двойственного разрыва, отсечение происходит всякий раз, когда вычисляется двойственный разрыв. Автор Christian Lorentzen #31882, #31986, #31987 и #32014

  • Улучшение linear_model.ElasticNet, linear_model.ElasticNetCV, linear_model.Lasso, linear_model.LassoCV, MultiTaskElasticNet, MultiTaskElasticNetCV, MultiTaskLasso, MultiTaskLassoCV, а также linear_model.enet_path и linear_model.lasso_path теперь использует dual gap <= tol вместо dual gap < tol как критерий остановки. Полученные коэффициенты могут отличаться от предыдущих версий scikit-learn в редких случаях. По Christian Lorentzen. #31906

  • Исправление Исправлены критерии сходимости для моделей SGD, чтобы избежать преждевременной сходимости, когда tol != None. Это в первую очередь влияет на SGDOneClassSVM но также влияет на SGDClassifier и SGDRegressor. До этого исправления только функция потерь без штрафа использовалась для проверки сходимости, тогда как теперь используется полная целевая функция с регуляризацией. Guillaume Lemaitre и kostayScr #31856

  • Исправление Допустимый диапазон параметров для начальной скорости обучения eta0 в linear_model.SGDClassifier, linear_model.SGDOneClassSVM, linear_model.SGDRegressor и linear_model.Perceptron изменено с неотрицательных чисел на строго положительные числа. Как следствие, значение по умолчанию eta0 of linear_model.SGDClassifier и linear_model.SGDOneClassSVM изменилось с 0 на 0.01. Но обратите внимание, что eta0 не используется по умолчанию для скорости обучения "optimal" этих двух оценщиков. Путем Christian Lorentzen. #31933

  • Исправление linear_model.LogisticRegressionCV способен обрабатывать разбиения перекрёстной проверки, где некоторые метки классов отсутствуют в некоторых фолдах. Раньше он вызывал ошибку, когда метка класса отсутствовала в фолде. Благодаря Christian Lorentzen. #32747

  • Изменение API linear_model.PassiveAggressiveClassifier и linear_model.PassiveAggressiveRegressor are deprecated and will be removed in 1.10. Equivalent estimators are available with linear_model.SGDClassifier и SGDRegressor, оба из которых предоставляют опции learning_rate="pa1" и "pa2". Параметр eta0 можно использовать для указания параметра агрессивности алгоритмов Passive-Aggressive, называемого C в исходной статье. Путём Christian Lorentzen #31932 и #29097

  • Изменение API linear_model.SGDClassifier, linear_model.SGDRegressor, и linear_model.SGDOneClassSVM теперь устаревает для отрицательных значений power_t параметр. Использование отрицательного значения вызовет предупреждение в версии 1.8 и ошибку в версии 1.10. Вместо этого необходимо использовать значение в диапазоне [0.0, inf). По Ритви Алагусанкар #31474

  • Изменение API Вызов ошибки в sklearn.linear_model.LogisticRegression когда используется решатель liblinear и входные значения X больше 1e30, решатель liblinear иначе зависает. Путем Шрути Нат. #31888

  • Изменение API linear_model.LogisticRegressionCV получил новый параметр use_legacy_attributes для управления типами и формами подогнанных атрибутов C_, l1_ratio_, coefs_paths_, scores_ и n_iter_. Текущее значение по умолчанию True сохраняет устаревшее поведение. Если False тогда:

    • C_ является числом с плавающей точкой.

    • l1_ratio_ является числом с плавающей точкой.

    • coefs_paths_ является ndarray формы (n_folds, n_l1_ratios, n_cs, n_classes, n_features). Для бинарных задач (n_classes=2), предпоследнее измерение равно 1.

    • scores_ является ndarray формы (n_folds, n_l1_ratios, n_cs).

    • n_iter_ является ndarray формы (n_folds, n_l1_ratios, n_cs).

    В версии 1.10 значение по умолчанию изменится на False и use_legacy_attributes будет устаревать. В 1.12 use_legacy_attributes будет удален. По Christian Lorentzen. #32114

  • Изменение API Параметр penalty of linear_model.LogisticRegression и linear_model.LogisticRegressionCV устарел и будет удален в версии 1.10. Эквивалентное поведение можно получить следующим образом:

    • для linear_model.LogisticRegression

      • использовать l1_ratio=0 вместо penalty="l2"

      • использовать l1_ratio=1 вместо penalty="l1"

      • использовать 0 вместо penalty="elasticnet"

      • использовать C=np.inf вместо penalty=None

    • для linear_model.LogisticRegressionCV

      • использовать l1_ratios=(0,) вместо penalty="l2"

      • использовать l1_ratios=(1,) вместо penalty="l1"

      • эквивалент penalty=None состоит в том, чтобы иметь np.inf как элемент Cs параметр

    Для linear_model.LogisticRegression, значение по умолчанию l1_ratio изменился с None to 0.0. Установка l1_ratio=None устарел и будет вызывать ошибку в версии 1.10

    Для linear_model.LogisticRegressionCV, значение по умолчанию l1_ratios изменился с None to "warn". Он будет изменён на (0,) в версии 1.10. Установка l1_ratios=None устарел и будет вызывать ошибку в версии 1.10.

    По Christian Lorentzen. #32659

  • Изменение API The n_jobs параметр linear_model.LogisticRegression устарел и будет удалён в версии 1.10. Он не оказывает эффекта с версии 1.8. По Loïc Estève. #32742

sklearn.manifold#

  • Основная функция manifold.ClassicalMDS был реализован для выполнения классического MDS (разложение по собственным значениям дважды центрированной матрицы расстояний). По Dmitry Kobak и Meekail Zain #31322

  • Функция manifold.MDS теперь поддерживает произвольные метрики расстояния (через metric и metric_params параметры) и инициализация через классический MDS (через init параметр). dissimilarity параметр был устаревшим. Старый metric параметр был переименован в metric_mds. Путем Dmitry Kobak #32229

  • Функция manifold.TSNE теперь поддерживает инициализацию PCA с разреженными входными матрицами. С помощью Arturo Amor. #32433

sklearn.metrics#

sklearn.model_selection#

  • Улучшение model_selection.StratifiedShuffleSplit теперь будет указывать, какие классы

    имеют слишком мало членов при возникновении ValueError если какой-либо класс имеет менее 2 элементов. Это полезно для определения того, какие классы вызывают ошибку. По Marc Bresson #32265

  • Исправление Исправлено поведение перемешивания в model_selection.StratifiedGroupKFold. Теперь стратификация между фолдами также сохраняется, когда shuffle=True. Путем Pau Folch. #32540

sklearn.multiclass#

sklearn.naive_bayes#

  • Исправление naive_bayes.GaussianNB сохраняет тип данных обученных атрибутов в соответствии с типом данных X. Путем Omar Salman #32497

sklearn.preprocessing#

  • Улучшение preprocessing.SplineTransformer теперь может обрабатывать пропущенные значения с параметром handle_missing. С помощью Stefanie Senger. #28043

  • Улучшение The preprocessing.PowerTransformer теперь возвращает предупреждение при обнаружении значений NaN в обратном преобразовании, inverse_transform, обычно вызвано сильно несбалансированными данными. По Roberto Mourao #29307

  • Улучшение preprocessing.MaxAbsScaler теперь может обрезать значения вне диапазона в отложенных данных с помощью параметра clip. Путем Hleb Levitski. #31790

  • Исправление Исправлена ошибка в preprocessing.OneHotEncoder где handle_unknown='warn' некорректно вел себя как 'ignore' вместо 'infrequent_if_exist'. Путем Nithurshen #32592

sklearn.semi_supervised#

  • Исправление Пользовательские ядерные результаты теперь нормализуются в semi_supervised.LabelPropagation так что все суммы строк равны 1, даже если ядро дает асимметричные или неравномерные суммы строк. По Дэн Шульт. #31924

sklearn.tree#

  • Эффективность tree.DecisionTreeRegressor с criterion="absolute_error" теперь работает намного быстрее: сложность O(n log n) против предыдущей O(n^2), что позволяет масштабироваться до миллионов точек данных, даже сотен миллионов. Arthur Lacote #32100

  • Исправление Сделать tree.export_text потокобезопасный. С помощью Оливье Гризель. #30041

  • Исправление export_graphviz теперь вызывает ValueError если заданные имена признаков не все являются строками. Автор Гилерме Пейшоту #31036

  • Исправление tree.DecisionTreeRegressor с criterion="absolute_error" иногда делал неоптимальные разбиения (т.е. разбиения, которые не минимизируют абсолютную ошибку). Теперь это исправлено. Поэтому переобучение деревьев может давать немного другие результаты. Автор Arthur Lacote #32100

  • Исправление Исправлена регрессия в деревья решений где почти постоянные признаки не обрабатывались должным образом. Автор Sercan Turkmen. #32259

  • Исправление Исправлена логика разделения во время обучения в tree.DecisionTree* (и, следовательно, в ensemble.RandomForest*) для узлов, содержащих почти постоянные значения признаков и пропущенные значения. Ранее деревья обрезались раньше, если находился постоянный признак, даже если можно было выполнить больше разбиений на основе пропущенных значений. С помощью Arthur Lacote #32274

  • Исправление Исправление обработки пропущенных значений в методе decision_path деревьев (tree.DecisionTreeClassifier, tree.DecisionTreeRegressor, tree.ExtraTreeClassifier и tree.ExtraTreeRegressor) По Arthur Lacote. #32280

  • Исправление Исправлено разделение дерева решений с отсутствующими значениями в некоторых признаках. В некоторых случаях последний неотсутствующий образец не разделялся правильно. Автор: Tim Head и Arthur Lacote. #32351

sklearn.utils#

  • Эффективность Функция sklearn.utils.extmath.safe_sparse_dot был улучшен за счет выделенного Cython-кода для случая a @ b с разреженными двумерными a и b и когда требуется плотный вывод, т.е., dense_output=True. Это улучшает несколько алгоритмов в scikit-learn при работе с разреженными массивами (или матрицами). Путем Christian Lorentzen. #31952

  • Улучшение Таблица параметров в HTML-представлении всех оценщиков scikit-learn и, в более общем смысле, оценщиков, наследующих от base.BaseEstimator теперь отображает описание параметра в виде всплывающей подсказки и имеет ссылку на онлайн-документацию для каждого параметра. Автор Dea María Léon. #31564

  • Улучшение sklearn.utils._check_sample_weight теперь выводит более понятное сообщение об ошибке, когда предоставленные веса не являются ни скаляром, ни одномерным массивоподобным объектом того же размера, что и входные данные. Автор: Капил Парех. #31873

  • Улучшение sklearn.utils.estimator_checks.parametrize_with_checks теперь позволяет настроить строгий режим для xfailing проверок. Тесты, которые неожиданно проходят, приведут к провалу теста. Поведение по умолчанию не изменено. С помощью Tim Head. #31951

  • Улучшение Исправлено выравнивание символов "?" и "i" и улучшен цветовой стиль HTML-представления оценок. Автор Guillaume Lemaitre. #31969

  • Исправление Изменяет способ выбора цвета при отображении оценщика в виде HTML-представления. Цвета больше не адаптируются к теме пользователя, а выбираются на основе объявленной цветовой схемы темы (светлая или темная) для VSCode и JupyterLab. Если тема не объявляет цветовую схему, схема выбирается в соответствии с цветом текста по умолчанию на странице, если это не удается, используется медиа-запрос. По Мэтт Дж.. #32330

  • Изменение API utils.extmath.stable_cumsum устарел и будет удален в v1.10. Используйте np.cumulative_sum с желаемым dtype напрямую вместо. По Тициано Зито. Для примера использования

Участники кода и документации

Благодарим всех, кто внес вклад в поддержку и улучшение проекта с версии 1.7, включая:

$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