Примечание
Перейти в конец, чтобы скачать полный код примера или запустить этот пример в браузере с помощью JupyterLite или Binder.
Основные нововведения в scikit-learn 1.6
Рады сообщить о выпуске scikit-learn 1.6! В этой версии исправлено множество ошибок и внесены улучшения, а также добавлены важные новые функции. Ниже описаны основные нововведения этого выпуска. Полный список всех изменений см. в примечаниях к выпуску.
Чтобы установить последнюю версию с помощью pip:
pip install --upgrade scikit-learn
или с помощью conda:
conda install -c conda-forge scikit-learn
FrozenEstimator: фиксация оценивателя
Этот метаоцениватель позволяет взять оцениватель и зафиксировать его метод fit, то есть вызов fit не выполняет никаких операций; кроме того, fit_predict и fit_transform вызывают соответственно predict и transform, не вызывая fit. Остальные методы и свойства исходного оценивателя остаются без изменений. Например, предварительно обученную модель можно использовать как шаг-преобразователь в конвейере или передать её некоторым метаоценивателям. Вот короткий пример:
import time
from sklearn.datasets import make_classification
from sklearn.frozen import FrozenEstimator
from sklearn.linear_model import SGDClassifier
from sklearn.model_selection import FixedThresholdClassifier
X, y = make_classification(n_samples=1000, random_state=0)
start = time.time()
classifier = SGDClassifier().fit(X, y)
print(f"Fitting the classifier took {(time.time() - start) * 1_000:.2f} milliseconds")
start = time.time()
threshold_classifier = FixedThresholdClassifier(
estimator=FrozenEstimator(classifier), threshold=0.9
).fit(X, y)
print(
f"Fitting the threshold classifier took {(time.time() - start) * 1_000:.2f} "
"milliseconds"
)
Fitting the classifier took 4.26 milliseconds Fitting the threshold classifier took 0.62 milliseconds
При обучении классификатора с порогом обучение вложенного SGDClassifier было пропущено. Подробнее см. пример Примеры использования FrozenEstimator.
Преобразование данных, отличных от X, в Pipeline
Pipeline теперь при необходимости поддерживает преобразование передаваемых данных, отличных от X. Для этого можно задать новый параметр transform_input. Это особенно полезно при передаче валидационного набора через конвейер.
Предположим, что EstimatorWithValidationSet — это оцениватель, принимающий валидационный набор. Теперь можно создать конвейер, который преобразует валидационный набор и передаёт его оценивателю:
with sklearn.config_context(enable_metadata_routing=True):
est_gs = GridSearchCV(
Pipeline(
(
StandardScaler(),
EstimatorWithValidationSet(...).set_fit_request(X_val=True, y_val=True),
),
# telling pipeline to transform these inputs up to the step which is
# requesting them.
transform_input=["X_val"],
),
param_grid={"estimatorwithvalidationset__param_to_optimize": list(range(5))},
cv=5,
).fit(X, y, X_val=X_val, y_val=y_val)
В приведённом выше коде важны вызов set_fit_request, указывающий, что X_val и y_val требуются методу EstimatorWithValidationSet.fit, и параметр transform_input, сообщающий конвейеру, что необходимо преобразовать X_val перед передачей в EstimatorWithValidationSet.fit.
Обратите внимание, что на данный момент оцениватели scikit-learn ещё не были расширены для приёма пользовательских валидационных наборов. Эта функция выпущена заранее, чтобы собрать отзывы сторонних библиотек, которым она может быть полезна.
Поддержка нескольких классов для LogisticRegression(solver="newton-cholesky")
Решатель "newton-cholesky" (впервые представленный в scikit-learn 1.2) ранее поддерживал только бинарную классификацию в LogisticRegression и некоторых других обобщённых линейных регрессионных оценивателях (а именно PoissonRegressor, GammaRegressor и TweedieRegressor).
В этом выпуске добавлена поддержка нескольких классов (мультиномиальная классификация) в LogisticRegression.
Этот решатель особенно полезен, если число признаков небольшое или среднее. Эмпирически показано, что на некоторых наборах данных среднего размера с категориальными признаками, закодированными методом one-hot, он сходится быстрее и надёжнее других решателей, что видно из результатов тестирования производительности в pull request.
Поддержка пропущенных значений в Extra Trees
Классы ensemble.ExtraTreesClassifier и ensemble.ExtraTreesRegressor теперь поддерживают пропущенные значения. Подробнее см. в руководстве пользователя.
import numpy as np from sklearn.ensemble import ExtraTreesClassifier X = np.array([0, 1, 6, np.nan]).reshape(-1, 1) y = [0, 0, 1, 1] forest = ExtraTreesClassifier(random_state=0).fit(X, y) forest.predict(X)
array([0, 0, 1, 1])
Загрузка любых наборов данных из интернета
Функция datasets.fetch_file позволяет загружать файлы с любого заданного URL. Эта удобная функция обеспечивает встроенное кэширование на локальном диске, проверку целостности по дайджесту sha256 и автоматические повторные попытки при сетевых ошибках.
Её цель — обеспечить такое же удобство и надёжность, как у средств загрузки наборов данных, сохраняя при этом гибкость при работе с данными из произвольных сетевых источников и файлами различных форматов.
Загруженный файл затем можно открыть с помощью универсальных или специализированных для предметной области функций, таких как pandas.read_csv, pandas.read_parquet и т. д.
Поддержка Array API
Начиная с версии 1.5, многие другие оцениватели и функции были обновлены для поддержки входных данных, совместимых с Array API. В частности, это метаоцениватели для настройки гиперпараметров из модуля sklearn.model_selection и метрики из модуля sklearn.metrics.
Инструкции по использованию scikit-learn с библиотеками, совместимыми с Array API, такими как PyTorch и CuPy, приведены на странице поддержки Array API.
Почти полная поддержка маршрутизации метаданных
Маршрутизация метаданных теперь поддерживается всеми оставшимися оценивателями и функциями, кроме AdaBoost. Подробнее см. в руководстве пользователя по маршрутизации метаданных.
Поддержка CPython 3.13 без глобальной блокировки интерпретатора
scikit-learn получил предварительную поддержку CPython без глобальной блокировки интерпретатора; в частности, доступны free-threaded wheel-пакеты для всех поддерживаемых нами платформ.
CPython 3.13 без глобальной блокировки (также известный как nogil) — это экспериментальная версия CPython 3.13, цель которой — обеспечить эффективную работу в многопоточных сценариях за счёт удаления глобальной блокировки интерпретатора (GIL).
Подробнее о CPython без глобальной блокировки см. в документации py-free-threading, в частности о том, как установить CPython без глобальной блокировки, и о отслеживании совместимости экосистемы.
Попробуйте CPython без глобальной блокировки в своих сценариях использования и сообщите о любых проблемах!
Улучшения API для разработчиков сторонних библиотек
Мы работаем над улучшением API для разработчиков сторонних библиотек. Работа ещё продолжается, но в этом выпуске уже сделано немало. В частности:
-
Добавлена функция
sklearn.utils.validation.validate_data, заменившая ранее закрытый методBaseEstimator._validate_data. Эта функция расширяетcheck_arrayи добавляет поддержку запоминания количества и имён входных признаков. - Теги оценивателей переработаны и теперь являются частью публичного API через
sklearn.utils.Tags. Теперь оцениватели должны переопределять методBaseEstimator.__sklearn_tags__вместо реализации метода_more_tags. Если вы хотите поддерживать несколько версий scikit-learn, в своём классе можно реализовать оба метода. - В связи с разработкой публичного API тегов мы удалили тег
_xfail_checks; тесты, которые должны завершиться с ошибкой, теперь напрямую передаются вcheck_estimatorиparametrize_with_checks. Подробности см. в соответствующей документации API. - Многие тесты из общего набора обновлены и теперь выводят более полезные сообщения об ошибках. Мы также добавили новые тесты, которые помогут проще выявлять и устранять возможные проблемы с вашими оценивателями.
Также доступна обновлённая версия руководства Разработка оценивателей scikit-learn, с которой мы рекомендуем ознакомиться.
Общее время выполнения скрипта: (0 минут 0.111 секунды)
Связанные примеры
© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/auto_examples/release_highlights/plot_release_highlights_1_6_0.html