Spec-Zone.ru › scikit-learn

Примечание

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

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

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

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

pip install --upgrade scikit-learn

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

conda install -c conda-forge scikit-learn

HistGradientBoosting поддерживает категориальные типы данных в DataFrame

ensemble.HistGradientBoostingClassifier и ensemble.HistGradientBoostingRegressor теперь напрямую поддерживают датафреймы с категориальными признаками. Здесь у нас набор данных, содержащий как категориальные, так и числовые признаки:

from sklearn.datasets import fetch_openml

X_adult, y_adult = fetch_openml("adult", version=2, return_X_y=True)

# Remove redundant and non-feature columns
X_adult = X_adult.drop(["education-num", "fnlwgt"], axis="columns")
X_adult.dtypes
age                  int64
workclass         category
education         category
marital-status    category
occupation        category
relationship      category
race              category
sex               category
capital-gain         int64
capital-loss         int64
hours-per-week       int64
native-country    category
dtype: object

При установке categorical_features="from_dtype" классификатор градиентного бустинга обрабатывает столбцы с категориальными типами данных как категориальные признаки алгоритма:

from sklearn.ensemble import HistGradientBoostingClassifier
from sklearn.metrics import roc_auc_score
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X_adult, y_adult, random_state=0)
hist = HistGradientBoostingClassifier(categorical_features="from_dtype")

hist.fit(X_train, y_train)
y_decision = hist.decision_function(X_test)
print(f"ROC AUC score is {roc_auc_score(y_test, y_decision)}")
ROC AUC score is 0.9282576093428612

Вывод Polars в set_output

Трансформеры scikit-learn теперь поддерживают вывод в формате Polars с помощью API set_output.

import polars as pl

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

df = pl.DataFrame(
    {"height": [120, 140, 150, 110, 100], "pet": ["dog", "cat", "dog", "cat", "cat"]}
)
preprocessor = ColumnTransformer(
    [
        ("numerical", StandardScaler(), ["height"]),
        ("categorical", OneHotEncoder(sparse_output=False), ["pet"]),
    ],
    verbose_feature_names_out=False,
)
preprocessor.set_output(transform="polars")

df_out = preprocessor.fit_transform(df)
df_out
shape: (5, 3)
height pet_cat pet_dog
f64 f64 f64
-0.215666 0.0 1.0
0.862662 1.0 0.0
1.401826 0.0 1.0
-0.754829 1.0 0.0
-1.293993 1.0 0.0


print(f"Output type: {type(df_out)}")
Output type: <class 'polars.dataframe.frame.DataFrame'>

Поддержка пропущенных значений в Random Forest

Классы ensemble.RandomForestClassifier и ensemble.RandomForestRegressor теперь поддерживают пропущенные значения. При обучении каждого отдельного дерева разделитель оценивает каждый возможный порог, направляя пропущенные значения в левый и правый узлы. Подробнее см. в руководстве пользователя.

import numpy as np

from sklearn.ensemble import RandomForestClassifier

X = np.array([0, 1, 6, np.nan]).reshape(-1, 1)
y = [0, 0, 1, 1]

forest = RandomForestClassifier(random_state=0).fit(X, y)
forest.predict(X)
array([0, 0, 1, 1])

Добавлена поддержка монотонных ограничений в моделях на основе деревьев

В scikit-learn 0.23 мы добавили поддержку монотонных ограничений для градиентного бустинга на основе гистограмм, а теперь эта функция поддерживается и во всех остальных моделях на основе деревьев: деревьях, случайных лесах, Extra Trees и точном градиентном бустинге. Здесь мы демонстрируем эту функцию на примере случайного леса для задачи регрессии.

import matplotlib.pyplot as plt

from sklearn.ensemble import RandomForestRegressor
from sklearn.inspection import PartialDependenceDisplay

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

rf_no_cst = RandomForestRegressor().fit(X, y)
rf_cst = RandomForestRegressor(monotonic_cst=[1, 0]).fit(X, y)

disp = PartialDependenceDisplay.from_estimator(
    rf_no_cst,
    X,
    features=[0],
    feature_names=["feature 0"],
    line_kw={"linewidth": 4, "label": "unconstrained", "color": "tab:blue"},
)
PartialDependenceDisplay.from_estimator(
    rf_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)
