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.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 теперь встроена поддержка категориальных признаков: они могут учитывать разбиения по неупорядоченным категориальным данным. Подробнее см. в руководстве пользователя.

../../_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.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(
SelfTrainingClassifier(estimator=LogisticRegression())
В среде Jupyter повторно выполните эту ячейку, чтобы отобразить HTML-представление, или доверьте этой записной книжке.
На GitHub HTML-представление нельзя отобразить; попробуйте открыть эту страницу с помощью nbviewer.org.
Параметры
estimator estimator: объект оценивателя

Объект оценивателя, реализующий `fit` и `predict_proba`.
При вызове метода `fit` будет обучен клон переданного оценивателя,
который будет сохранён в атрибуте `estimator_`.

.. versionadded:: 1.6
`estimator` добавлен вместо `base_estimator`.
LogisticRegression()
threshold threshold: вещественное число, по умолчанию 0.75

Порог принятия решения для использования с `criterion='threshold'`.
Должен находиться в диапазоне [0, 1). При использовании критерия
'threshold' следует применять :ref:`хорошо откалиброванный классификатор <calibration>`.
0.75
criterion criterion: {'threshold', 'k_best'}, по умолчанию 'threshold'

Критерий отбора меток для добавления в обучающий набор. Если задано
'threshold', в набор данных добавляются псевдометки с вероятностями
предсказания выше `threshold`. Если задано 'k_best', в набор данных
добавляются `k_best` псевдометок с наибольшими вероятностями предсказания.
При использовании критерия 'threshold' следует применять :ref:`хорошо откалиброванный классификатор <calibration>`.
'threshold'
k_best k_best: целое число, по умолчанию 10

Количество образцов, добавляемых на каждой итерации. Используется только
при `criterion='k_best'`.
10
max_iter max_iter: целое число или None, по умолчанию 10

Максимально допустимое число итераций. Должно быть больше или равно
0. Если задано `None`, классификатор будет предсказывать метки, пока
не перестанут добавляться новые псевдометки или пока не будут размечены
все неразмеченные образцы.
10
verbose verbose: логическое значение, по умолчанию False

Включить подробный вывод.
False
Обученные атрибуты
Имя Тип Значение
classes_ classes_: ndarray или список ndarray формы (n_classes,)

Метки классов для каждого выхода. (Получены из обученного
`estimator_`).
ndarray[int64](3,) [0,1,2]
estimator_ estimator_: объект оценивателя

Обученный оцениватель.
LogisticRegression LogisticRegression()
labeled_iter_ labeled_iter_: ndarray формы (n_samples,)

Итерация, на которой был размечен каждый образец. Если итерация образца
равна 0, значит, он уже был размечен в исходном наборе данных.
Если итерация образца равна -1, значит, он не был размечен ни на одной
итерации.
ndarray[int64](150,) [0,0,0,...,0,1,1]
n_features_in_ n_features_in_: целое число

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

.. versionadded:: 0.24
int 4
n_iter_ n_iter_: целое число

Число раундов самообучения, то есть число раз, когда базовый оцениватель
обучается на вариантах обучающего набора с изменёнными метками.
int 2
termination_condition_ termination_condition_: {'max_iter', 'no_change', 'all_labeled'}

Причина остановки обучения.

- `'max_iter'`: достигнуто значение `max_iter` для `n_iter_`.
- `'no_change'`: новые метки не предсказаны.
- `'all_labeled'`: все неразмеченные образцы размечены до достижения
значения `max_iter`.
str 'no...ge'
transduction_ transduction_: ndarray формы (n_samples,)

Метки, использованные при заключительном обучении классификатора, включая
псевдометки, добавленные во время обучения.
ndarray[int64](150,) [0,0,0,...,2,2,2]
LogisticRegression()
Параметры
penalty penalty: {'l1', 'l2', 'elasticnet', None}, по умолчанию 'l2'

Задаёт норму регуляризации:

- `None`: регуляризация не применяется;
- `'l2'`: применяется регуляризация L2; это вариант по умолчанию;
- `'l1'`: применяется регуляризация L1;
- `'elasticnet'`: применяются регуляризации L1 и L2.

.. warning::
Некоторые виды регуляризации могут быть несовместимы с некоторыми решателями.
Сведения о совместимости регуляризации и решателя см. в описании параметра
`solver` ниже.

.. versionadded:: 0.19
Регуляризация L1 с решателем SAGA (поддерживает 'multinomial' + L1)

.. deprecated:: 1.8
Параметр `penalty` объявлен устаревшим в версии 1.8 и будет удалён в 1.10.
Вместо него используйте `l1_ratio` и `C`: `l1_ratio=0` для `penalty='l2'`,
`l1_ratio=1` для `penalty='l1'`, любое вещественное значение от 0 до 1 для `l1_ratio`
при `penalty='elasticnet'`, а `C=np.inf` для `penalty=None`.
'deprecated'
C C: вещественное число, по умолчанию 1.0

Обратная величина силы регуляризации; должна быть положительным вещественным числом.
Как и в методе опорных векторов, меньшие значения означают более сильную
регуляризацию. При `C=np.inf` логистическая регрессия не регуляризуется.
Визуальный пример влияния настройки параметра `C`
при регуляризации L1 см. здесь:
:ref:`sphx_glr_auto_examples_linear_model_plot_logistic_path.py`.
1.0
l1_ratio l1_ratio: вещественное число, по умолчанию 0.0

Параметр смешивания Elastic-Net, где `0 <= l1_ratio <= 1`. Значение
`l1_ratio=1` задаёт чистую регуляризацию L1, а `l1_ratio=0` — чистую регуляризацию L2.
Любое значение между 0 и 1 задаёт регуляризацию Elastic-Net вида
`l1_ratio * L1 + (1 - l1_ratio) * L2`.

.. warning::
Некоторые значения `l1_ratio`, то есть некоторые виды регуляризации, могут быть несовместимы
с отдельными решателями. Сведения о совместимости регуляризации и решателя см. в описании
параметра `solver` ниже.

.. versionchanged:: 1.8
Значение по умолчанию изменено с None на 0.0.

.. deprecated:: 1.8
Значение `None` объявлено устаревшим и будет удалено в версии 1.10. Для указания
типа регуляризации всегда используйте `l1_ratio`.
0.0
dual dual: логическое значение, по умолчанию False

Двойственная (с ограничениями) или прямая (с регуляризацией; см. также
:ref:`это уравнение <regularized-logistic-loss>`) формулировка. Двойственная формулировка
реализована только для регуляризации L2 с решателем liblinear. При n_samples > n_features
предпочтительно использовать `dual=False`.
False
tol tol: вещественное число, по умолчанию 1e-4

Допуск для критерия остановки.
0.0001
fit_intercept fit_intercept: логическое значение, по умолчанию True

Указывает, следует ли добавлять к функции принятия решения константу
(также называемую смещением или свободным членом).
True
intercept_scaling intercept_scaling: вещественное число, по умолчанию 1

Имеет значение только при использовании решателя `liblinear`
и значении `True` для `self.fit_intercept`. В этом случае `x` становится
`[x, self.intercept_scaling]`,
то есть к вектору экземпляра добавляется «синтетический» признак с постоянным значением,
равным `intercept_scaling`.
Свободный член становится равен
``intercept_scaling * synthetic_feature_weight``.

.. note::
Вес синтетического признака, как и веса всех остальных признаков,
подвергается регуляризации L1 или L2.
Чтобы уменьшить влияние регуляризации на вес синтетического признака
(и, следовательно, на свободный член), необходимо увеличить `intercept_scaling`.
1
class_weight class_weight: словарь или 'balanced', по умолчанию None

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

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

Обратите внимание: если задан sample_weight, эти веса будут перемножены с ним
(он передаётся через метод fit).

.. versionadded:: 0.17
*class_weight='balanced'*
None
random_state random_state: целое число, экземпляр RandomState, по умолчанию None

Используется для перемешивания данных, если ``solver`` == 'sag', 'saga' или 'liblinear'.
Подробности см. в :term:`глоссарии <random_state>`.
None
solver solver: {'lbfgs', 'liblinear', 'newton-cg', 'newton-cholesky', 'sag', 'saga'}, по умолчанию 'lbfgs'

Алгоритм для задачи оптимизации. По умолчанию используется 'lbfgs'.
При выборе решателя можно учитывать следующие особенности:

- 'lbfgs' — хороший вариант по умолчанию, так как он достаточно эффективен для широкого
круга задач.
- Для задач :term:`многоклассовой классификации` (`n_classes >= 3`) все решатели, кроме
'liblinear', минимизируют полную мультиномиальную функцию потерь; решатель 'liblinear'
выдаст ошибку.
- 'newton-cholesky' подходит, когда `n_samples` >> `n_features * n_classes`, особенно для
категориальных признаков, закодированных методом one-hot, с редкими категориями. Учтите,
что использование памяти этим решателем квадратично зависит от `n_features * n_classes`,
поскольку он явно вычисляет полную матрицу Гессе.
- Для небольших наборов данных подходит 'liblinear', а 'sag'
и 'saga' быстрее работают на больших наборах;
- По умолчанию 'liblinear' поддерживает только бинарную классификацию. Для применения схемы
«один против остальных» в многоклассовой задаче его можно обернуть в
:class:`~sklearn.multiclass.OneVsRestClassifier`.

.. warning::
Выбор алгоритма зависит от выбранной регуляризации (`l1_ratio=0`
для L2, `l1_ratio=1` для L1, `0 < l1_ratio < 1` для
Elastic-Net), а также от поддержки многоклассовой (мультиномиальной) классификации:

================= ======================== ======================
solver l1_ratio мультиномиальная многоклассовая
================= ======================== ======================
'lbfgs' l1_ratio=0 да
'liblinear' l1_ratio=1 или l1_ratio=0 нет
'newton-cg' l1_ratio=0 да
'newton-cholesky' l1_ratio=0 да
'sag' l1_ratio=0 да
'saga' 0<=l1_ratio<=1 да
================= ======================== ======================

.. note::
Быстрая сходимость 'sag' и 'saga' гарантируется только для признаков
примерно одинакового масштаба. Для предварительной обработки данных можно
использовать масштабировщик из :mod:`sklearn.preprocessing`.

.. seealso::
Дополнительные сведения о :class:`LogisticRegression` см. в
:ref:`руководстве пользователя <Logistic_regression>`, а сводку поддержки
решателей и регуляризации — в :ref:`таблице <logistic_regression_solvers>`.

.. versionadded:: 0.17
Решатель стохастического градиентного спуска со средним градиентом (SAG). Поддержка мультиномиального режима добавлена
в версии 0.18.
.. versionadded:: 0.19
Решатель SAGA.
.. versionchanged:: 0.22
В версии 0.22 решатель по умолчанию изменён с 'liblinear' на 'lbfgs'.
.. versionadded:: 1.2
Решатель newton-cholesky. Поддержка мультиномиального режима добавлена в версии 1.6.
'lbfgs'
max_iter max_iter: целое число, по умолчанию 100

Максимальное число итераций, выполняемых решателями для достижения сходимости.
100
verbose verbose: целое число, по умолчанию 0

Для решателей liblinear и lbfgs задайте любое положительное значение,
чтобы включить подробный вывод.
0
warm_start warm_start: логическое значение, по умолчанию False

Если задано True, решение предыдущего вызова fit повторно используется
в качестве начального приближения; в противном случае предыдущее решение удаляется.
Не используется решателем liblinear. См. :term:`глоссарий <warm_start>`.

.. versionadded:: 0.17
Поддержка *warm_start* для решателей *lbfgs*, *newton-cg*, *sag*, *saga*.
False
n_jobs n_jobs: целое число, по умолчанию None

Не оказывает никакого влияния.

.. deprecated:: 1.8
Параметр `n_jobs` объявлен устаревшим в версии 1.8 и будет удалён в 1.10.
None


Новый преобразователь 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)
Partial dependence of house value on non-location features for the California housing dataset, with BayesianRidge

