Версия 0.22#

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

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

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

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

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

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

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

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

Версия 0.22.2.post1#

3 марта 2020

Выпуск 0.22.2.post1 включает исправление упаковки для исходного дистрибутива, но содержимое пакетов в остальном идентично содержимому колес с версией 0.22.2 (без суффикса .post1). Оба содержат следующие изменения.

Журнал изменений#

sklearn.impute#

  • Эффективность Reduce impute.KNNImputer асимптотическое использование памяти за счёт разбиения попарного вычисления расстояний на блоки. #16397 by Joel Nothman.

sklearn.metrics#

sklearn.neighbors#

Версия 0.22.1#

2 января 2020

Это выпуск с исправлением ошибок, предназначенный в первую очередь для решения некоторых проблем с упаковкой в версии 0.22.0. Также включает незначительные улучшения документации и некоторые исправления ошибок.

Журнал изменений#

sklearn.cluster#

  • Исправление cluster.KMeans с algorithm="elkan" теперь использует тот же критерий остановки, что и по умолчанию algorithm="full". #15930 by @inder128.

sklearn.inspection#

  • Исправление inspection.permutation_importance вернет то же самое importances когда random_state приведено для обоих n_jobs=1 или n_jobs>1 как с общими бэкендами памяти (потокобезопасность), так и с изолированными процессными бэкендами памяти. Также избегайте приведения данных к типу object и ошибок только для чтения на больших датафреймах с n_jobs>1 как сообщалось в #15810. Продолжение #15898 by Шивам Гаргсья. #15933 by Guillaume Lemaitre и Оливье Гризель.

  • Исправление inspection.plot_partial_dependence и inspection.PartialDependenceDisplay.plot теперь последовательно проверяет количество переданных осей. #15760 by Томас Фан.

sklearn.metrics#

  • Исправление metrics.plot_confusion_matrix теперь вызывает ошибку, когда normalize недействителен. Ранее он работал нормально без нормализации. #15888 by Hanmin Qin.

  • Исправление metrics.plot_confusion_matrix теперь правильно окрашивает цвет метки для максимизации контраста с её фоном. #15936 by Томас Фан и @DizietAsahi.

  • Исправление metrics.classification_report больше не игнорирует значение zero_division аргумент ключевого слова. #15879 by Bibhash Chandra Mitra.

  • Исправление Исправлена ошибка в metrics.plot_confusion_matrix для корректной передачи values_format параметр для metrics.ConfusionMatrixDisplay вызов plot(). #15937 by Stephen Blystone.

sklearn.model_selection#

sklearn.naive_bayes#

  • Исправление Удалено abstractmethod декоратор для метода _check_X в naive_bayes.BaseNB что может нарушить зависимые проекты, наследующие от этого устаревшего публичного базового класса. #15996 by Бригитта Сипёч.

sklearn.preprocessing#

  • Исправление preprocessing.QuantileTransformer теперь гарантирует quantiles_ атрибут должен быть полностью отсортирован в неубывающем порядке. #15751 by Tirth Patel.

sklearn.semi_supervised#

sklearn.utils#

  • Исправление utils.check_array теперь корректно преобразует pandas DataFrame с булевыми столбцами во float. #15797 by Томас Фан.

  • Исправление utils.validation.check_is_fitted принимает обратно явный attributes аргумент для проверки конкретных атрибутов как явных маркеров обученного оценщика. Когда нет явного attributes предоставлены, только атрибуты, которые заканчиваются подчеркиванием и не начинаются с двойного подчеркивания, используются как маркеры "обученности". all_or_any аргумент также больше не является устаревшим. Это изменение сделано для восстановления некоторой обратной совместимости с поведением этой утилиты в версии 0.21. #15947 by Томас Фан.

Версия 0.22.0#

3 декабря 2019

Обновление веб-сайта#

Наш веб-сайт был переработан и получил новый современный вид. #14849 by Томас Фан.

Четкое определение публичного API#

Scikit-learn имеет публичный API и приватный API.