disp.axes_[0, 0].legend()
plt.show()
plot release highlights 1 4 0

Расширенное отображение оценивателей

Отображение оценивателей стало информативнее. Рассмотрим forest, определённый выше:

forest
RandomForestClassifier(random_state=0)
В среде Jupyter повторно выполните эту ячейку, чтобы отобразить HTML-представление, или доверьте этому ноутбуку.
На GitHub HTML-представление не отображается. Попробуйте загрузить эту страницу с помощью nbviewer.org.
Параметры
random_state random_state: int, экземпляр RandomState или None, по умолчанию=None

Управляет как случайностью при бутстрэп-выборке наблюдений, используемых
при построении деревьев (если ``bootstrap=True``), так и выборкой
признаков, рассматриваемых при поиске наилучшего разбиения в каждом узле
(если ``max_features < n_features``).
Подробнее см. в :term:`глоссарии <random_state>`.
0
n_estimators n_estimators: int, по умолчанию=100

Количество деревьев в лесу.

.. versionchanged:: 0.22
В версии 0.22 значение `n_estimators` по умолчанию изменено
с 10 на 100.
100
criterion criterion: {"gini", "entropy", "log_loss"}, по умолчанию="gini"

Функция для оценки качества разбиения. Поддерживаются критерии
"gini" для индекса Джини, а также "log_loss" и "entropy" для
информационного выигрыша Шеннона; см. :ref:`tree_mathematical_formulation`.
Примечание: этот параметр зависит от дерева.
'gini'
max_depth max_depth: int, по умолчанию=None

Максимальная глубина дерева. Если значение равно None, узлы расширяются,
пока все листья не станут чистыми или пока каждый лист не будет содержать
меньше наблюдений, чем min_samples_split.
None
min_samples_split min_samples_split: int или float, по умолчанию=2

Минимальное количество наблюдений, необходимое для разбиения внутреннего узла:

- Если задано int, `min_samples_split` задаёт минимальное количество наблюдений.
- Если задано float, `min_samples_split` является долей, а
`ceil(min_samples_split * n_samples)` — минимальным
количеством наблюдений для каждого разбиения.

.. versionchanged:: 0.18
Добавлена поддержка значений float, задающих доли.
2
min_samples_leaf min_samples_leaf: int или float, по умолчанию=1

Минимальное количество наблюдений, необходимое в узле-листе.
Точка разбиения на любой глубине будет рассматриваться, только если в каждой
из левой и правой ветвей останется не менее ``min_samples_leaf`` обучающих
наблюдений. Это может привести к сглаживанию модели,
особенно в регрессии.

- Если задано int, `min_samples_leaf` задаёт минимальное количество наблюдений.
- Если задано float, `min_samples_leaf` является долей, а
`ceil(min_samples_leaf * n_samples)` — минимальным
количеством наблюдений для каждого узла.

.. versionchanged:: 0.18
Добавлена поддержка значений float, задающих доли.
1
min_weight_fraction_leaf min_weight_fraction_leaf: float, по умолчанию=0.0

Минимальная взвешенная доля суммы весов (всех входных
наблюдений), необходимая в узле-листе. Если sample_weight не задан, наблюдения
имеют одинаковый вес.
0.0
max_features max_features: {"sqrt", "log2", None}, int или float, по умолчанию="sqrt"

Количество признаков, рассматриваемых при поиске наилучшего разбиения:

- Если задано int, при каждом разбиении рассматриваются `max_features` признаков.
- Если задано float, `max_features` является долей, а
при каждом разбиении рассматривается `max(1, int(max_features * n_features_in_))` признаков.
- Если задано "sqrt", то `max_features=sqrt(n_features)`.
- Если задано "log2", то `max_features=log2(n_features)`.
- Если задано None, то `max_features=n_features`.

.. versionchanged:: 1.1
Значение `max_features` по умолчанию изменено с `"auto"` на `"sqrt"`.

Примечание: поиск разбиения не прекращается, пока не будет найдено хотя бы одно
допустимое разбиение наблюдений узла, даже если для этого потребуется
фактически проверить больше признаков, чем указано в ``max_features``.
'sqrt'
max_leaf_nodes max_leaf_nodes: int, по умолчанию=None

