Spec-Zone.ru › scikit-learn

Примечание

Перейти в конец, чтобы скачать полный код примера или запустить этот пример в браузере с помощью JupyterLite или Binder.

Основные нововведения в scikit-learn 1.0

Мы рады объявить о выпуске scikit-learn 1.0! Библиотека уже довольно давно стабильна, и выпуск версии 1.0 — это признание данного факта и сигнал для наших пользователей. В этом выпуске нет несовместимых изменений, кроме обычного двухрелизного цикла устаревания. Мы постараемся придерживаться этого правила и в дальнейшем.

В выпуск вошли новые ключевые возможности, а также многочисленные улучшения и исправления ошибок. Ниже мы подробно рассмотрим некоторые основные возможности этого выпуска. Полный список всех изменений см. в примечаниях к выпуску.

Чтобы установить последнюю версию с помощью pip:

pip install --upgrade scikit-learn

или с помощью conda:

conda install -c conda-forge scikit-learn

Именованные и позиционные аргументы

API scikit-learn предоставляет множество функций и методов с большим количеством входных параметров. Например, до этого выпуска объект HistGradientBoostingRegressor можно было создать следующим образом:

HistGradientBoostingRegressor("squared_error", 0.1, 100, 31, None,
    20, 0.0, 255, None, None, False, "auto", "loss", 0.1, 10, 1e-7,
    0, None)

Чтобы понять приведённый выше код, читателю нужно обратиться к документации API и проверить расположение и назначение каждого параметра. Чтобы сделать код, написанный с использованием scikit-learn, более понятным, теперь пользователям нужно указывать большинство параметров по имени, в качестве именованных аргументов, а не позиционных. Например, приведённый выше код будет выглядеть так:

HistGradientBoostingRegressor(
    loss="squared_error",
    learning_rate=0.1,
    max_iter=100,
    max_leaf_nodes=31,
    max_depth=None,
    min_samples_leaf=20,
    l2_regularization=0.0,
    max_bins=255,
    categorical_features=None,
    monotonic_cst=None,
    warm_start=False,
    early_stopping="auto",
    scoring="loss",
    validation_fraction=0.1,
    n_iter_no_change=10,
    tol=1e-7,
    verbose=0,
    random_state=None,
)

такой код гораздо легче читать. Позиционные аргументы устарели начиная с версии 0.23, и теперь их использование вызывает TypeError. В некоторых случаях по-прежнему разрешено использовать ограниченное число позиционных аргументов. Например, в PCA по-прежнему разрешён PCA(10), но не разрешён PCA(10, False).

Сплайновые преобразователи

Один из способов добавить нелинейные члены к набору признаков датасета — сгенерировать базисные сплайн-функции для непрерывных/числовых признаков с помощью нового класса SplineTransformer. Сплайны — это кусочно-полиномиальные функции, задаваемые степенью полинома и расположением узлов. Класс SplineTransformer реализует базис B-сплайнов.

../../_images/sphx_glr_plot_polynomial_interpolation_001.png

В следующем коде показана работа со сплайнами. Дополнительные сведения см. в руководстве пользователя.

import numpy as np

from sklearn.preprocessing import SplineTransformer

X = np.arange(5).reshape(5, 1)
spline = SplineTransformer(degree=2, n_knots=3)
spline.fit_transform(X)
array([[0.5  , 0.5  , 0.   , 0.   ],
       [0.125, 0.75 , 0.125, 0.   ],
       [0.   , 0.5  , 0.5  , 0.   ],
       [0.   , 0.125, 0.75 , 0.125],
       [0.   , 0.   , 0.5  , 0.5  ]])

Квантильная регрессия

Квантильная регрессия оценивает медиану или другие квантили \(y\) при условии \(X\), тогда как обычный метод наименьших квадратов (OLS) оценивает условное среднее.

Новая линейная модель QuantileRegressor строит линейные прогнозы \(\hat{y}(w, X) = Xw\) для \(q\)-го квантиля, где \(q \in (0, 1)\). Веса или коэффициенты \(w\) находятся путём решения следующей задачи минимизации:

\[\min_{w} {\frac{1}{n_{\text{samples}}} \sum_i PB_q(y_i - X_i w) + \alpha ||w||_1}.\]

Она включает pinball loss (также известную как линейная функция потерь; см. также mean_pinball_loss):

\[\begin{split}PB_q(t) = q \max(t, 0) + (1 - q) \max(-t, 0) = \begin{cases} q t, & t > 0, \\ 0, & t = 0, \\ (1-q) t, & t < 0 \end{cases}\end{split}\]