Мы стараемся не нарушать публичный API и вводить только обратно совместимые изменения, не требующие действий пользователя. Однако в случаях, когда это невозможно, любое изменение публичного API подлежит циклу устаревания в две минорные версии. Приватный API не документируется публично и не подлежит какому-либо циклу устаревания, поэтому пользователям не следует полагаться на его стабильность.

Функция или объект являются публичными, если они задокументированы в Справочник API и если его можно импортировать с путем импорта без ведущих подчеркиваний. Например sklearn.pipeline.make_pipeline является публичным, в то время как sklearn.pipeline._name_estimators является приватным. sklearn.ensemble._gb.BaseEnsemble также является приватным, потому что весь _gb модуль является приватным.

До версии 0.22 некоторые инструменты были де-факто публичными (без ведущего подчёркивания), хотя они должны были быть приватными изначально. В версии 0.22 эти инструменты стали правильно приватными, и публичное API было очищено. Кроме того, импорт из большинства подмодулей теперь устарел: вы должны, например, использовать from sklearn.cluster import Birch вместо from sklearn.cluster.birch import Birch (на практике, birch.py был перемещен в _birch.py).

Примечание

Все инструменты в публичном API должны быть задокументированы в Справочник API. Если вы найдёте публичный инструмент (без ведущего подчёркивания), которого нет в справочнике API, это означает, что он должен быть либо приватным, либо задокументированным. Пожалуйста, сообщите нам, открыв issue!

Эта работа отслеживалась в issue 9250 и issue 12927.

Устаревания: использование FutureWarning отныне#

При устаревании функции предыдущие версии scikit-learn обычно вызывали DeprecationWarning. Поскольку DeprecationWarnings не отображаются по умолчанию в Python, scikit-learn пришлось прибегнуть к пользовательскому фильтру предупреждений, чтобы всегда показывать предупреждения. Этот фильтр иногда мог конфликтовать с пользовательскими фильтрами предупреждений.

Начиная с версии 0.22, scikit-learn будет показывать FutureWarnings для устареваний, как рекомендуется документацией Python. FutureWarnings всегда отображаются по умолчанию в Python, поэтому пользовательский фильтр был удалён, и scikit-learn больше не мешает пользовательским фильтрам. #15080 by Nicolas Hug.

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

Следующие оценщики и функции, при обучении на тех же данных и параметрах, могут создавать модели, отличные от предыдущей версии. Это часто происходит из-за изменений в логике моделирования (исправления ошибок или улучшения) или в процедурах случайной выборки.

Подробности перечислены в журнале изменений ниже.

(Хотя мы стараемся лучше информировать пользователей, предоставляя эту информацию, мы не можем гарантировать, что этот список полный.)

Журнал изменений#

sklearn.base#

  • Изменение API Начиная с версии 0.24 base.BaseEstimator.get_params вызовет AttributeError, а не вернет None для параметров, которые находятся в конструкторе оценщика, но не хранятся как атрибуты экземпляра. #14464 by Joel Nothman.

sklearn.calibration#

  • Исправление Исправлена ошибка, из-за которой calibration.CalibratedClassifierCV не удается при заданном sample_weight параметр типа list (в случае, когда sample_weights не поддерживаются обёрнутым оценщиком). #13575 by William de Vazelhes.

sklearn.cluster#

  • Функция cluster.SpectralClustering теперь принимает предварительно вычисленный разреженный граф соседей в качестве входных данных. #10482 by Tom Dupre la Tour и Kumar Ashutosh.

  • Улучшение cluster.SpectralClustering теперь принимает n_components параметр. Этот параметр расширяет SpectralClustering функциональность класса для соответствия cluster.spectral_clustering. #13726 by Shuzhe Xiao.

  • Исправление Исправлена ошибка, где cluster.KMeans давал противоречивые результаты между n_jobs=1 и n_jobs>1 из-за обработки случайного состояния. #9288 by Bryan Yang.

  • Исправление Исправлена ошибка, где elkan алгоритм в cluster.KMeans вызывал ошибку сегментации на больших массивах из-за переполнения целочисленного индекса. #15057 by Владимир Королёв.

  • Исправление MeanShift теперь принимает max_iter со значением по умолчанию 300 вместо постоянного использования значения по умолчанию 300. Теперь также предоставляет n_iter_ указывает максимальное количество итераций, выполненных для каждого начального значения. #15120 by Адрин Джалали.

  • Исправление cluster.AgglomerativeClustering и cluster.FeatureAgglomeration теперь вызывает ошибку, если affinity='cosine' и X имеет выборки, которые полностью состоят из нулей. #7943 by @mthorrell.

