Примечание
Перейти к концу для загрузки полного кода примера. или запустите этот пример в своём браузере через JupyterLite или Binder
Основные изменения в релизе scikit-learn 1.3
Мы рады объявить о выпуске scikit-learn 1.3! Было добавлено множество исправлений ошибок и улучшений, а также несколько новых ключевых функций. Ниже мы подробнее расскажем о некоторых из основных функций этого релиза. Для получения исчерпывающего списка всех изменений, пожалуйста, обратитесь к примечаниям к релизу.
Для установки последней версии (с помощью pip):
pip install --upgrade scikit-learn
или с помощью conda:
conda install -c conda-forge scikit-learn
Маршрутизация метаданных
Мы в процессе внедрения нового способа маршрутизации метаданных, таких как sample_weight по всему коду, что повлияет на то, как мета-эстиматоры, такие как pipeline.Pipeline и model_selection.GridSearchCV маршрутизируют метаданные. Хотя инфраструктура этой функции уже включена в этот релиз, работа продолжается, и не все мета-эстиматоры поддерживают эту новую функцию. Вы можете узнать больше об этой функции в Руководстве пользователя по маршрутизации метаданных. Обратите внимание, что эта функция всё ещё находится в разработке и не реализована для большинства мета-эстиматоров.
Разработчики сторонних библиотек могут уже начать её внедрять в свои мета-эстиматоры. Для получения дополнительной информации см. Руководство для разработчиков по маршрутизации метаданных.
HDBSCAN: иерархическая кластеризация на основе плотности
Изначально размещённый в репозитории scikit-learn-contrib, cluster.HDBSCAN был принят в scikit-learn. Ему не хватает нескольких функций из оригинальной реализации, которые будут добавлены в будущих релизах. Выполняя модифицированную версию cluster.DBSCAN по множеству значений epsilon одновременно, cluster.HDBSCAN находит кластеры с различной плотностью, что делает его более устойчивым к выбору параметров, чем cluster.DBSCAN. Дополнительные сведения в Руководстве пользователя.
import numpy as np
from sklearn.cluster import HDBSCAN
from sklearn.datasets import load_digits
from sklearn.metrics import v_measure_score
X, true_labels = load_digits(return_X_y=True)
print(f"number of digits: {len(np.unique(true_labels))}")
hdbscan = HDBSCAN(min_cluster_size=15).fit(X)
non_noisy_labels = hdbscan.labels_[hdbscan.labels_ != -1]
print(f"number of clusters found: {len(np.unique(non_noisy_labels))}")
print(v_measure_score(true_labels[hdbscan.labels_ != -1], non_noisy_labels))
number of digits: 10 number of clusters found: 11 0.9694898472080092
TargetEncoder: новая стратегия кодирования категорий
Хорошо подходящий для категориальных признаков с высокой кратностью, preprocessing.TargetEncoder кодирует категории на основе уменьшенной оценки средних значений целевой переменной для наблюдений, принадлежащих к этой категории. Подробнее в Руководстве пользователя.
import numpy as np from sklearn.preprocessing import TargetEncoder X = np.array([["cat"] * 30 + ["dog"] * 20 + ["snake"] * 38], dtype=object).T y = [90.3] * 30 + [20.4] * 20 + [21.2] * 38 enc = TargetEncoder(random_state=0) X_trans = enc.fit_transform(X, y) enc.encodings_
[array([90.3, 20.4, 21.2])]
Поддержка пропущенных значений в деревьях решений
Классы tree.DecisionTreeClassifier и tree.DecisionTreeRegressor теперь поддерживают пропущенные значения. Для каждого потенциального порога на не-пропущенных данных, разделитель оценит разбиение с всеми пропущенными значениями, попадающими в левый или правый узел. Подробнее в Руководстве пользователя, или см. Особенности в деревьях гистограммного градиентного бустинга для примера использования этой функции в HistGradientBoostingRegressor.
import numpy as np from sklearn.tree import DecisionTreeClassifier X = np.array([0, 1, 6, np.nan]).reshape(-1, 1) y = [0, 0, 1, 1] tree = DecisionTreeClassifier(random_state=0).fit(X, y) tree.predict(X)
array([0, 0, 1, 1])
Новый дисплей ValidationCurveDisplay
model_selection.ValidationCurveDisplay теперь доступен для построения результатов из model_selection.validation_curve.
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import ValidationCurveDisplay
X, y = make_classification(1000, 10, random_state=0)
_ = ValidationCurveDisplay.from_estimator(
LogisticRegression(),
X,
y,
param_name="C",
param_range=np.geomspace(1e-5, 1e3, num=9),
score_type="both",
score_name="Accuracy",
)

Функция потерь Gamma для градиентного бустинга
Класс ensemble.HistGradientBoostingRegressor поддерживает функцию потерь Gamma отклонения через loss="gamma". Эта функция потерь полезна для моделирования строго положительных целевых переменных с правым скосом распределения.
import numpy as np from sklearn.model_selection import cross_val_score from sklearn.datasets import make_low_rank_matrix from sklearn.ensemble import HistGradientBoostingRegressor n_samples, n_features = 500, 10 rng = np.random.RandomState(0) X = make_low_rank_matrix(n_samples, n_features, random_state=rng) coef = rng.uniform(low=-10, high=20, size=n_features) y = rng.gamma(shape=2, scale=np.exp(X @ coef) / 2) gbdt = HistGradientBoostingRegressor(loss="gamma") cross_val_score(gbdt, X, y).mean()
np.float64(0.46858513287221654)
Группирование редких категорий в OrdinalEncoder
Аналогично preprocessing.OneHotEncoder, класс preprocessing.OrdinalEncoder теперь поддерживает агрегирование редких категорий в один вывод для каждого признака. Параметры для включения сбора редких категорий — min_frequency и max_categories. Более подробную информацию см. в Руководстве пользователя.
from sklearn.preprocessing import OrdinalEncoder
import numpy as np
X = np.array(
[["dog"] * 5 + ["cat"] * 20 + ["rabbit"] * 10 + ["snake"] * 3], dtype=object
).T
enc = OrdinalEncoder(min_frequency=6).fit(X)
enc.infrequent_categories_
[array(['dog', 'snake'], dtype=object)]
Общее время выполнения скрипта: (0 минут 1,393 секунды)
Связанные примеры
© 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_1_3_0.html