Spec-Zone.ru › scikit-learn

1.12. Алгоритмы для задач с несколькими классами и несколькими выходами

В этом разделе руководства пользователя рассматриваются возможности, связанные с задачами обучения с несколькими целями, включая классификацию и регрессию с несколькими классами, с несколькими метками и с несколькими выходами.

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

В этом разделе рассматриваются два модуля: sklearn.multiclass и sklearn.multioutput. На схеме ниже показаны типы задач, за которые отвечает каждый модуль, и соответствующие метаоцениватели, предоставляемые этими модулями.

../_images/multi_org_chart.png

В таблице ниже приведена краткая справка о различиях между типами задач. Более подробные объяснения приведены в последующих разделах этого руководства.

Количество целевых переменных

Кардинальность целевой переменной

Допустимое значение для type_of_target

Классификация с несколькими классами

1

>2

‘multiclass’

Классификация с несколькими метками

>1

2 (0 или 1)

‘multilabel-indicator’

Классификация с несколькими классами и выходами

>1

>2

‘multiclass-multioutput’

Регрессия с несколькими выходами

>1

Непрерывная

‘continuous-multioutput’

Ниже приведен список оценивателей scikit-learn со встроенной поддержкой обучения с несколькими целями, сгруппированных по стратегиям. Если вы используете один из этих оценивателей, метаоцениватели, представленные в этом разделе, не нужны. Однако метаоцениватели могут предоставлять дополнительные стратегии, помимо встроенных:

  • Изначально поддерживают несколько классов:

    • naive_bayes.BernoulliNB
    • tree.DecisionTreeClassifier
    • tree.ExtraTreeClassifier
    • ensemble.ExtraTreesClassifier
    • naive_bayes.GaussianNB
    • neighbors.KNeighborsClassifier
    • semi_supervised.LabelPropagation
    • semi_supervised.LabelSpreading
    • discriminant_analysis.LinearDiscriminantAnalysis
    • svm.LinearSVC (при значении multi_class=”crammer_singer”)
    • linear_model.LogisticRegression (для всех решателей, кроме “liblinear”)
    • linear_model.LogisticRegressionCV (для всех решателей, кроме “liblinear”)
    • neural_network.MLPClassifier
    • neighbors.NearestCentroid
    • discriminant_analysis.QuadraticDiscriminantAnalysis
    • neighbors.RadiusNeighborsClassifier
    • ensemble.RandomForestClassifier
    • linear_model.RidgeClassifier
    • linear_model.RidgeClassifierCV
  • Многоклассовая классификация по схеме «один против одного»:

    • svm.NuSVC
    • svm.SVC.
    • gaussian_process.GaussianProcessClassifier (при значении multi_class = “one_vs_one”)
  • Многоклассовая классификация по схеме «один против остальных»:

    • ensemble.GradientBoostingClassifier
    • gaussian_process.GaussianProcessClassifier (при значении multi_class = “one_vs_rest”)
    • svm.LinearSVC (при значении multi_class=”ovr”)
    • linear_model.SGDClassifier
    • linear_model.Perceptron
  • Поддерживают классификацию с несколькими метками:

    • tree.DecisionTreeClassifier
    • tree.ExtraTreeClassifier
    • ensemble.ExtraTreesClassifier
    • neighbors.KNeighborsClassifier
    • neural_network.MLPClassifier
    • neighbors.RadiusNeighborsClassifier
    • ensemble.RandomForestClassifier
    • linear_model.RidgeClassifier
    • linear_model.RidgeClassifierCV
  • Поддерживают классификацию с несколькими классами и выходами:

    • tree.DecisionTreeClassifier
    • tree.ExtraTreeClassifier
    • ensemble.ExtraTreesClassifier
    • neighbors.KNeighborsClassifier
    • neighbors.RadiusNeighborsClassifier
    • ensemble.RandomForestClassifier

1.12.1. Классификация с несколькими классами

Предупреждение

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

Классификация с несколькими классами — это задача классификации, в которой классов больше двух. Каждый объект может принадлежать только одному классу.

Например, можно классифицировать изображения фруктов по признакам, извлеченным из набора изображений, где на каждом изображении может быть апельсин, яблоко или груша. Каждое изображение — это один объект, которому присваивается один из трех возможных классов. Многоклассовая классификация предполагает, что каждому объекту назначается ровно одна метка: например, один объект не может одновременно быть грушей и яблоком.