Строить деревья, используя стратегию best-first, с количеством листьев ``max_leaf_nodes``.
Наилучшие узлы определяются по относительному уменьшению неоднородности.
Если задано None, количество узлов-листьев не ограничено.
None
min_impurity_decrease min_impurity_decrease: float, по умолчанию=0.0

Узел будет разбит, если это разбиение уменьшает неоднородность
на величину, большую или равную этому значению.

Уравнение для взвешенного уменьшения неоднородности имеет следующий вид::

N_t / N * (impurity - N_t_R / N_t * right_impurity
- N_t_L / N_t * left_impurity)

где ``N`` — общее количество наблюдений, ``N_t`` — количество
наблюдений в текущем узле, ``N_t_L`` — количество наблюдений в левом потомке,
а ``N_t_R`` — количество наблюдений в правом потомке.

Если передан ``sample_weight``, значения ``N``, ``N_t``, ``N_t_R`` и ``N_t_L``
обозначают взвешенные суммы.

.. versionadded:: 0.19
0.0
bootstrap bootstrap: bool, по умолчанию=True

Используются ли бутстрэп-выборки при построении деревьев. Если False,
для построения каждого дерева используется весь набор данных.
True
oob_score oob_score: bool или вызываемый объект, по умолчанию=False

Использовать ли наблюдения вне выборки для оценки обобщающей способности.
По умолчанию используется :func:`~sklearn.metrics.accuracy_score`.
Чтобы использовать пользовательскую метрику, передайте вызываемый объект с сигнатурой `metric(y_true, y_pred)`. Доступно только при `bootstrap=True`.

Пример оценки ошибки вне выборки (OOB) см. в примере
:ref:`sphx_glr_auto_examples_ensemble_plot_ensemble_oob.py`.
False
n_jobs n_jobs: int, по умолчанию=None

Количество задач, выполняемых параллельно. Методы :meth:`fit`, :meth:`predict`,
:meth:`decision_path` и :meth:`apply` распараллеливаются по
деревьям. ``None`` означает 1, если только не используется контекст :obj:`joblib.parallel_backend`.
``-1`` означает использование всех процессоров. Подробнее см. в :term:`глоссарии
<n_jobs>`.
None
verbose verbose: int, по умолчанию=0

Управляет подробностью вывода при обучении и предсказании.
0
warm_start warm_start: bool, по умолчанию=False

Если установлено значение ``True``, используется результат предыдущего вызова fit
и к ансамблю добавляются новые оцениватели; в противном случае обучается совершенно
новый лес. Подробнее см. в :term:`глоссарии <warm_start>` и
:ref:`tree_ensemble_warm_start`.
False
class_weight class_weight: {"balanced", "balanced_subsample"}, словарь или список словарей, по умолчанию=None

Веса классов в формате ``{class_label: weight}``.
Если параметр не задан, предполагается, что вес всех классов равен единице. Для
задач с несколькими выходами можно передать список словарей в том же
порядке, что и столбцы y.

Обратите внимание: для задач с несколькими выходами (включая многометочную классификацию) веса следует
задавать для каждого класса каждого столбца в отдельном словаре. Например,
для многометочной классификации с четырьмя классами веса следует задать так:
[{0: 1, 1: 1}, {0: 1, 1: 5}, {0: 1, 1: 1}, {0: 1, 1: 1}], а не так:
[{1:1}, {2:5}, {3:1}, {4:1}].

Режим "balanced" использует значения y для автоматической корректировки
весов, обратно пропорциональных частотам классов во входных данных,
по формуле ``n_samples / (n_classes * np.bincount(y))``.

Режим "balanced_subsample" аналогичен режиму "balanced", но веса вычисляются
на основе бутстрэп-выборки для каждого построенного дерева.

При нескольких выходах веса для каждого столбца y перемножаются.

Если задан sample_weight, эти веса перемножаются с ним (передаваемым
через метод fit).
None
ccp_alpha ccp_alpha: неотрицательное float, по умолчанию=0.0

Параметр сложности, используемый для минимального отсечения по критерию стоимость-сложность. Будет выбрано
поддерево с наибольшей стоимостью сложности, меньшей, чем
``ccp_alpha``. По умолчанию отсечение не выполняется. Подробнее см.
:ref:`minimal_cost_complexity_pruning`. Пример такого отсечения см. в
:ref:`sphx_glr_auto_examples_tree_plot_cost_complexity_pruning.py`.