sklearn.compose#

  • Функция Добавляет compose.make_column_selector который используется с compose.ColumnTransformer для выбора столбцов DataFrame на основе имени и типа данных. #12303 by Томас Фан.

  • Исправление Исправлена ошибка в compose.ColumnTransformer который не смог выбрать правильные столбцы при использовании логического списка с NumPy старше 1.12. #14510 by Guillaume Lemaitre.

  • Исправление Исправлена ошибка в compose.TransformedTargetRegressor который не прошел **fit_params к базовому регрессору. #14890 by Мигель Кабрера.

  • Исправление The compose.ColumnTransformer теперь требует, чтобы количество признаков было согласовано между fit и transform. A FutureWarning вызывается сейчас, и это вызовет ошибку в 0.24. Если количество признаков не согласовано и используется отрицательная индексация, возникает ошибка. #14544 by Адрин Джалали.

sklearn.cross_decomposition#

sklearn.datasets#

sklearn.decomposition#

sklearn.dummy#

  • Исправление dummy.DummyClassifier теперь обрабатывает проверку существования предоставленной константы в случаях с несколькими выходами. #14908 by Martina G. Vilas.

  • Изменение API Значение по умолчанию для strategy параметр в dummy.DummyClassifier изменится с 'stratified' в версии 0.22 до 'prior' в 0.24. FutureWarning выдается при использовании значения по умолчанию. #15382 by Томас Фан.

  • Изменение API The outputs_2d_ атрибут устарел в dummy.DummyClassifier и dummy.DummyRegressor. Это эквивалентно n_outputs > 1. #14933 by Nicolas Hug

sklearn.ensemble#

sklearn.feature_extraction#

sklearn.feature_selection#

sklearn.gaussian_process#

  • Функция Гауссовские процессные модели на структурированных данных: gaussian_process.GaussianProcessRegressor и gaussian_process.GaussianProcessClassifier теперь может принимать список общих объектов (например, строки, деревья, графы и т.д.) в качестве X аргумент для их методов обучения/предсказания. Пользовательское ядро должно быть предоставлено для вычисления матрицы ядра среди общих объектов и должно наследоваться от gaussian_process.kernels.GenericKernelMixin чтобы уведомить модель GPR/GPC, что она обрабатывает невекторные образцы. #15557 by Yu-Hang Tang.

  • Эффективность gaussian_process.GaussianProcessClassifier.log_marginal_likelihood и gaussian_process.GaussianProcessRegressor.log_marginal_likelihood теперь принимает clone_kernel=True аргумент ключевого слова. Когда установлено в False, атрибут ядра изменен, но может привести к улучшению производительности. #14378 by Masashi Shibata.

  • Изменение API Начиная с версии 0.24 gaussian_process.kernels.Kernel.get_params вызовет AttributeError вместо возврата None для параметров, которые находятся в конструкторе оценщика, но не хранятся как атрибуты экземпляра. #14464 by Joel Nothman.

sklearn.impute#

sklearn.inspection#

sklearn.kernel_approximation#

sklearn.linear_model#

sklearn.manifold#

sklearn.metrics#

sklearn.model_selection#

sklearn.multioutput#

sklearn.naive_bayes#

sklearn.neighbors#

sklearn.neural_network#

  • Функция Добавить max_fun параметр в neural_network.BaseMultilayerPerceptron, neural_network.MLPRegressor, и neural_network.MLPClassifier чтобы обеспечить контроль над максимальным количеством оценок функции, чтобы не соответствовать tol улучшение. #9274 by Daniel Perry.

