Spec-Zone.ru › scikit-learn

Примечание

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

Основные моменты выпуска scikit-learn 0.24

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

Для установки последней версии (с помощью pip):

pip install --upgrade scikit-learn

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

conda install -c conda-forge scikit-learn

Оценщики последовательного удвоения для настройки гиперпараметров

Метод последовательного удвоения, передовой метод, теперь доступен для исследования пространства параметров и определения их наилучшей комбинации. HalvingGridSearchCV и HalvingRandomSearchCV могут использоваться как прямые замены GridSearchCV и RandomizedSearchCV. Последовательное удвоение — это итеративный процесс выбора, показанный на рисунке ниже. Первый этап выполняется с небольшим количеством ресурсов, где ресурс обычно соответствует числу обучающих выборок, но также может быть произвольным целочисленным параметром, например, n_estimators в случайном лесу. Только подмножество кандидатов параметров выбирается для следующего этапа, который будет выполнен с увеличенным количеством выделенных ресурсов. Только подмножество кандидатов доживет до конца процесса итерации, а наилучшим кандидатом параметра будет тот, который имеет наивысший балл на последнем этапе.

Подробнее см. в Руководстве пользователя (примечание: оценщики последовательного удвоения всё ещё являются экспериментальными).

../../_images/sphx_glr_plot_successive_halving_iterations_001.png
import numpy as np
from scipy.stats import randint
from sklearn.experimental import enable_halving_search_cv  # noqa
from sklearn.model_selection import HalvingRandomSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification

rng = np.random.RandomState(0)

X, y = make_classification(n_samples=700, random_state=rng)

clf = RandomForestClassifier(n_estimators=10, random_state=rng)

param_dist = {
    "max_depth": [3, None],
    "max_features": randint(1, 11),
    "min_samples_split": randint(2, 11),
    "bootstrap": [True, False],
    "criterion": ["gini", "entropy"],
}

rsh = HalvingRandomSearchCV(
    estimator=clf, param_distributions=param_dist, factor=2, random_state=rng
)
rsh.fit(X, y)
rsh.best_params_
{'bootstrap': True, 'criterion': 'gini', 'max_depth': None, 'max_features': 10, 'min_samples_split': 10}

Встроенная поддержка категориальных признаков в оценщиках HistGradientBoosting

HistGradientBoostingClassifier и HistGradientBoostingRegressor теперь имеют встроенную поддержку категориальных признаков: они могут учитывать разделения на неупорядоченные категориальные данные. Подробнее см. в Руководстве пользователя.

../../_images/sphx_glr_plot_gradient_boosting_categorical_001.png

Диаграмма показывает, что новая встроенная поддержка категориальных признаков приводит к временам подгонки, сопоставимым с моделями, где категории обрабатываются как упорядоченные величины, т. е. просто кодируются по порядку. Встроенная поддержка также более выразительна, чем кодирование как one-hot, так и по порядку. Однако для использования нового параметра categorical_features все ещё требуется предварительная обработка данных в конвейере, как показано в этом примере.

Улучшенная производительность оценщиков HistGradientBoosting

Объем памяти ensemble.HistGradientBoostingRegressor и ensemble.HistGradientBoostingClassifier был значительно улучшен во время вызовов fit. Кроме того, инициализация гистограмм теперь выполняется параллельно, что приводит к небольшому увеличению скорости. Дополнительную информацию см. на странице бенчмарков.

Новый мета-оценщик самообучения

Теперь можно использовать новую реализацию самообучения, основанную на алгоритме Ярошевского, с любым классификатором, реализующим predict_proba. Подклассификатор будет вести себя как полусверхобучаемый классификатор, позволяя ему учиться на неустановленных данных. Подробнее см. в Руководстве пользователя.

import numpy as np
from sklearn import datasets
from sklearn.semi_supervised import SelfTrainingClassifier
from sklearn.svm import SVC

rng = np.random.RandomState(42)
iris = datasets.load_iris()
random_unlabeled_points = rng.rand(iris.target.shape[0]) < 0.3
iris.target[random_unlabeled_points] = -1
svc = SVC(probability=True, gamma="auto")
self_training_model = SelfTrainingClassifier(svc)
self_training_model.fit(iris.data, iris.target)
SelfTrainingClassifier(estimator=SVC(gamma='auto', probability=True))
В среде Jupyter, пожалуйста, перезапустите эту ячейку, чтобы отобразить HTML-представление, или доверьтесь блокноту.
На GitHub HTML-представление не может отобразиться, попробуйте загрузить эту страницу с nbviewer.org.
SelfTrainingClassifier(estimator=SVC(gamma='auto', probability=True))
SVC(gamma='auto', probability=True)
SVC(gamma='auto', probability=True)


Новый трансформатор SequentialFeatureSelector

Доступен новый итеративный трансформатор для выбора признаков: SequentialFeatureSelector. Последовательный отбор признаков может добавлять признаки по одному (прямой отбор) или удалять признаки из списка доступных признаков (обратный отбор) на основе максимизации перекрестно-валидированной оценки. См. Руководство пользователя.