а также штраф L1, регулируемый параметром alpha, как и в модели linear_model.Lasso.

Посмотрите следующий пример, чтобы узнать, как это работает, а дополнительные сведения см. в руководстве пользователя.

../../_images/sphx_glr_plot_quantile_regression_002.png

Поддержка имён признаков

Если при вызове fit в оцениватель передаётся DataFrame из pandas, оцениватель задаёт атрибут feature_names_in_, содержащий имена признаков. Это часть предложения SLEP007. Обратите внимание, что поддержка имён признаков включается, только если все имена столбцов DataFrame являются строками. feature_names_in_ используется для проверки соответствия имён столбцов DataFrame, переданного при вызовах, отличных от fit, например predict, признакам, использованным при fit:

import pandas as pd

from sklearn.preprocessing import StandardScaler

X = pd.DataFrame([[1, 2, 3], [4, 5, 6]], columns=["a", "b", "c"])
scalar = StandardScaler().fit(X)
scalar.feature_names_in_
array(['a', 'b', 'c'], dtype=object)

Поддержка метода get_feature_names_out доступна для преобразователей, у которых уже был get_feature_names, а также для преобразователей с взаимно однозначным соответствием между входными и выходными данными, например StandardScaler. В будущих выпусках поддержка get_feature_names_out будет добавлена во все остальные преобразователи. Кроме того, метод compose.ColumnTransformer.get_feature_names_out позволяет объединить имена признаков преобразователей:

import pandas as pd

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

X = pd.DataFrame({"pet": ["dog", "cat", "fish"], "age": [3, 7, 1]})
preprocessor = ColumnTransformer(
    [
        ("numerical", StandardScaler(), ["age"]),
        ("categorical", OneHotEncoder(), ["pet"]),
    ],
    verbose_feature_names_out=False,
).fit(X)

preprocessor.get_feature_names_out()
array(['age', 'pet_cat', 'pet_dog', 'pet_fish'], dtype=object)

При использовании этого preprocessor с конвейером имена признаков, используемые классификатором, получают с помощью среза и вызова get_feature_names_out:

from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline

y = [1, 0, 1]
pipe = make_pipeline(preprocessor, LogisticRegression())
pipe.fit(X, y)
pipe[:-1].get_feature_names_out()
array(['age', 'pet_cat', 'pet_dog', 'pet_fish'], dtype=object)

Более гибкий API для построения графиков

Классы metrics.ConfusionMatrixDisplay, metrics.PrecisionRecallDisplay, metrics.DetCurveDisplay и inspection.PartialDependenceDisplay теперь предоставляют два метода класса: from_estimator и from_predictions, позволяющие строить графики на основе прогнозов или оценивателя. Соответствующие функции plot_* объявлены устаревшими. Примеры первый и второй показывают, как использовать новые возможности построения графиков.

Онлайновый One-Class SVM

Новый класс SGDOneClassSVM реализует онлайновую линейную версию One-Class SVM с использованием стохастического градиентного спуска. В сочетании с методами аппроксимации ядра SGDOneClassSVM можно использовать для приближённого решения One-Class SVM с ядром, реализованного в классе OneClassSVM, при этом сложность времени обучения линейна по числу образцов. Обратите внимание, что сложность One-Class SVM с ядром в лучшем случае квадратична по числу образцов. Поэтому SGDOneClassSVM хорошо подходит для датасетов с большим количеством обучающих образцов (> 10 000), на которых вариант с SGD может работать на несколько порядков быстрее. Посмотрите этот пример, чтобы узнать, как его использовать; дополнительные сведения см. в руководстве пользователя.

../../_images/sphx_glr_plot_anomaly_comparison_001.png

Градиентный бустинг на основе гистограмм теперь стабилен

Классы HistGradientBoostingRegressor и HistGradientBoostingClassifier больше не являются экспериментальными — их можно просто импортировать и использовать:

from sklearn.ensemble import HistGradientBoostingClassifier

Улучшения документации

В этот выпуск вошло множество улучшений документации. Из более чем 2100 принятых запросов на внесение изменений около 800 посвящены улучшению документации.

Общее время выполнения скрипта: (0 минут 0.020 секунды)

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_release_highlights_1_0_0.ipynb

Download Python source code: plot_release_highlights_1_0_0.py

Download zipped: plot_release_highlights_1_0_0.zip

Связанные примеры

Основные нововведения в scikit-learn 1.1

Основные нововведения в scikit-learn 1.2

Основные нововведения в scikit-learn 0.24

Основные нововведения в scikit-learn 1.7

© 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_0_0.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API