Версия 1.6#

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

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

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

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

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

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

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

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

Версия 1.6.1#

Январь 2025

Измененные модели#

  • Исправление The tags.input_tags.sparse флаг был исправлен для большинства оценщиков. С помощью Antoine Baker #30187

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

  • Исправление _more_tags, _get_tags, и _safe_tags теперь вызывают DeprecationWarning вместо FutureWarning только для уведомления разработчиков, а не конечных пользователей. По Guillaume Lemaitre в #30573

sklearn.metrics#

  • Исправление Исправлена регрессия, когда метрика scikit-learn, вызванная на тензорах PyTorch CPU, вызывала ошибку (с отключённой диспетчеризацией Array API, что является значением по умолчанию). Автор Loïc Estève #30454

sklearn.model_selection#

sklearn.tree#

  • Исправление Используйте log2 вместо ln для построения деревьев, чтобы сохранить поведение предыдущих версий. С помощью Томас Фан #30557

sklearn.utils#

  • Улучшение utils.estimator_checks.check_estimator_sparse_tag гарантирует, что тег оценщика input_tags.sparse согласован с его fit метод (принимающий разреженный ввод X или вызов соответствующей ошибки). При Antoine Baker #30187

  • Исправление Вызвать DeprecationWarning когда нет конкретной реализации __sklearn_tags__ в MRO оценщика. Мы запрашиваем наследование от BaseEstimator который реализует __sklearn_tags__. Путем Guillaume Lemaitre #30516

Версия 1.6.0#

Декабрь 2024

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

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

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

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

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

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

Отказ от официальной поддержки PyPy#

Из-за ограниченных ресурсов сопровождающих и небольшого числа пользователей официальная поддержка PyPy была прекращена. Некоторые части scikit-learn могут по-прежнему работать, но PyPy больше не тестируется в непрерывной интеграции scikit-learn. По Loïc Estève #29128

Прекращение поддержки сборки с помощью setuptools#

Начиная с scikit-learn 1.6, поддержка сборки с setuptools была удалена. Meson — единственный поддерживаемый способ сборки scikit-learn. По Loïc Estève #29400

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

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

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

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

Не стесняйтесь попробовать свободнопоточность на вашем случае использования и сообщить о любых проблемах!

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

sklearn.base#

sklearn.calibration#

sklearn.cluster#

  • Изменение API The copy параметр cluster.Birch был устаревшим в 1.6 и будет удален в 1.8. Он не имеет эффекта, так как оценщик не выполняет операции на месте на входных данных. По Yao Xiao #29124

sklearn.compose#

  • Улучшение sklearn.compose.ColumnTransformer verbose_feature_names_out теперь принимает строковый формат или вызываемый объект для генерации имен признаков. По Marc Bresson #28934

sklearn.covariance#

sklearn.cross_decomposition#

sklearn.datasets#

  • Функция datasets.fetch_file позволяет загружать произвольные файлы данных из интернета. Он обрабатывает локальное кэширование, проверки целостности с помощью хешей SHA256 и автоматические повторные попытки в случае HTTP-ошибок. Оливье Гризель #29354

sklearn.decomposition#

  • Улучшение LatentDirichletAllocation теперь имеет normalize параметр в transform и fit_transform методы управления нормализацией распределения тем документа. По Адрин Джалали #30097

  • Исправление IncrementalPCA теперь будет вызывать только ValueError когда количество образцов во входных данных для partial_fit меньше количества компонентов при первом вызове partial_fit. Последующие вызовы partial_fit больше не сталкиваются с этим ограничением. Благодаря Томас Гесси-Джонс #30224

sklearn.discriminant_analysis#

sklearn.ensemble#

sklearn.feature_extraction#

sklearn.frozen#

  • Основная функция FrozenEstimator теперь введена возможность заморозки оценщика. Это означает вызов .fit на него не оказывает эффекта, и выполнение clone(frozenestimator) возвращает тот же оценщик вместо неподготовленного клона. #29705 По Адрин Джалали #29705