.. versionadded:: 0.22
0.0
max_samples max_samples: int или float, по умолчанию=None

Если bootstrap имеет значение True, количество наблюдений, выбираемых из X
для обучения каждого базового оценивателя.

- Если задано None (по умолчанию), выбираются `X.shape[0]` наблюдений независимо от
`sample_weight`.
- Если задано int, выбираются `max_samples` наблюдений.
- Если задано float, выбирается `max_samples * X.shape[0]` наблюдений без весов
или `max_samples * sample_weight.sum()` взвешенных наблюдений.

.. versionadded:: 0.22

.. versionchanged:: 1.9
Для взвешенных наблюдений значение float `max_samples` рассчитывается относительно `sample_weight.sum()`, а не
`X.shape[0]`.
None
monotonic_cst monotonic_cst: массивоподобный объект из int формы (n_features), по умолчанию=None

Задаёт монотонное ограничение для каждого признака.
- 1: монотонное возрастание
- 0: без ограничений
- -1: монотонное убывание

Если monotonic_cst равен None, ограничения не применяются.

Монотонные ограничения не поддерживаются для:
- многоклассовой классификации (т. е. когда `n_classes > 2`),
- классификации с несколькими выходами (т. е. когда `n_outputs_ > 1`).

Ограничения применяются к вероятности положительного класса.

Подробнее см. в :ref:`руководстве пользователя <monotonic_cst_gbdt>`.

.. versionadded:: 1.4
None
Обученные атрибуты
Имя Тип Значение
classes_ classes_: ndarray формы (n_classes,) или список таких массивов

Метки классов (для задачи с одним выходом) или список массивов с метками
классов (для задачи с несколькими выходами).
ndarray[int64](2,) [0,1]
estimator_ estimator_: :class:`~sklearn.tree.DecisionTreeClassifier`

Шаблон дочернего оценивателя, используемый для создания коллекции обученных
подоценивателей.

.. versionadded:: 1.2
`base_estimator_` переименован в `estimator_`.
DecisionTreeClassifier DecisionTreeClassifier()
estimators_ estimators_: список DecisionTreeClassifier

Коллекция обученных подоценивателей.
list [DecisionTreeC...ate=209652396), DecisionTreeC...ate=398764591), DecisionTreeC...ate=924231285), DecisionTreeC...te=1478610112), ...]
estimators_samples_ estimators_samples_: список массивов

Подмножество выбранных наблюдений (то есть наблюдений, попавших в бутстрэп-выборку) для каждого базового
оценивателя. Каждое подмножество задаётся массивом выбранных индексов.