Новый критерий разбиения Пуассона для 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)
DecisionTreeRegressor(criterion='poisson', random_state=0)
В среде Jupyter повторно выполните эту ячейку, чтобы отобразить HTML-представление, или доверьте этому ноутбуку.
На GitHub HTML-представление не отображается; попробуйте загрузить эту страницу через nbviewer.org.
Параметры
criterion criterion: {"squared_error", "absolute_error", "poisson"}, default="squared_error"

Функция для измерения качества разбиения. Поддерживаются критерии
"squared_error" для среднеквадратичной ошибки, которая равна
уменьшению дисперсии и используется как критерий отбора признаков, а также минимизирует L2-
потери, используя среднее значение каждого конечного узла; "absolute_error" для средней
абсолютной ошибки, которая минимизирует L1-потери, используя медиану каждого конечного
узла; и "poisson", который использует уменьшение девианса Пуассона для поиска разбиений,
также используя среднее значение каждого конечного узла.

.. versionadded:: 0.18
Критерий средней абсолютной ошибки (MAE).

.. versionadded:: 0.24
Критерий девианса Пуассона.

.. versionchanged:: 1.9
Критерий `"friedman_mse"` объявлен устаревшим.
'poisson'
random_state random_state: int, экземпляр RandomState или None, по умолчанию None