sklearn.impute#

  • Исправление impute.KNNImputer исключает образцы с расстояниями nan при вычислении среднего значения для равномерных весов. По Xuefeng Xu #29135

  • Исправление Когда min_value и max_value являются array-подобными, и некоторые признаки удаляются из-за keep_empty_features=False, impute.IterativeImputer больше не вызывает ошибку и теперь корректно индексирует. Автор Guntitat Sawadwuthikul #29451

  • Исправление Исправлено impute.IterativeImputer чтобы убедиться, что он не пропускает итеративный процесс, когда keep_empty_features установлено в True. Путем Arif Qodari #29779

  • Изменение API Добавить предупреждение в impute.SimpleImputer когда keep_empty_feature=False и strategy="constant". В этом случае пустые признаки не удаляются, и это поведение изменится в 1.8. По Arthur Courselle и Simon Riou #29950

sklearn.linear_model#

  • Улучшение The solver="newton-cholesky" в linear_model.LogisticRegression и linear_model.LogisticRegressionCV расширен для поддержки полной мультиномиальной потери в многоклассовой настройке. Путем Christian Lorentzen #28840

  • Исправление В linear_model.Ridge и linear_model.RidgeCV, после fit, coef_ атрибут теперь имеет форму (n_samples,) как другие линейные модели. Путем Maxwell Liu, Guillaume Lemaitre, и Адрин Джалали #19746

  • Исправление linear_model.LogisticRegressionCV исправляет обработку весов выборок для расчета тестовых оценок. По Шрути Нат #29419

  • Исправление linear_model.LassoCV и linear_model.ElasticNetCV теперь учитывает веса образцов для определения сетки поиска внутренне настраиваемых alpha гиперпараметр. По John Hopfensperger и Шрути Нат #29442

  • Исправление linear_model.LogisticRegression, linear_model.PoissonRegressor, linear_model.GammaRegressor, linear_model.TweedieRegressor теперь учитывают веса выборок при принятии решения о переходе к solver='lbfgs' всякий раз, когда solver='newton-cholesky' становится численно неустойчивым. По Antoine Baker #29818

  • Исправление linear_model.RidgeCV теперь правильно использует предсказания в том же масштабе, что и целевая переменная, наблюдаемая во время fit. Эти предсказания хранятся в cv_results_ когда scoring != None. Ранее предсказания масштабировались на квадратный корень из весов выборки и смещались на среднее целевой переменной, что приводило к некорректной оценке счета. С помощью Guillaume Lemaitre, Жером Докс и Hanmin Qin #29842

  • Исправление linear_model.RidgeCV теперь корректно поддерживает пользовательские многомерные скореры, позволяя скореру управлять усреднением многомерного вывода. Ранее предсказания и истинные цели сжимались в одномерный массив перед вычислением ошибки. Теперь Guillaume Lemaitre #29884

  • Исправление linear_model.LinearRegression теперь устанавливает cond параметр при вызове scipy.linalg.lstsq решатель на плотных входных данных. Это обеспечивает более численно устойчивые результаты на данных с недостаточным рангом. В частности, эмпирически фиксирует ожидаемое свойство эквивалентности между обучением с перевзвешиванием или с повторяющимися точками данных. По Antoine Baker #30040

  • Исправление linear_model.LogisticRegression и другие линейные модели, которые принимают solver="newton-cholesky" теперь сообщают правильное количество итераций, когда они возвращаются к "lbfgs" solver из-за вырожденной матрицы Гессе. Путем Оливье Гризель #30100

  • Исправление SGDOneClassSVM теперь правильно наследует от OutlierMixin и теги правильно установлены. Автор Guillaume Lemaitre #30227

  • Изменение API Устаревает copy_X в linear_model.TheilSenRegressor так как параметр не имеет эффекта. copy_X будет удалена в 1.8. По Adam Li #29105