Хотя все классификаторы scikit-learn способны выполнять многоклассовую классификацию, метаоцениватели из sklearn.multiclass позволяют изменять способ обработки более чем двух классов, поскольку это может повлиять на производительность классификатора (как с точки зрения ошибки обобщения, так и с точки зрения необходимых вычислительных ресурсов).

1.12.1.1. Формат целевых значений

Допустимые представления многоклассовой цели для type_of_target (y):

  • Одномерный вектор или вектор-столбец, содержащий более двух дискретных значений. Пример вектора y для 4 объектов:

    >>> import numpy as np
    >>> y = np.array(['apple', 'pear', 'apple', 'orange'])
    >>> print(y)
    ['apple' 'pear' 'apple' 'orange']
    
  • Плотная или разреженная бинарная матрица формы (n_samples, n_classes), где каждой строке соответствует один объект, а каждый столбец представляет один класс. Пример плотной и разреженной бинарной матрицы y для 4 объектов, где столбцы по порядку соответствуют яблоку, апельсину и груше:

    >>> import numpy as np
    >>> from sklearn.preprocessing import LabelBinarizer
    >>> y = np.array(['apple', 'pear', 'apple', 'orange'])
    >>> y_dense = LabelBinarizer().fit_transform(y)
    >>> print(y_dense)
    [[1 0 0]
     [0 0 1]
     [1 0 0]
     [0 1 0]]
    >>> from scipy import sparse
    >>> y_sparse = sparse.csr_array(y_dense)
    >>> print(y_sparse)
    <Compressed Sparse Row sparse array of dtype 'int64'
      with 4 stored elements and shape (4, 3)>
      Coords Values
      (0, 0) 1
      (1, 2) 1
      (2, 0) 1
      (3, 1) 1
    

Дополнительные сведения о LabelBinarizer см. в разделе Преобразование целевой переменной для предсказания (y).

1.12.1.2. OneVsRestClassifier

Стратегия «один против остальных», также известная как «один против всех», реализована в OneVsRestClassifier. Эта стратегия заключается в обучении отдельного классификатора для каждого класса. Для каждого классификатора целевой класс сопоставляется со всеми остальными классами. Помимо вычислительной эффективности (требуется всего n_classes классификаторов), преимущество этого подхода — интерпретируемость. Поскольку каждый класс представлен ровно одним классификатором, изучить свойства класса можно, исследовав соответствующий классификатор. Это наиболее часто используемая стратегия, и ее можно считать хорошим вариантом по умолчанию.

Ниже приведен пример обучения с несколькими классами по схеме OvR:

>>> from sklearn import datasets
>>> from sklearn.multiclass import OneVsRestClassifier
>>> from sklearn.svm import LinearSVC
>>> X, y = datasets.load_iris(return_X_y=True)
>>> OneVsRestClassifier(LinearSVC(random_state=0)).fit(X, y).predict(X)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])

OneVsRestClassifier также поддерживает классификацию с несколькими метками. Чтобы воспользоваться этой возможностью, передайте классификатору матрицу-индикатор, в которой ячейка [i, j] указывает на наличие метки j у объекта i.

../_images/sphx_glr_plot_multilabel_001.png

Примеры

  • Классификация с несколькими метками
  • Построение графика вероятности классификации
  • Границы решений для мультиномиальной логистической регрессии и логистической регрессии по схеме «один против остальных»

1.12.1.3. OneVsOneClassifier

OneVsOneClassifier создает отдельный классификатор для каждой пары классов. При предсказании выбирается класс, получивший наибольшее число голосов. Если возникает ничья (два класса получают одинаковое число голосов), выбирается класс с наибольшей суммарной уверенностью классификации: складываются значения уверенности для каждой пары, вычисленные лежащими в основе бинарными классификаторами.

Поскольку для этого метода требуется обучить n_classes * (n_classes - 1) / 2 классификаторов, он обычно работает медленнее, чем стратегия «один против остальных», из-за сложности O(n_classes^2). Однако этот метод может быть полезен для таких алгоритмов, как ядерные алгоритмы, которые плохо масштабируются с n_samples. Это связано с тем, что каждая отдельная задача обучения использует лишь небольшую часть данных, тогда как при стратегии «один против остальных» весь набор данных используется n_classes раз. Функция принятия решения представляет собой монотонное преобразование классификации «один против одного».

Ниже приведен пример обучения с несколькими классами по схеме OvO:

>>> from sklearn import datasets
>>> from sklearn.multiclass import OneVsOneClassifier
>>> from sklearn.svm import LinearSVC
>>> X, y = datasets.load_iris(return_X_y=True)
>>> OneVsOneClassifier(LinearSVC(random_state=0)).fit(X, y).predict(X)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])

Литература

  • «Распознавание образов и машинное обучение. Springer», Кристофер М. Бишоп, стр. 183 (первое издание)

1.12.1.4. OutputCodeClassifier

Стратегии на основе корректирующего кода выходов существенно отличаются от стратегий «один против остальных» и «один против одного». В этих стратегиях каждый класс представляется в евклидовом пространстве, где каждое измерение может принимать только значение 0 или 1. Иными словами, каждый класс представляется двоичным кодом (массивом из нулей и единиц). Матрица, в которой хранятся расположение и код каждого класса, называется кодовой книгой. Размер кода — это размерность упомянутого пространства. Интуитивно понятно, что каждый класс следует представлять как можно более уникальным кодом, а кодовую книгу следует проектировать так, чтобы оптимизировать точность классификации. В этой реализации используется простая случайно сгенерированная кодовая книга, как предложено в [3], хотя в будущем могут быть добавлены более сложные методы.

Во время обучения для каждого бита кодовой книги обучается отдельный бинарный классификатор. При предсказании классификаторы проецируют новые точки в пространство классов, после чего выбирается класс, ближайший к этим точкам.

В OutputCodeClassifier атрибут code_size позволяет управлять количеством используемых классификаторов. Это доля от общего количества классов.

Значение от 0 до 1 требует меньше классификаторов, чем стратегия «один против остальных». Теоретически log2(n_classes) / n_classes достаточно, чтобы однозначно представить каждый класс. Однако на практике это может не обеспечить хорошую точность, поскольку log2(n_classes) значительно меньше, чем n_classes.

Значение больше 1 требует больше классификаторов, чем стратегия «один против остальных». В этом случае некоторые классификаторы теоретически исправляют ошибки, допущенные другими классификаторами, отсюда и название «корректирующий код». Однако на практике этого может не происходить, поскольку ошибки классификаторов обычно коррелируют. Корректирующие коды выходов оказывают эффект, сходный с бэггингом.

Ниже приведен пример обучения с несколькими классами с использованием кодов выходов:

>>> from sklearn import datasets
>>> from sklearn.multiclass import OutputCodeClassifier
>>> from sklearn.svm import LinearSVC
>>> X, y = datasets.load_iris(return_X_y=True)
>>> clf = OutputCodeClassifier(LinearSVC(random_state=0), code_size=2, random_state=0)
>>> clf.fit(X, y).predict(X)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1,
       1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 1, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])

Литература

  • «Решение задач обучения с несколькими классами с помощью корректирующих кодов выходов», Дитерих Т., Бакири Г., Journal of Artificial Intelligence Research 2, 1995.
[3]

«Метод кодирования ошибок и PICT», Джеймс Г., Хасти Т., Journal of Computational and Graphical Statistics 7, 1998.

  • «Элементы статистического обучения», Хасти Т., Тибширани Р., Фридман Дж., стр. 606 (второе издание), 2008.

1.12.2. Классификация с несколькими метками

Классификация с несколькими метками (тесно связанная с классификацией с несколькими выходами) — это задача классификации, в которой каждому объекту присваивается m меток из n_classes возможных классов, где m может быть от 0 до n_classes включительно. Эту задачу можно рассматривать как предсказание свойств объекта, которые не являются взаимоисключающими. Формально каждому классу для каждого объекта присваивается бинарное выходное значение. Положительные классы обозначаются значением 1, отрицательные — значением 0 или -1. Таким образом, эта задача сопоставима с выполнением n_classes задач бинарной классификации, например с помощью MultiOutputClassifier. В этом подходе каждая метка рассматривается независимо, тогда как классификаторы с несколькими метками могут одновременно учитывать несколько классов, принимая во внимание корреляции между ними.

Например, можно предсказывать темы, относящиеся к текстовому документу или видео. Документ или видео могут относиться к одной из тем — «религия», «политика», «финансы» или «образование», — к нескольким темам или ко всем сразу.

1.12.2.1. Формат целевых значений

Допустимое представление цели с несколькими метками y — это плотная или разреженная бинарная матрица формы (n_samples, n_classes). Каждый столбец представляет класс. Единицы 1 в каждой строке указывают на положительные классы, метки которых присвоены объекту. Пример плотной матрицы y для 3 объектов:

>>> y = np.array([[1, 0, 0, 1], [0, 0, 1, 1], [0, 0, 0, 0]])
>>> print(y)
[[1 0 0 1]
 [0 0 1 1]
 [0 0 0 0]]

Плотные бинарные матрицы также можно создавать с помощью MultiLabelBinarizer. Дополнительные сведения см. в разделе Преобразование целевой переменной для предсказания (y).

Пример той же y в виде разреженной матрицы:

>>> y_sparse = sparse.csr_array(y)
>>> print(y_sparse)
<Compressed Sparse Row sparse array of dtype 'int64'
  with 4 stored elements and shape (3, 4)>
  Coords Values
  (0, 0) 1
  (0, 3) 1
  (1, 2) 1
  (1, 3) 1

1.12.2.2. MultiOutputClassifier

Поддержку классификации с несколькими метками можно добавить к любому классификатору с помощью MultiOutputClassifier. Эта стратегия заключается в обучении отдельного классификатора для каждой целевой переменной. Это позволяет выполнять классификацию по нескольким целевым переменным. Этот класс предназначен для расширения оценивателей, чтобы они могли оценивать набор целевых функций (f1,f2,f3…,fn), обученных на одной матрице предикторов X, и предсказывать набор откликов (y1,y2,y3…,yn).

Пример использования MultiOutputClassifier приведен в разделе Классификация с несколькими классами и выходами, поскольку этот метод обобщает классификацию с несколькими метками на выходы с несколькими классами вместо бинарных выходов.

1.12.2.3. ClassifierChain

Цепочки классификаторов (см. ClassifierChain) позволяют объединить несколько бинарных классификаторов в одну модель с несколькими метками, способную использовать корреляции между целевыми переменными.

Для задачи классификации с несколькими метками и N классами каждому из N бинарных классификаторов присваивается целое число от 0 до N-1. Эти числа определяют порядок моделей в цепочке. Затем каждый классификатор обучается на доступных обучающих данных и истинных метках классов, моделям которых присвоен меньший номер.

При предсказании истинные метки недоступны. Вместо них предсказания каждой модели передаются следующим моделям в цепочке и используются как признаки.

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

Литература

  • Джесси Рид, Бернхард Пфарингер, Джефф Холмс, Эйбе Франк, «Цепочки классификаторов для классификации с несколькими метками», 2009.

1.12.3. Классификация с несколькими классами и выходами

Классификация с несколькими классами и выходами (также называемая многозадачной классификацией) — это задача классификации, в которой каждому объекту присваивается набор небинарных свойств. Количество свойств и количество классов для каждого свойства больше 2. Таким образом, один оцениватель решает несколько совместных задач классификации. Этот тип классификации обобщает как классификацию с несколькими метками, в которой рассматриваются только бинарные атрибуты, так и классификацию с несколькими классами, в которой рассматривается только одно свойство.

Например, можно классифицировать свойства «тип фрукта» и «цвет» для набора изображений фруктов. Свойство «тип фрукта» может принимать значения «яблоко», «груша» и «апельсин». Свойство «цвет» может принимать значения «зеленый», «красный», «желтый» и «оранжевый». Каждый объект — это изображение фрукта; для обоих свойств выводится метка, и каждая метка соответствует одному из возможных классов данного свойства.

Обратите внимание, что все классификаторы, решающие задачи классификации с несколькими классами и выходами (также называемые задачами многозадачной классификации), поддерживают классификацию с несколькими метками как частный случай. Многозадачная классификация похожа на классификацию с несколькими выходами, но использует другие формулировки моделей. Дополнительные сведения см. в документации соответствующего оценивателя.

Ниже приведен пример классификации с несколькими классами и выходами:

>>> from sklearn.datasets import make_classification
>>> from sklearn.multioutput import MultiOutputClassifier
>>> from sklearn.ensemble import RandomForestClassifier
>>> from sklearn.utils import shuffle
>>> import numpy as np
>>> X, y1 = make_classification(n_samples=10, n_features=100,
...                             n_informative=30, n_classes=3,
...                             random_state=1)
>>> y2 = shuffle(y1, random_state=1)
>>> y3 = shuffle(y1, random_state=2)
>>> Y = np.vstack((y1, y2, y3)).T
>>> n_samples, n_features = X.shape # 10,100
>>> n_outputs = Y.shape[1] # 3
>>> n_classes = 3
>>> forest = RandomForestClassifier(random_state=1)
>>> multi_target_forest = MultiOutputClassifier(forest, n_jobs=2)
>>> multi_target_forest.fit(X, Y).predict(X)
array([[2, 2, 0],
       [1, 2, 1],
       [2, 1, 0],
       [0, 0, 2],
       [0, 2, 1],
       [0, 0, 2],
       [1, 1, 0],
       [1, 1, 1],
       [0, 0, 2],
       [2, 0, 0]])