from sklearn.feature_selection import SequentialFeatureSelector
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True, as_frame=True)
feature_names = X.columns
knn = KNeighborsClassifier(n_neighbors=3)
sfs = SequentialFeatureSelector(knn, n_features_to_select=2)
sfs.fit(X, y)
print(
    "Features selected by forward sequential selection: "
    f"{feature_names[sfs.get_support()].tolist()}"
)
Features selected by forward sequential selection: ['sepal length (cm)', 'petal width (cm)']

Новая функция приближения ядра PolynomialCountSketch

Новая PolynomialCountSketch приближает многочленное расширение пространства признаков при использовании с линейными моделями, но использует гораздо меньше памяти, чем PolynomialFeatures.

from sklearn.datasets import fetch_covtype
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.kernel_approximation import PolynomialCountSketch
from sklearn.linear_model import LogisticRegression

X, y = fetch_covtype(return_X_y=True)
pipe = make_pipeline(
    MinMaxScaler(),
    PolynomialCountSketch(degree=2, n_components=300),
    LogisticRegression(max_iter=1000),
)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, train_size=5000, test_size=10000, random_state=42
)
pipe.fit(X_train, y_train).score(X_test, y_test)
0.7371

Для сравнения, вот оценка линейной базовой модели для тех же данных:

linear_baseline = make_pipeline(MinMaxScaler(), LogisticRegression(max_iter=1000))
linear_baseline.fit(X_train, y_train).score(X_test, y_test)
0.714

Графики индивидуального условного ожидания

Доступен новый тип диаграммы частичного распределения: диаграмма индивидуального условного ожидания (ICE). Диаграммы ICE визуализируют зависимость предсказания от признака для каждой выборки по отдельности, с одной линией на выборку. См. Руководство пользователя

from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import fetch_california_housing

# from sklearn.inspection import plot_partial_dependence
from sklearn.inspection import PartialDependenceDisplay

X, y = fetch_california_housing(return_X_y=True, as_frame=True)
features = ["MedInc", "AveOccup", "HouseAge", "AveRooms"]
est = RandomForestRegressor(n_estimators=10)
est.fit(X, y)

# plot_partial_dependence has been removed in version 1.2. From 1.2, use
# PartialDependenceDisplay instead.
# display = plot_partial_dependence(
display = PartialDependenceDisplay.from_estimator(
    est,
    X,
    features,
    kind="individual",
    subsample=50,
    n_jobs=3,
    grid_resolution=20,
    random_state=0,
)
display.figure_.suptitle(
    "Partial dependence of house value on non-location features\n"
    "for the California housing dataset, with BayesianRidge"
)
display.figure_.subplots_adjust(hspace=0.3)
Partial dependence of house value on non-location features for the California housing dataset, with BayesianRidge

Новое критерий разделения Пуассона для DecisionTreeRegressor

Интеграция оценки регрессии Пуассона продолжается с версии 0.23. DecisionTreeRegressor теперь поддерживает новый 'poisson' критерий разделения. Установка criterion="poisson" может быть хорошим выбором, если ваш целевой показатель — количество или частота.

from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split
import numpy as np

n_samples, n_features = 1000, 20
rng = np.random.RandomState(0)
X = rng.randn(n_samples, n_features)
# positive integer target correlated with X[:, 5] with many zeros:
y = rng.poisson(lam=np.exp(X[:, 5]) / 2)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=rng)
regressor = DecisionTreeRegressor(criterion="poisson", random_state=0)
regressor.fit(X_train, y_train)
DecisionTreeRegressor(criterion='poisson', random_state=0)
В среде Jupyter, пожалуйста, перезапустите эту ячейку, чтобы отобразить HTML-представление, или доверьтесь блокноту.
На GitHub HTML-представление не может быть отображено, пожалуйста, попробуйте загрузить эту страницу с nbviewer.org.
DecisionTreeRegressor(criterion='poisson', random_state=0)


Новые улучшения документации

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

  • новый раздел о распространённых ошибках и рекомендуемых практиках,
  • пример, иллюстрирующий, как статистически сравнить производительность моделей, оцененных с помощью GridSearchCV,
  • пример по тому, как интерпретировать коэффициенты линейных моделей,
  • пример сравнения регрессии главных компонентов и регрессии наименьших квадратов.

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

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_release_highlights_0_24_0.ipynb

Download Python source code: plot_release_highlights_0_24_0.py

Download zipped: plot_release_highlights_0_24_0.zip

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

Основные моменты выпуска scikit-learn 0.23

Основные моменты выпуска scikit-learn 0.22

Основные моменты выпуска scikit-learn 1.0

Основные моменты выпуска scikit-learn 1.4

© 2007–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/auto_examples/release_highlights/plot_release_highlights_0_24_0.html

Spec-Zone.ru

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