Примечание
Перейти в конец, чтобы скачать полный код примера или запустить этот пример в браузере с помощью 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 в случайном лесе. Для следующей итерации выбирается только часть кандидатов параметров; она выполняется с постепенно увеличивающимся объёмом выделенных ресурсов. До конца итерационного процесса доходят лишь некоторые кандидаты, а лучшим считается кандидат параметров, набравший на последней итерации наибольший балл.
Подробнее см. в руководстве пользователя (обратите внимание: оцениватели последовательного сокращения пока имеют экспериментальный статус).
import numpy as np
from scipy.stats import randint
from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier
from sklearn.experimental import enable_halving_search_cv # noqa: F401
from sklearn.model_selection import HalvingRandomSearchCV
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 теперь встроена поддержка категориальных признаков: они могут учитывать разбиения по неупорядоченным категориальным данным. Подробнее см. в руководстве пользователя.
График показывает, что новая встроенная поддержка категориальных признаков позволяет добиться времени обучения, сопоставимого с моделями, в которых категории рассматриваются как упорядоченные величины, то есть просто кодируются порядковыми значениями. Встроенная поддержка также обеспечивает большую выразительность по сравнению с кодированием one-hot и порядковым кодированием. Однако для использования нового параметра categorical_features данные по-прежнему необходимо предварительно обработать в конвейере, как показано в этом примере.
Повышение производительности оценивателей HistGradientBoosting
Значительно уменьшен объём памяти, необходимый для ensemble.HistGradientBoostingRegressor и ensemble.HistGradientBoostingClassifier при вызовах fit. Кроме того, инициализация гистограммы теперь выполняется параллельно, что немного ускоряет работу. Подробнее см. на странице тестов производительности.
Новый метаоцениватель для самообучения
Теперь новую реализацию самообучения, основанную на алгоритме Яровски, можно использовать с любым классификатором, реализующим predict_proba. Вложенный классификатор будет работать как полуконтролируемый классификатор, что позволит ему обучаться на неразмеченных данных. Подробнее см. в руководстве пользователя.
import numpy as np from sklearn import datasets from sklearn.linear_model import LogisticRegression from sklearn.semi_supervised import SelfTrainingClassifier 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 clf = LogisticRegression() self_training_model = SelfTrainingClassifier(clf) self_training_model.fit(iris.data, iris.target)
/home/circleci/project/sklearn/linear_model/_logistic.py:599: ConvergenceWarning: lbfgs failed to converge after 100 iteration(s) (status=1):
STOP: TOTAL NO. OF ITERATIONS REACHED LIMIT
Increase the number of iterations to improve the convergence (max_iter=100).
You might also want to scale the data as shown in:
https://scikit-learn.org/stable/modules/preprocessing.html
Please also refer to the documentation for alternative solver options:
https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression
n_iter_i = _check_optimize_result(
/home/circleci/project/sklearn/linear_model/_logistic.py:599: ConvergenceWarning: lbfgs failed to converge after 100 iteration(s) (status=1):
STOP: TOTAL NO. OF ITERATIONS REACHED LIMIT
Increase the number of iterations to improve the convergence (max_iter=100).
You might also want to scale the data as shown in:
https://scikit-learn.org/stable/modules/preprocessing.html
Please also refer to the documentation for alternative solver options:
https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression
n_iter_i = _check_optimize_result(
Новый преобразователь SequentialFeatureSelector
Доступен новый итеративный преобразователь для отбора признаков: SequentialFeatureSelector. Последовательный отбор признаков может добавлять признаки по одному (прямой отбор) или удалять признаки из списка доступных признаков (обратный отбор), максимизируя оценку, полученную с помощью перекрёстной проверки. См. Руководство пользователя.
from sklearn.datasets import load_iris
from sklearn.feature_selection import SequentialFeatureSelector
from sklearn.neighbors import KNeighborsClassifier
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.kernel_approximation import PolynomialCountSketch
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import MinMaxScaler
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.7343
Для сравнения приведём оценку линейной базовой модели на тех же данных:
linear_baseline = make_pipeline(MinMaxScaler(), LogisticRegression(max_iter=1000)) linear_baseline.fit(X_train, y_train).score(X_test, y_test)
0.7135
Графики индивидуального условного ожидания
Доступен новый вид графика частичной зависимости: график индивидуального условного ожидания (ICE). Графики ICE визуализируют зависимость предсказания от признака отдельно для каждого образца, используя отдельную линию для каждого образца. См. Руководство пользователя
from sklearn.datasets import fetch_california_housing
from sklearn.ensemble import RandomForestRegressor
# 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)

Новый критерий разбиения Пуассона для DecisionTreeRegressor
Интеграция оценки регрессии Пуассона продолжается с версии 0.23. DecisionTreeRegressor теперь поддерживает новый критерий разбиения 'poisson'. Если целевая переменная представляет собой количество или частоту, хорошим выбором может стать значение criterion="poisson".
import numpy as np from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeRegressor 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)
Новые улучшения документации
Добавлены новые примеры и страницы документации в рамках постоянной работы по улучшению понимания методов машинного обучения:
- новый раздел о распространённых ошибках и рекомендуемых практиках,
- пример, показывающий, как статистически сравнить производительность моделей, оценённых с помощью
GridSearchCV, - пример того, как интерпретировать коэффициенты линейных моделей,
- пример сравнения регрессии на главных компонентах и метода частичных наименьших квадратов.
Общее время выполнения скрипта: (0 минут 14.868 секунды)
Связанные примеры
© 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_0_24_0.html