Предупреждение

В настоящее время ни одна метрика в sklearn.metrics не поддерживает задачу классификации с несколькими классами и выходами.

1.12.3.1. Формат целевых значений

Допустимое представление цели с несколькими выходами y — это плотная матрица формы (n_samples, n_classes), содержащая метки классов. Она представляет собой объединение по столбцам одномерных переменных с несколькими классами. Пример y для 3 объектов:

>>> y = np.array([['apple', 'green'], ['orange', 'orange'], ['pear', 'green']])
>>> print(y)
[['apple' 'green']
 ['orange' 'orange']
 ['pear' 'green']]

1.12.4. Многовыходная регрессия

Многовыходная регрессия предсказывает несколько числовых свойств для каждого образца. Каждое свойство является числовой переменной, а число свойств, которые необходимо предсказать для каждого образца, больше или равно 2. Некоторые оцениватели, поддерживающие многовыходную регрессию, работают быстрее, чем простое выполнение n_output оценивателей.

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

Следующие регрессоры изначально поддерживают многовыходную регрессию:

  • cross_decomposition.CCA
  • tree.DecisionTreeRegressor
  • dummy.DummyRegressor
  • linear_model.ElasticNet
  • tree.ExtraTreeRegressor
  • ensemble.ExtraTreesRegressor
  • gaussian_process.GaussianProcessRegressor
  • neighbors.KNeighborsRegressor
  • kernel_ridge.KernelRidge
  • linear_model.Lars
  • linear_model.Lasso
  • linear_model.LassoLars
  • linear_model.LinearRegression
  • multioutput.MultiOutputRegressor
  • linear_model.MultiTaskElasticNet
  • linear_model.MultiTaskElasticNetCV
  • linear_model.MultiTaskLasso
  • linear_model.MultiTaskLassoCV
  • linear_model.OrthogonalMatchingPursuit
  • cross_decomposition.PLSCanonical
  • cross_decomposition.PLSRegression
  • linear_model.RANSACRegressor
  • neighbors.RadiusNeighborsRegressor
  • ensemble.RandomForestRegressor
  • multioutput.RegressorChain
  • linear_model.Ridge
  • linear_model.RidgeCV
  • compose.TransformedTargetRegressor

1.12.4.1. Формат целевых данных

Допустимым представлением многовыходных y является плотная матрица формы (n_samples, n_output) с числами с плавающей точкой. Конкатенация столбцов непрерывных переменных. Пример y для 3 образцов:

>>> y = np.array([[31.4, 94], [40.5, 109], [25.0, 30]])
>>> print(y)
[[ 31.4  94. ]
 [ 40.5 109. ]
 [ 25.   30. ]]

1.12.4.2. MultiOutputRegressor

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

Ниже приведён пример многовыходной регрессии:

>>> from sklearn.datasets import make_regression
>>> from sklearn.multioutput import MultiOutputRegressor
>>> from sklearn.ensemble import GradientBoostingRegressor
>>> X, y = make_regression(n_samples=10, n_targets=3, random_state=1)
>>> MultiOutputRegressor(GradientBoostingRegressor(random_state=0)).fit(X, y).predict(X)
array([[-154.75474165, -147.03498585,  -50.03812219],
       [   7.12165031,    5.12914884,  -81.46081961],
       [-187.8948621 , -100.44373091,   13.88978285],
       [-141.62745778,   95.02891072, -191.48204257],
       [  97.03260883,  165.34867495,  139.52003279],
       [ 123.92529176,   21.25719016,   -7.84253   ],
       [-122.25193977,  -85.16443186, -107.12274212],
       [ -30.170388  ,  -94.80956739,   12.16979946],
       [ 140.72667194,  176.50941682,  -17.50447799],
       [ 149.37967282,  -81.15699552,   -5.72850319]])

1.12.4.3. Цепочка регрессоров

Цепочки регрессоров (см. RegressorChain) аналогичны ClassifierChain и позволяют объединить несколько регрессий в одну многовыходную модель, способную использовать корреляции между целевыми переменными.

© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/modules/multiclass.html

Spec-Zone.ru

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