Основное руководство по корректирующему коду вывода (ECOC)

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

Один против одного и Один против остальных — это два таких метода, которые могут решать задачи классификации с несколькими классами или несколькими метками. Классификатор One-s-Rest обучает классификаторы ‘c’ для данных с меткой целевого класса мощности ‘c’, каждая оценка подходит для одного класса и для всех других классов. Принимая во внимание, что классификатор один против одного обучает один классификатор на пару классов. Выходной код с исправлением ошибок (ECOC) существенно отличается от классификаторов OvO и OvR. В этой статье мы обсудим, как ECOC работает под капотом и как его можно использовать для обучения модели задачам классификации с несколькими классами.

Что такое ЭКОК?

Выходной код с исправлением ошибок (ECOC) - это метод ансамблевой классификации, разработанный для задач классификации с несколькими классами. Набор данных IRIS и Набор данных распознавания цифр MNIST являются примерами наборов данных мультиклассовой классификации. Методы ECOC, OvO и OvR объединяют несколько бинарных оценок для разработки многоклассовой модели классификации.

ECOC предварительно обрабатывает метку многоклассового целевого класса в двоичный код (массив нулей и единиц). Используя эту стратегию, метка целевого класса представляется в евклидовом пространстве двоичного кода с использованием кодовой книги, которая отслеживает кодировку.

Вышеупомянутое изображение показывает 15-битное кодирование целевой метки 10-класса. Каждой из целевых меток присвоена уникальная 15-битная кодировка. Матрица кодовой книги отслеживает битовое кодирование каждого целевого класса.

Разработчик может контролировать размер битового кодирования. Если размерность битового кодирования больше, чем мощность метки целевого класса, то предсказание некоторых классификаторов может быть скорректировано другими классификаторами. В этом случае число обучаемых оценщиков больше, чем в методе One-vs-Rest.

Если мы сохраняем размерность битового кодирования меньше, чем мощность метки целевого класса, то он обучает сравнительно меньше оценок, чем классификатор «один против остальных». Теоретически log2(n_classes) достаточно для однозначного представления метки целевого класса. Для целевой метки класса 10 следует выбрать log2(10)=4.

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

Выполнение:

Пакет Scikit-learn поставляется с функцией OutputCodeClassifier(), которая предлагает реализацию классификатора ECOC в одной строке кода Python. Параметр code_size можно использовать для определения битовой кодировки целевого класса. Значение от 0 до 1 может использоваться для сжатия модели, а значение code_size > 1 может сделать модель более устойчивой к ошибкам.

Значение code_size необходимо настроить:

  • 0 ‹ code_size ‹1: обучите сжатую модель, в которой количество подходящих оценок меньше, чем в случае классификатора One-vs-Rest.
  • code_size›1: Обучите модель с исправлением ошибок, устойчивую к ошибкам. Количество установленных оценщиков больше, чем в случае классификаторов One-vs-Rest.

Гиперпараметр code_size можно настроить для изменения размерности встраивания целевого класса. Я обучил набор данных классификации из 20 классов, используя OutputCodeClassifier с моделью логистической регрессии в качестве базовой оценки.

На приведенном выше графике распределения мы можем наблюдать увеличение показателей производительности, но позже оно выравнивается. Значение размера кода = 10 можно считать пороговым. Мы получаем точность 25,9%, точность 27,3% и полноту 26,5% для размера кода = 10. Дальнейшее увеличение размера встраивания не влияет на производительность модели.

Заключение:

OutputCodeClassifier — это удобная функция для соответствия набору данных классификации нескольких классов, который реализует алгоритм ECOC. Разработчик может контролировать количество базовых классификаторов, что служит дополнительным преимуществом по сравнению с методами «один против одного» или «один против остальных», где количество базовых оценок зависит от кардинальности целевого класса.

Производительность модели зависит от количества базовых оценок. Теоретически log2(n_classes) достаточно для однозначного представления целевого класса, но это может не привести к надежной модели. Необходимо увеличить размер кода, чтобы соответствовать модели, устойчивой к ошибкам.

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



Использованная литература:

[1] Документация Scikit-learn: https://scikit-learn.org/stable/modules/generated/sklearn.multiclass.OutputCodeClassifier.html

[2] Документация Newbedev: https://newbedev.com/scikit_learn/modules/multiclass

Понравилась статья? Станьте участником Medium, чтобы продолжать обучение без ограничений. Я получу небольшую часть вашего членского взноса, если вы перейдете по следующей ссылке, без каких-либо дополнительных затрат с вашей стороны.



Спасибо за чтение