Управляет случайностью оценщика. Признаки всегда
случайным образом переставляются при каждом разбиении, даже если для ``splitter`` задано
``"best"``. Если ``max_features < n_features``, алгоритм
случайным образом выбирает ``max_features`` при каждом разбиении, а затем находит лучшее
разбиение среди них. Однако лучшее найденное разбиение может различаться при разных
запусках, даже если ``max_features=n_features``. Такое возможно, если
улучшение критерия одинаково для нескольких разбиений и одно из них
выбирается случайным образом. Чтобы обучение было детерминированным,
для ``random_state`` необходимо задать целое число.
Подробности см. в :term:`Глоссарии <random_state>`.
0
splitter splitter: {"best", "random"}, по умолчанию "best"

Стратегия выбора разбиения в каждом узле. Поддерживаются
стратегии "best" для выбора наилучшего разбиения и "random" для выбора
наилучшего случайного разбиения.
'best'
max_depth max_depth: int, по умолчанию None

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

Пример того, как ``max_depth`` влияет на модель, см. в
:ref:`sphx_glr_auto_examples_tree_plot_tree_regression.py`.
None
min_samples_split min_samples_split: int или float, по умолчанию 2

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

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

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

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

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

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

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

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

- Если задано целое число, при каждом разбиении рассматривается `max_features` признаков.
- Если задано число с плавающей точкой, `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`.