sklearn.pipeline#

sklearn.preprocessing#

sklearn.model_selection#

sklearn.svm#

  • Улучшение svm.SVC и svm.NuSVC теперь принимает break_ties параметр. Этот параметр приводит к predict разрешая ничьи в соответствии со значениями уверенности decision_function, если decision_function_shape='ovr', и количество целевых классов > 2. #12557 by Адрин Джалали.

  • Улучшение Оценщики SVM теперь выбрасывают более конкретную ошибку, когда kernel='precomputed' и обучение на неквадратных данных. #14336 by Грегори Декстер.

  • Исправление svm.SVC, svm.SVR, svm.NuSVR и svm.OneClassSVM при получении отрицательных или нулевых значений для параметра sample_weight в методе fit(), сгенерировал недопустимую модель. Это поведение происходило только в некоторых пограничных сценариях. Теперь в этих случаях fit() завершится с исключением. #14286 by Алекс Шакед.

  • Исправление The n_support_ атрибут svm.SVR и svm.OneClassSVM ранее не инициализировался и имел размер 2. Теперь он имеет размер 1 с правильным значением. #15099 by Nicolas Hug.

  • Исправление исправлена ошибка в BaseLibSVM._sparse_fit где n_SV=0 вызывал ZeroDivisionError. #14894 by Danna Naser.

  • Исправление Решатель liblinear теперь поддерживает sample_weight. #15038 by Guillaume Lemaitre.

sklearn.tree#

sklearn.utils#

  • Функция check_estimator теперь может генерировать проверки, установив generate_only=True. Ранее выполнение check_estimator остановится при первой неудачной проверке. С generate_only=True, все проверки могут выполняться независимо и сообщать о тех, которые не прошли. Подробнее в Создание собственного оценщика. #14381 by Томас Фан.

  • Функция Добавлен специфичный для pytest декоратор, parametrize_with_checks, для параметризации проверок оценщика для списка оценщиков. #14381 by Томас Фан.

  • Функция Новая случайная величина, utils.fixes.loguniform реализует лог-равномерную случайную величину (например, для использования в RandomizedSearchCV). Например, исходы 1, 10 и 100 все равновероятны для loguniform(1, 100). См. #11232 by Скотт Сиверт и Nathaniel Saul, и SciPy PR 10815.

  • Улучшение utils.safe_indexing (теперь устаревший) принимает axis параметр для индексации массивоподобных объектов по строкам и столбцам. Индексация столбцов может выполняться для массивов NumPy, разреженных матриц SciPy и DataFrame Pandas. Была проведена дополнительная рефакторизация. #14035 и #14475 by Guillaume Lemaitre.

  • Улучшение utils.extmath.safe_sparse_dot работает между 3D+ ndarray и разреженной матрицей. #14538 by Жереми дю Буаберранже.

  • Исправление utils.check_array теперь вызывает ошибку вместо приведения NaN к целому числу. #14872 by Roman Yurchak.

  • Исправление utils.check_array теперь будет правильно определять числовые типы данных в pandas dataframes, исправляя ошибку, где float32 был приведен к более высокому типу данных до float64 без необходимости. #15094 by Андреас Мюллер.

  • Изменение API Следующие утилиты устарели и теперь являются приватными:

    • choose_check_classifiers_labels

    • enforce_estimator_tags_y

    • mocking.MockDataFrame

    • mocking.CheckingClassifier

    • optimize.newton_cg

    • random.random_choice_csc

    • utils.choose_check_classifiers_labels

    • utils.enforce_estimator_tags_y

    • utils.optimize.newton_cg

    • utils.random.random_choice_csc

    • utils.safe_indexing

    • utils.mocking

    • utils.fast_dict

    • utils.seq_dataset

    • utils.weight_vector

    • utils.fixes.parallel_helper (удалено)

    • Все из utils.testing за исключением all_estimators который теперь находится в utils.

sklearn.isotonic#