.. versionadded:: 1.4
list [array([0, 3, ..., dtype=int32), array([3, 1, ..., dtype=int32), array([1, 3, ..., dtype=int32), array([0, 1, ..., dtype=int32), ...]
feature_importances_ feature_importances_: ndarray формы (n_features,)

Важность признаков, основанная на неоднородности.
Чем выше значение, тем важнее признак.
Важность признака вычисляется как (нормированное)
суммарное уменьшение критерия, обеспечиваемое этим признаком. Также известна
как важность по Джини.

Предупреждение: важность признаков на основе неоднородности может вводить в заблуждение для
признаков с высокой кардинальностью (большим количеством уникальных значений). В качестве альтернативы см.
:func:`sklearn.inspection.permutation_importance`.
ndarray[float64](1,) [1.]
n_classes_ n_classes_: int или список

Количество классов (для задачи с одним выходом) или список, содержащий
количество классов для каждого выхода (для задачи с несколькими выходами).
int 2
n_features_in_ n_features_in_: int

Количество признаков, обнаруженных во время :term:`обучения`.

.. versionadded:: 0.24
int 1
n_outputs_ n_outputs_: int

Количество выходов при выполнении ``fit``.
int 1


Документацию оценивателя можно открыть, нажав на значок «?» в правом верхнем углу схемы.

Кроме того, после обучения оценивателя цвет его отображения меняется с оранжевого на синий. Эту информацию также можно получить, наведя указатель на значок «i».

from sklearn.base import clone

clone(forest)  # the clone is not fitted
RandomForestClassifier(random_state=0)
В среде Jupyter повторно выполните эту ячейку, чтобы отобразить HTML-представление, или доверьте выполнение блокноту.
На GitHub невозможно отобразить HTML-представление. Попробуйте открыть эту страницу на nbviewer.org.
Параметры
random_state random_state: int, экземпляр RandomState или None, по умолчанию=None

Управляет как случайностью формирования выборок бутстрэппинга, используемых
при построении деревьев (если ``bootstrap=True``), так и выбором
признаков, рассматриваемых при поиске наилучшего разбиения в каждом узле
(если ``max_features < n_features``).
Подробнее см. :term:`глоссарий <random_state>`.
0
n_estimators n_estimators: int, по умолчанию=100

Количество деревьев в лесу.

.. versionchanged:: 0.22
Значение `n_estimators` по умолчанию изменилось с 10 на 100
в версии 0.22.
100
criterion criterion: {"gini", "entropy", "log_loss"}, по умолчанию="gini"

Функция для оценки качества разбиения. Поддерживаются критерии
"gini" для примеси Джини и "log_loss" и "entropy" для
информационного выигрыша Шеннона; см. :ref:`tree_mathematical_formulation`.
Примечание: этот параметр относится только к деревьям.
'gini'
max_depth max_depth: int, по умолчанию=None

Максимальная глубина дерева. Если значение равно None, узлы расширяются,
пока все листья не станут чистыми или пока каждый лист не будет содержать
меньше образцов, чем min_samples_split.
None
min_samples_split min_samples_split: int или float, по умолчанию=2

Минимальное количество образцов, необходимое для разбиения внутреннего узла:

- Если задано int, `min_samples_split` считается минимальным количеством.
- Если задано float, `min_samples_split` является долей, а
`ceil(min_samples_split * n_samples)` — минимальное
количество образцов для каждого разбиения.

.. versionchanged:: 0.18
Добавлена возможность задавать доли с помощью значений float.
2
min_samples_leaf min_samples_leaf: int или float, по умолчанию=1

Минимальное количество образцов, необходимое в листовом узле.
Точка разбиения на любой глубине будет рассматриваться только в том случае,
если в каждой из левой и правой ветвей останется не менее
``min_samples_leaf`` обучающих образцов. Это может сгладить модель,
особенно в задачах регрессии.

- Если задано int, `min_samples_leaf` считается минимальным количеством.
- Если задано float, `min_samples_leaf` является долей, а
`ceil(min_samples_leaf * n_samples)` — минимальное
количество образцов для каждого узла.

.. versionchanged:: 0.18
Добавлена возможность задавать доли с помощью значений float.
1
min_weight_fraction_leaf min_weight_fraction_leaf: float, по умолчанию=0.0

Минимальная взвешенная доля суммы весов (всех входных образцов),
необходимая в листовом узле. Если sample_weight не задан, образцы
имеют одинаковый вес.
0.0
max_features max_features: {"sqrt", "log2", None}, int или float, по умолчанию="sqrt"

Количество признаков, рассматриваемых при поиске наилучшего разбиения:

- Если задано int, при каждом разбиении рассматривается `max_features` признаков.
- Если задано float, `max_features` является долей, и при каждом разбиении
рассматривается `max(1, int(max_features * n_features_in_))` признаков.
- Если задано "sqrt", то `max_features=sqrt(n_features)`.
- Если задано "log2", то `max_features=log2(n_features)`.
- Если задано None, то `max_features=n_features`.

.. versionchanged:: 1.1
Значение `max_features` по умолчанию изменилось с `"auto"` на `"sqrt"`.

Примечание: поиск разбиения продолжается, пока не будет найдено хотя бы одно
допустимое разбиение образцов узла, даже если для этого фактически придется
проверить больше признаков, чем ``max_features``.
'sqrt'
max_leaf_nodes max_leaf_nodes: int, по умолчанию=None

Строит деревья, добавляя узлы в порядке убывания их полезности, и ограничивает
их количество значением ``max_leaf_nodes``.
Лучшие узлы определяются по относительному уменьшению примеси.
Если задано None, количество листовых узлов не ограничено.
None
min_impurity_decrease min_impurity_decrease: float, по умолчанию=0.0

Узел будет разделен, если это разбиение уменьшает примесь
на величину, не меньшую данного значения.

Уравнение для взвешенного уменьшения примеси имеет следующий вид::

N_t / N * (impurity - N_t_R / N_t * right_impurity
- N_t_L / N_t * left_impurity)

где ``N`` — общее количество образцов, ``N_t`` — количество
образцов в текущем узле, ``N_t_L`` — количество образцов в левом дочернем
узле, а ``N_t_R`` — количество образцов в правом дочернем узле.

Если передан ``sample_weight``, значения ``N``, ``N_t``, ``N_t_R`` и ``N_t_L``
обозначают взвешенные суммы.

.. versionadded:: 0.19
0.0
bootstrap bootstrap: bool, по умолчанию=True

Используются ли выборки бутстрэппинга при построении деревьев. Если False,
для построения каждого дерева используется весь набор данных.
True
oob_score oob_score: bool или вызываемый объект, по умолчанию=False

Использовать ли образцы, не попавшие в выборку бутстрэппинга, для оценки
качества обобщения. По умолчанию используется :func:`~sklearn.metrics.accuracy_score`.
Чтобы использовать пользовательскую метрику, передайте вызываемый объект
с сигнатурой `metric(y_true, y_pred)`. Доступно только при `bootstrap=True`.

Пример оценки ошибки на образцах вне бутстрэп-выборки (OOB) см. в примере
:ref:`sphx_glr_auto_examples_ensemble_plot_ensemble_oob.py`.
False
n_jobs n_jobs: int, по умолчанию=None

Количество задач, выполняемых параллельно. :meth:`fit`, :meth:`predict`,
:meth:`decision_path` и :meth:`apply` распараллеливаются по
деревьям. Значение ``None`` означает 1, если только выполнение не происходит
в контексте :obj:`joblib.parallel_backend`. Значение ``-1`` означает использование
всех процессоров. Подробнее см. :term:`глоссарий
<n_jobs>`.
None
verbose verbose: int, по умолчанию=0

Управляет подробностью вывода при обучении и предсказании.
0
warm_start warm_start: bool, по умолчанию=False

Если задано ``True``, повторно использует результат предыдущего вызова fit
и добавляет в ансамбль новые оценщики; в противном случае создает совершенно
новый лес. Подробнее см. :term:`глоссарий <warm_start>` и
:ref:`tree_ensemble_warm_start`.
False
class_weight class_weight: {"balanced", "balanced_subsample"}, dict или список словарей, по умолчанию=None

Веса классов в форме ``{class_label: weight}``.
Если параметр не задан, предполагается, что вес всех классов равен единице. Для
задач с несколькими выходами можно передать список словарей в том же
порядке, что и столбцы y.

Для задач с несколькими выходами (включая многометочную классификацию) вес
следует задать для каждого класса каждого столбца в отдельном словаре. Например,
для многометочной классификации с четырьмя классами следует указать веса
[{0: 1, 1: 1}, {0: 1, 1: 5}, {0: 1, 1: 1}, {0: 1, 1: 1}], а не
[{1:1}, {2:5}, {3:1}, {4:1}].

Режим "balanced" использует значения y для автоматической настройки
весов обратно пропорционально частотам классов во входных данных
по формуле ``n_samples / (n_classes * np.bincount(y))``

Режим "balanced_subsample" аналогичен "balanced", за исключением того,
что веса вычисляются на основе выборки бутстрэппинга для каждого
построенного дерева.

Для нескольких выходов веса каждого столбца y перемножаются.

Если задан параметр sample_weight, указанные веса перемножаются с ним
(передается через метод fit).
None
ccp_alpha ccp_alpha: неотрицательное число с плавающей точкой, по умолчанию=0.0

Параметр сложности, используемый для минимальной обрезки по критерию стоимости и сложности. Будет выбран
подграф дерева с наибольшим значением сложности, меньшим
``ccp_alpha``. По умолчанию обрезка не выполняется. Подробнее см.
:ref:`minimal_cost_complexity_pruning`. Пример такой обрезки см.
:ref:`sphx_glr_auto_examples_tree_plot_cost_complexity_pruning.py`.

.. versionadded:: 0.22
0.0
max_samples max_samples: int или float, по умолчанию=None

Если bootstrap имеет значение True, количество образцов, выбираемых из X
для обучения каждого базового оценщика.

- Если задано None (по умолчанию), выбираются `X.shape[0]` образцов независимо от
`sample_weight`.
- Если задано int, выбираются `max_samples` образцов.
- Если задано float, выбираются `max_samples * X.shape[0]` невзвешенных образцов
или `max_samples * sample_weight.sum()` взвешенных образцов.

.. versionadded:: 0.22

.. versionchanged:: 1.9
Для взвешенных образцов значение float параметра `max_samples` рассчитывается
относительно `sample_weight.sum()`, а не `X.shape[0]`.
None
monotonic_cst monotonic_cst: массивоподобный объект из целых чисел формы (n_features), по умолчанию=None

Задает ограничение монотонности для каждого признака.
- 1: монотонное возрастание
- 0: без ограничений
- -1: монотонное убывание

Если monotonic_cst равен None, ограничения не применяются.

Ограничения монотонности не поддерживаются для:
- многоклассовой классификации (то есть при `n_classes > 2`),
- классификации с несколькими выходами (то есть при `n_outputs_ > 1`).

Ограничения применяются к вероятности положительного класса.

Подробнее см. :ref:`руководство пользователя <monotonic_cst_gbdt>`.

.. versionadded:: 1.4
None


Поддержка маршрутизации метаданных

Многие метаоценщики и процедуры кросс-валидации теперь поддерживают маршрутизацию метаданных; их список приведен в руководстве пользователя. Например, вот как можно выполнить вложенную кросс-валидацию с весами образцов и GroupKFold:

import sklearn
from sklearn.datasets import make_regression
from sklearn.linear_model import Lasso
from sklearn.metrics import get_scorer
from sklearn.model_selection import GridSearchCV, GroupKFold, cross_validate

# For now by default metadata routing is disabled, and need to be explicitly
# enabled.
sklearn.set_config(enable_metadata_routing=True)

n_samples = 100
X, y = make_regression(n_samples=n_samples, n_features=5, noise=0.5)
rng = np.random.RandomState(7)
groups = rng.randint(0, 10, size=n_samples)
sample_weights = rng.rand(n_samples)
estimator = Lasso().set_fit_request(sample_weight=True)
hyperparameter_grid = {"alpha": [0.1, 0.5, 1.0, 2.0]}
scoring_inner_cv = get_scorer("neg_mean_squared_error").set_score_request(
    sample_weight=True
)
inner_cv = GroupKFold(n_splits=5)

grid_search = GridSearchCV(
    estimator=estimator,
    param_grid=hyperparameter_grid,
    cv=inner_cv,
    scoring=scoring_inner_cv,
)

outer_cv = GroupKFold(n_splits=5)
scorers = {
    "mse": get_scorer("neg_mean_squared_error").set_score_request(sample_weight=True)
}
results = cross_validate(
    grid_search,
    X,
    y,
    cv=outer_cv,
    scoring=scorers,
    return_estimator=True,
    params={"sample_weight": sample_weights, "groups": groups},
)
print("cv error on test sets:", results["test_mse"])

# Setting the flag to the default `False` to avoid interference with other
# scripts.
sklearn.set_config(enable_metadata_routing=False)
cv error on test sets: [-0.30765609 -0.19866463 -0.60041733 -0.16796125 -0.27765513]

Повышение эффективности использования памяти и времени выполнения PCA на разреженных данных

Теперь PCA может напрямую обрабатывать разреженные матрицы с помощью солвера arpack, используя scipy.sparse.linalg.LinearOperator, чтобы избежать материализации больших разреженных матриц при разложении на собственные значения ковариационной матрицы набора данных.

from time import time

import scipy.sparse as sp

from sklearn.decomposition import PCA

X_sparse = sp.random(m=1000, n=1000, random_state=0)
X_dense = X_sparse.toarray()

t0 = time()
PCA(n_components=10, svd_solver="arpack").fit(X_sparse)
time_sparse = time() - t0

t0 = time()
PCA(n_components=10, svd_solver="arpack").fit(X_dense)
time_dense = time() - t0

print(f"Speedup: {time_dense / time_sparse:.1f}x")
Speedup: 3.9x

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

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_release_highlights_1_4_0.ipynb

Download Python source code: plot_release_highlights_1_4_0.py

Download zipped: plot_release_highlights_1_4_0.zip

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

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

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

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

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

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

Spec-Zone.ru

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