sklearn.manifold#

sklearn.metrics#

sklearn.model_selection#

sklearn.neighbors#

sklearn.neural_network#

sklearn.pipeline#

  • Основная функция pipeline.Pipeline теперь может преобразовывать метаданные до шага, требующего метаданные, которые можно установить с помощью transform_input параметр. Путем Адрин Джалали #28901

  • Улучшение pipeline.Pipeline теперь предупреждает о необходимости обучения перед вызовом методов, требующих обученного конвейера. Это предупреждение станет ошибкой в версии 1.8. Адрин Джалали #29868

  • Исправление Исправлена проблема с тегами и типом оценщика Pipeline когда конвейер пуст. Это позволяет корректно отображать HTML-представление пустого конвейера. По Gennaro Daniele Acciaro #30203

sklearn.preprocessing#

sklearn.semi_supervised#

sklearn.tree#

  • Функция tree.ExtraTreeClassifier и tree.ExtraTreeRegressor теперь поддерживает пропущенные значения в матрице данных X. Пропущенные значения обрабатываются путем случайного перемещения всех выборок в левый или правый дочерний узел при обходе дерева. С помощью Adam Li и Loïc Estève #27966, #30318

  • Исправление Экранировать двойные кавычки для меток и имен признаков при экспорте деревьев в формат Graphviz. По Сантьяго М. Мола. #17575

sklearn.utils#

  • Улучшение utils.check_array теперь принимает ensure_non_negative для проверки на отрицательные значения в переданном массиве, ранее доступной только через вызов utils.check_non_negative. Путем Tamara Atanasoska #29540

  • Улучшение check_estimator и parametrize_with_checks теперь проверьте и выдайте ошибку, если классификатор имеет tags.classifier_tags.multi_class = False тег, но не завершается ошибкой на многоклассовых данных. По Адрин Джалали #29874

  • Улучшение utils.validation.check_is_fitted теперь передает безсостоятельные оценщики. Оценщик может указать, что он безсостоятельный, установив requires_fit тег. См. Теги оценщиков для получения дополнительной информации. По Адрин Джалали #29880

  • Улучшение Изменения в check_estimator и parametrize_with_checks.

    • check_estimator вводит новые аргументы: on_skip, on_fail, и callback для управления поведением проверяющего модуля. Обратитесь к документации API для получения подробностей.

    • generate_only=True устарел в check_estimator. Используйте estimator_checks_generator вместо этого.

    • The _xfail_checks тег оценщика теперь удален, и теперь, чтобы указать, какие тесты ожидаются к провалу, вы можете передать словарь в check_estimator как expected_failed_checks параметр. Аналогично, expected_failed_checks параметр в parametrize_with_checks может быть использован, что является вызываемым объектом, возвращающим словарь вида:

      {
          "check_name": "reason to mark this check as xfail",
      }
      

    По Адрин Джалали #30149

  • Исправление utils.estimator_checks.parametrize_with_checks и utils.estimator_checks.check_estimator теперь поддерживают оценщики, которые имеют set_output вызывается на них. По Адрин Джалали #29869

  • Изменение API The assert_all_finite параметр функций utils.check_array, utils.check_X_y, utils.as_float_array переименован в ensure_all_finite. force_all_finite будет удалена в 1.8. По Жереми дю Буаберранже #29404

  • Изменение API utils.estimator_checks.check_sample_weights_invariance заменено на utils.estimator_checks.check_sample_weight_equivalence_on_dense_data который использует целочисленные (включая нулевые) веса и utils.estimator_checks.check_sample_weight_equivalence_on_sparse_data который делает то же самое на разреженных данных. С помощью Antoine Baker #29818, #30137

  • Изменение API Используя _estimator_type для установки типа оценщика устарела. Наследуйте от ClassifierMixin, RegressorMixin, TransformerMixin, или OutlierMixin вместо этого. Альтернативно, вы можете установить estimator_type в Tags в __sklearn_tags__ метод. Путем Адрин Джалали #30122

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

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