Разное#

  • Исправление Порт lobpcg из SciPy, которые реализуют некоторые исправления ошибок, но доступны только в версии 1.3+. #13609 и #14971 by Guillaume Lemaitre.

  • Изменение API Scikit-learn теперь преобразует любую структуру входных данных, реализующую утиный массив, в массив numpy (используя __array__Как итерируемый объект строковых метрик: __array_function__ (см. NEP 18). #14702 by Андреас Мюллер.

  • Изменение API Заменить ручные проверки на check_is_fitted. Ошибки, возникающие при использовании необученных оценщиков, теперь более единообразны. #13013 by Агамемнон Красулис.

Изменения в проверках оценщика#

Эти изменения в основном затрагивают разработчиков библиотек.

  • Теперь ожидается, что оценщики будут вызывать NotFittedError if predict или transform вызывается перед fit; ранее AttributeError или ValueError было приемлемо. #13013 от Агамемнон Красулис.

  • Бинарные классификаторы теперь поддерживаются в проверках оценщиков. Такие классификаторы должны иметь binary_only=True тег оценщика. #13875 by Тревор Стивенс.

  • Ожидается, что оценщики преобразуют входные данные (X, y, sample_weights) в numpy.ndarray и никогда не вызывать __array_function__ на исходном типе данных, который передается (см. NEP 18). #14702 by Андреас Мюллер.

  • requires_positive_X тег estimator (для моделей, требующих неотрицательности X) теперь используется utils.estimator_checks.check_estimator чтобы убедиться, что выводится правильное сообщение об ошибке, если X содержит отрицательные значения. #14680 by Алекс Грамфор.

  • Добавлена проверка, что парные оценки выдают ошибку на неквадратных данных #14336 by Грегори Декстер.

  • Добавлены два общих теста для многовариантных оценщиков utils.estimator_checks.check_classifier_multioutput и utils.estimator_checks.check_regressor_multioutput. #13392 by Rok Mihevc.

  • Исправление Добавлен check_transformer_data_not_an_array для проверки, где отсутствуют

  • Исправление Разрешение тегов оценщиков теперь следует обычному MRO. Раньше их можно было переопределять только один раз. #14884 by Андреас Мюллер.

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

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

Aaron Alphonsus, Abbie Popa, Abdur-Rahmaan Janhangeer, abenbihi, Abhinav Sagar, Abhishek Jana, Abraham K. Lagat, Adam J. Stewart, Aditya Vyas, Adrin Jalali, Agamemnon Krasoulis, Alec Peters, Alessandro Surace, Alexandre de Siqueira, Alexandre Gramfort, alexgoryainov, Alex Henrie, Alex Itkes, alexshacked, Allen Akinkunle, Anaël Beaugnon, Anders Kaseorg, Andrea Maldonado, Andrea Navarrete, Andreas Mueller, Andreas Schuderer, Andrew Nystrom, Angela Ambroz, Anisha Keshavan, Ankit Jha, Antonio Gutierrez, Anuja Kelkar, Archana Alva, arnaudstiegler, arpanchowdhry, ashimb9, Ayomide Bamidele, Baran Buluttekin, barrycg, Bharat Raghunathan, Bill Mill, Biswadip Mandal, blackd0t, Brian G. Barkley, Brian Wignall, Bryan Yang, c56pony, camilaagw, cartman_nabana, catajara, Cat Chenal, Cathy, cgsavard, Charles Vesteghem, Chiara Marmo, Chris Gregory, Christian Lorentzen, Christos Aridas, Dakota Grusak, Daniel Grady, Daniel Perry, Danna Naser, DatenBergwerk, David Dormagen, deeplook, Dillon Niederhut, Dong-hee Na, Dougal J. Sutherland, DrGFreeman, Dylan Cashman, edvardlindelof, Eric Larson, Eric Ndirangu, Eunseop Jeong, Fanny, federicopisanu, Felix Divo, flaviomorelli, FranciDona, Franco M. Luque, Frank Hoang, Frederic Haase, g0g0gadget, Gabriel Altay, Gabriel do Vale Rios, Gael Varoquaux, ganevgv, gdex1, getgaurav2, Gideon Sonoiya, Gordon Chen, gpapadok, Greg Mogavero, Grzegorz Szpak, Guillaume Lemaitre, Guillem García Subies, H4dr1en, hadshirt, Hailey Nguyen, Hanmin Qin, Hannah Bruce Macdonald, Harsh Mahajan, Harsh Soni, Honglu Zhang, Hossein Pourbozorg, Ian Sanders, Ingrid Spielman, J-A16, jaehong park, Jaime Ferrando Huertas, James Hill, James Myatt, Jay, jeremiedbb, Jérémie du Boisberranger, jeromedockes, Jesper Dramsch, Joan Massich, Joanna Zhang, Joel Nothman, Johann Faouzi, Jonathan Rahn, Jon Cusick, Jose Ortiz, Kanika Sabharwal, Katarina Slama, kellycarmody, Kennedy Kang’ethe, Kensuke Arai, Kesshi Jordan, Kevad, Kevin Loftis, Kevin Winata, Kevin Yu-Sheng Li, Kirill Dolmatov, Kirthi Shankar Sivamani, krishna katyal, Lakshmi Krishnan, Lakshya KD, LalliAcqua, lbfin, Leland McInnes, Léonard Binet, Loic Esteve, loopyme, lostcoaster, Louis Huynh, lrjball, Luca Ionescu, Lutz Roeder, MaggieChege, Maithreyi Venkatesh, Maltimore, Maocx, Marc Torrellas, Marie Douriez, Markus, Markus Frey, Martina G. Vilas, Martin Oywa, Martin Thoma, Masashi SHIBATA, Maxwell Aladago, mbillingr, m-clare, Meghann Agarwal, m.fab, Micah Smith, miguelbarao, Miguel Cabrera, Mina Naghshhnejad, Ming Li, motmoti, mschaffenroth, mthorrell, Natasha Borders, nezar-a, Nicolas Hug, Nidhin Pattaniyil, Nikita Titov, Nishan Singh Mann, Nitya Mandyam, norvan, notmatthancock, novaya, nxorable, Oleg Stikhin, Oleksandr Pavlyk, Olivier Grisel, Omar Saleem, Owen Flanagan, panpiort8, Paolo, Paolo Toccaceli, Paresh Mathur, Paula, Peng Yu, Peter Marko, pierretallotte, poorna-kumar, pspachtholz, qdeffense, Rajat Garg, Raphaël Bournhonesque, Ray, Ray Bell, Rebekah Kim, Reza Gharibi, Richard Payne, Richard W, rlms, Robert Juergens, Rok Mihevc, Roman Feldbauer, Roman Yurchak, R Sanjabi, RuchitaGarde, Ruth Waithera, Sackey, Sam Dixon, Samesh Lakhotia, Samuel Taylor, Sarra Habchi, Scott Gigante, Scott Sievert, Scott White, Sebastian Pölsterl, Sergey Feldman, SeWook Oh, she-dares, Shreya V, Shubham Mehta, Shuzhe Xiao, SimonCW, smarie, smujjiga, Sönke Behrends, Soumirai, Sourav Singh, stefan-matcovici, steinfurt, Stéphane Couvreur, Stephan Tulkens, Stephen Cowley, Stephen Tierney, SylvainLan, th0rwas, theoptips, theotheo, Thierno Ibrahima DIOP, Thomas Edwards, Thomas J Fan, Thomas Moreau, Thomas Schmitt, Tilen Kusterle, Tim Bicker, Timsaur, Tim Staley, Tirth Patel, Tola A, Tom Augspurger, Tom Dupré la Tour, topisan, Trevor Stephens, ttang131, Urvang Patel, Vathsala Achar, veerlosar, Venkatachalam N, Victor Luzgin, Vincent Jeanselme, Vincent Lostanlen, Vladimir Korolev, vnherdeiro, Wenbo Zhao, Wendy Hu, willdarnell, William de Vazelhes, wolframalpha, xavier dupré, xcjason, x-martian, xsat, xun-tang, Yinglr, yokasre, Yu-Hang “Maxin” Tang, Yulia Zamriy, Zhao Feng