Примечание
Перейти к концу для скачивания полного примера кода. Или запустить этот пример в вашем браузере через JupyterLite или Binder
Основные моменты выпуска scikit-learn 0.23
Мы рады объявить о выпуске scikit-learn 0.23! Было добавлено множество исправлений ошибок и улучшений, а также некоторые новые ключевые функции. Ниже мы подробнее рассмотрим некоторые из основных функций этого выпуска. Для исчерпывающего списка всех изменений, пожалуйста, обратитесь к примечаниям к выпуску.
Для установки последней версии (с помощью pip):
pip install --upgrade scikit-learn
или с помощью conda:
conda install -c conda-forge scikit-learn
Обобщенные линейные модели и потеря функции Пуассона для градиентного усиления
Долгожданные обобщенные линейные модели с ненормальными функциями потерь теперь доступны. В частности, были реализованы три новых регрессора: PoissonRegressor, GammaRegressor и TweedieRegressor. Регрессор Пуассона может использоваться для моделирования положительных целых счетов или относительных частот. Подробнее см. в Руководстве пользователя. Кроме того, HistGradientBoostingRegressor также поддерживает новую функцию потерь «poisson».
import numpy as np from sklearn.model_selection import train_test_split from sklearn.linear_model import PoissonRegressor from sklearn.ensemble import HistGradientBoostingRegressor 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) glm = PoissonRegressor() gbdt = HistGradientBoostingRegressor(loss="poisson", learning_rate=0.01) glm.fit(X_train, y_train) gbdt.fit(X_train, y_train) print(glm.score(X_test, y_test)) print(gbdt.score(X_test, y_test))
0.35776189065725783 0.42425183539869415
Подробное визуальное представление оценщиков
Оценщики теперь можно визуализировать в ноутбуках, включив опцию display='diagram'. Это особенно полезно для обобщения структуры конвейеров и других составных оценщиков, с интерактивностью для предоставления деталей. Щелкните по изображению примера ниже, чтобы развернуть элементы конвейера. См. Визуализация составных оценщиков, чтобы узнать, как использовать эту функцию.
from sklearn import set_config
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.impute import SimpleImputer
from sklearn.compose import make_column_transformer
from sklearn.linear_model import LogisticRegression
set_config(display="diagram")
num_proc = make_pipeline(SimpleImputer(strategy="median"), StandardScaler())
cat_proc = make_pipeline(
SimpleImputer(strategy="constant", fill_value="missing"),
OneHotEncoder(handle_unknown="ignore"),
)
preprocessor = make_column_transformer(
(num_proc, ("feat1", "feat3")), (cat_proc, ("feat0", "feat2"))
)
clf = make_pipeline(preprocessor, LogisticRegression())
clf
Масштабируемость и стабильность улучшений KMeans
Оценщик KMeans был полностью переработан и теперь значительно быстрее и стабильнее. Кроме того, алгоритм Элкана теперь совместим с разреженными матрицами. Оценщик использует параллелизм на основе OpenMP вместо использования joblib, поэтому параметр n_jobs больше не имеет эффекта. Для получения более подробной информации о том, как контролировать количество потоков, см. наши Примечания по параллелизму.
import scipy import numpy as np from sklearn.model_selection import train_test_split from sklearn.cluster import KMeans from sklearn.datasets import make_blobs from sklearn.metrics import completeness_score rng = np.random.RandomState(0) X, y = make_blobs(random_state=rng) X = scipy.sparse.csr_matrix(X) X_train, X_test, _, y_test = train_test_split(X, y, random_state=rng) kmeans = KMeans(n_init="auto").fit(X_train) print(completeness_score(kmeans.predict(X_test), y_test))
0.6560362663398502
Улучшения в оценщиках градиентного усиления на основе гистограмм
Были внесены различные улучшения в HistGradientBoostingClassifier и HistGradientBoostingRegressor. Помимо функции потерь Пуассона, упомянутой выше, эти оценщики теперь поддерживают веса образцов. Также был добавлен автоматический критерий раннего прекращения: раннее прекращение включено по умолчанию, когда количество образцов превышает 10000. Наконец, пользователи теперь могут определить ограничения монотонности, чтобы ограничить прогнозы на основе изменений определенных признаков. В следующем примере мы создаем целевой показатель, который в целом положительно коррелирован с первым признаком, с некоторым шумом. Применение ограничений монотонности позволяет прогнозу уловить глобальный эффект первого признака, вместо подгонки шума. Для примера использования см. Признаки в деревьях гистограмм градиентного усиления.
import numpy as np
from matplotlib import pyplot as plt
from sklearn.model_selection import train_test_split
# from sklearn.inspection import plot_partial_dependence
from sklearn.inspection import PartialDependenceDisplay
from sklearn.ensemble import HistGradientBoostingRegressor
n_samples = 500
rng = np.random.RandomState(0)
X = rng.randn(n_samples, 2)
noise = rng.normal(loc=0.0, scale=0.01, size=n_samples)
y = 5 * X[:, 0] + np.sin(10 * np.pi * X[:, 0]) - noise
gbdt_no_cst = HistGradientBoostingRegressor().fit(X, y)
gbdt_cst = HistGradientBoostingRegressor(monotonic_cst=[1, 0]).fit(X, y)
# plot_partial_dependence has been removed in version 1.2. From 1.2, use
# PartialDependenceDisplay instead.
# disp = plot_partial_dependence(
disp = PartialDependenceDisplay.from_estimator(
gbdt_no_cst,
X,
features=[0],
feature_names=["feature 0"],
line_kw={"linewidth": 4, "label": "unconstrained", "color": "tab:blue"},
)
# plot_partial_dependence(
PartialDependenceDisplay.from_estimator(
gbdt_cst,
X,
features=[0],
line_kw={"linewidth": 4, "label": "constrained", "color": "tab:orange"},
ax=disp.axes_,
)
disp.axes_[0, 0].plot(
X[:, 0], y, "o", alpha=0.5, zorder=-1, label="samples", color="tab:green"
)
disp.axes_[0, 0].set_ylim(-3, 3)
disp.axes_[0, 0].set_xlim(-1, 1)
plt.legend()
plt.show()

Поддержка весов выборок для Lasso и ElasticNet
Два линейных регрессора Lasso и ElasticNet теперь поддерживают веса выборок.
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_regression
from sklearn.linear_model import Lasso
import numpy as np
n_samples, n_features = 1000, 20
rng = np.random.RandomState(0)
X, y = make_regression(n_samples, n_features, random_state=rng)
sample_weight = rng.rand(n_samples)
X_train, X_test, y_train, y_test, sw_train, sw_test = train_test_split(
X, y, sample_weight, random_state=rng
)
reg = Lasso()
reg.fit(X_train, y_train, sample_weight=sw_train)
print(reg.score(X_test, y_test, sw_test))
0.999791942438998
Общее время выполнения скрипта: (0 минут 0,608 секунд)
Связанные примеры
© 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_23_0.html