Aaron Schumacher, Abdulaziz Aloqeely, abhi-jha, Acciaro Gennaro Daniele, Adam J. Stewart, Adam Li, Adeel Hassan, Adeyemi Biola, Aditi Juneja, Adrin Jalali, Aisha, Akanksha Mhadolkar, Akihiro Kuno, Alberto Torres, alexqiao, Alihan Zihna, Aniruddha Saha, antoinebaker, Antony Lee, Anurag Varma, Arif Qodari, Arthur Courselle, ArthurDbrn, Arturo Amor, Aswathavicky, Audrey Flanders, aurelienmorgan, Austin, awwwyan, AyGeeEm, a.zy.lee, baggiponte, BlazeStorm001, bme-git, Boney Patel, brdav, Brigitta Sipőcz, Cailean Carter, Camille Troillard, Carlo Lemos, Christian Lorentzen, Christian Veenhuis, Christine P. Chai, claudio, Conrad Stevens, datarollhexasphericon, Davide Chicco, David Matthew Cherney, Dea María Léon, Deepak Saldanha, Deepyaman Datta, dependabot[bot], dinga92, Dmitry Kobak, Domenico, Drew Craeton, dymil, Edoardo Abati, EmilyXinyi, Eric Larson, Evelyn, fabianhenning, Farid “Freddie” Taba, Gael Varoquaux, Giorgio Angelotti, Hleb Levitski, Guillaume Lemaitre, Guntitat Sawadwuthikul, Haesun Park, Hanjun Kim, Henrique Caroço, hhchen1105, Hugo Boulenger, Ilya Komarov, Inessa Pawson, Ivan Pan, Ivan Wiryadi, Jaimin Chauhan, Jakob Bull, James Lamb, Janez Demšar, Jérémie du Boisberranger, Jérôme Dockès, Jirair Aroyan, João Morais, Joe Cainey, Joel Nothman, John Enblom, JorgeCardenas, Joseph Barbier, jpienaar-tuks, Julian Chan, K.Bharat Reddy, Kevin Doshi, Lars, Loic Esteve, Lucas Colley, Lucy Liu, lunovian, Marc Bresson, Marco Edward Gorelli, Marco Maggi, Marco Wolsza, Maren Westermann, MarieS-WiMLDS, Martin Helm, Mathew Shen, mathurinm, Matthew Feickert, Maxwell Liu, Meekail Zain, Michael Dawson, Miguel Cárdenas, m-maggi, mrastgoo, Natalia Mokeeva, Nathan Goldbaum, Nathan Orgera, nbrown-ScottLogic, Nikita Chistyakov, Nithish Bolleddula, Noam Keidar, NoPenguinsLand, Norbert Preining, notPlancha, Olivier Grisel, Omar Salman, ParsifalXu, Piotr, Priyank Shroff, Priyansh Gupta, Quentin Barthélemy, Rachit23110261, Rahil Parikh, raisadz, Rajath, renaissance0ne, Reshama Shaikh, Roberto Rosati, Robert Pollak, rwelsch427, Santiago Castro, Santiago M. Mola, scikit-learn-bot, sean moiselle, SHREEKANT VITTHAL NANDIYAWAR, Shruti Nath, Søren Bredlund Caspersen, Stefanie Senger, Stefano Gaspari, Steffen Schneider, Štěpán Sršeň, Sylvain Combettes, Tamara, Thomas, Thomas Gessey-Jones, Thomas J. Fan, Thomas Li, ThorbenMaa, Tialo, Tim Head, Tuhin Sharma, Tushar Parimi, Umberto Fasci, UV, vedpawar2254, Velislav Babatchev, Victoria Shevchenko, viktor765, Vince Carey, Virgil Chan, Wang Jiayi, Xiao Yuan, Xuefeng Xu, Yao Xiao, yareyaredesuyo, Zachary Vealey, Ziad Amerr