Примечание
Перейти в конец, чтобы скачать полный код примера или запустить этот пример в браузере через JupyterLite или Binder.
Основные моменты выпуска scikit-learn 1.9
Мы рады сообщить о выпуске scikit-learn 1.9! В него вошло множество исправлений ошибок и улучшений, а также несколько важных новых функций. Ниже мы расскажем об основных нововведениях этого выпуска. Полный список всех изменений см. в примечаниях к выпуску.
Чтобы установить последнюю версию (с помощью pip):
pip install --upgrade scikit-learn
или с помощью conda:
conda install -c conda-forge scikit-learn
Обратные вызовы
В этом выпуске добавлена экспериментальная поддержка обратных вызовов в scikit-learn. Это объекты, которые можно зарегистрировать в оценщиках с помощью метода set_callbacks, чтобы вызывать их в начале и в конце ключевых этапов обучения. Подробнее см. в руководстве пользователя. Пока обратные вызовы поддерживаются лишь несколькими оценщиками; см. список поддерживаемых оценщиков.
В этом выпуске доступны два встроенных обратных вызова:
-
ProgressBar— для отображения индикаторов выполнения. -
ScoringMonitor— для вычисления и регистрации метрик оценки.
from sklearn.callback import ProgressBar, ScoringMonitor
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
X, y = make_classification(
n_samples=1000, n_features=50, n_classes=10, n_informative=20, random_state=0
)
scoring_monitor = ScoringMonitor(scoring="d2_log_loss_score")
logreg = LogisticRegression(solver="lbfgs")
logreg.set_callbacks(scoring_monitor, ProgressBar())
logreg.fit(X, y)
log = scoring_monitor.get_logs().data_as_pandas
log[["task_name", "task_id", "d2_log_loss_score"]]
LogisticRegression - fit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
Индикаторы выполнения также можно отображать для композиций оценщиков.
from sklearn.callback import ProgressBar
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV
X, y = load_iris(return_X_y=True)
logreg = LogisticRegression(solver="lbfgs")
grid_search = GridSearchCV(logreg, {"C": [10, 1, 0.1]}, n_jobs=2)
grid_search.set_callbacks(ProgressBar())
grid_search.fit(X, y)
Промежуточный вывод. Обратите внимание, что выполнение двух подзадач происходит одновременно, поскольку мы задали n_jobs=2:
GridSearchCV - fit ━━━━━━╸ 17% 0:00:02
GridSearchCV - search #0 ━━━━━━━━━━━━━╸ 34% 0:00:01
GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #1 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #0 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #2 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #3 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #4 ━━━━━━━━━━━━━━━━━━━━━╸ 54% 0:00:01
GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #5 ━━━━━━━━━━━━━━━━━ 44% 0:00:01
Итоговый вывод со всеми выполненными вложенными подзадачами:
GridSearchCV - fit ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
GridSearchCV - search #0 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #1 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #0 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #2 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #3 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #4 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #5 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #6 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #7 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #8 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #9 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #10 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #11 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #12 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #13 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
GridSearchCV - candidate-split-evaluation | LogisticRegression - fit #14 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
GridSearchCV - refit-with-best-params | LogisticRegression - fit #1 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
Также доступен публичный API для реализации поддержки обратных вызовов в сторонних оценщиках и создания пользовательских обратных вызовов. Подробнее см. в руководстве разработчика.
В будущих выпусках появятся новые обратные вызовы и поддержка обратных вызовов в других оценщиках. API обратных вызовов является экспериментальным и может изменяться без периода устаревания.
Улучшения HTML-представления оценщиков
Теперь HTML-представление оценщиков включает сведения, которые становятся доступны после обучения. В таблице «Обученные атрибуты» перечислены обученные атрибуты, их типы и значения. Кроме того, в HTML-представлении преобразователей появились новые визуальные блоки, показывающие количество выходных признаков и их имена.
Разверните схему ниже, нажимая на разные визуальные блоки, чтобы посмотреть новые возможности.
import pandas as pd
from sklearn.compose import make_column_transformer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import OneHotEncoder, StandardScaler
X = pd.DataFrame({"num": [0.1, 0.2, 0.3, 0.4], "cat": ["A", "C", "B", "C"]})
y = [1, 3, 1, 2]
pipe = make_pipeline(
make_column_transformer((StandardScaler(), ["num"]), (OneHotEncoder(), ["cat"])),
LogisticRegression(),
)
pipe.fit(X, y)
Вычисление метрик для различных порогов
Добавлена новая функция metric_at_thresholds для вычисления произвольной метрики бинарной классификации для всех возможных порогов принятия решения.
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, f1_score, metric_at_thresholds
X, y = make_classification(weights=[0.9, 0.1], random_state=0)
lr = LogisticRegression(random_state=0).fit(X, y)
y_score = lr.predict_proba(X)[:, 1]
accuracy, thresholds = metric_at_thresholds(y, y_score, accuracy_score)
f1, _ = metric_at_thresholds(y, y_score, f1_score)
_, ax = plt.subplots()
ax.plot(thresholds, accuracy, label="Accuracy")
ax.plot(thresholds, f1, label="F1")
ax.set_xlabel("threshold")
ax.set_ylabel("metric value")
ax.legend()
plt.show()

Настройка разреженных массивов
Добавлен новый ключ конфигурации "sparse_interface", позволяющий задавать тип разреженных объектов, создаваемых функциями и оценщиками. Теперь можно создавать разреженные массивы вместо разреженных матриц (значение по умолчанию). Это продолжает работу по подготовке к переходу SciPy от разреженных матриц к разреженным массивам.
import sklearn
from sklearn.preprocessing import OneHotEncoder
X = [["fox", "dog", "cat"]]
ohe = OneHotEncoder()
with sklearn.config_context(sparse_interface="sparray"):
Xt = ohe.fit_transform(X)
Xt
<Compressed Sparse Row sparse array of dtype 'float64'
with 3 stored elements and shape (1, 3)>
Общее время выполнения скрипта: (0 минут 0.590 секунды)
Связанные примеры
© 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_9_0.html