Примечание: поиск разбиения не прекращается, пока не будет найдено хотя бы одно
допустимое разбиение образцов узла, даже если для этого потребуется
фактически проверить больше признаков, чем указано в ``max_features``.
None
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
ccp_alpha ccp_alpha: неотрицательное число с плавающей точкой, по умолчанию 0.0

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

.. versionadded:: 0.22
0.0
monotonic_cst monotonic_cst: массивоподобный объект из целых чисел формы (n_features), по умолчанию None

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

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

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

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

.. versionadded:: 1.4
None
Обученные атрибуты
Имя Тип Значение
feature_importances_ feature_importances_: ndarray формы (n_features,)

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

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

Выведенное значение max_features.
int 20
n_features_in_ n_features_in_: int

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

.. versionadded:: 0.24
int 20
n_outputs_ n_outputs_: int

Число выходов при выполнении ``fit``.
int 1
tree_ tree_: экземпляр Tree

Базовый объект Tree. Описание атрибутов объекта Tree см. в
``help(sklearn.tree._tree.Tree)``, а примеры использования этих атрибутов — в
:ref:`sphx_glr_auto_examples_tree_plot_unveil_tree_structure.py`.
Tree <sklearn.tree...x78414d14c500>


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

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

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

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

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.2

© 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

Spec-Zone.ru

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