Существует ли альтернатива использованию N классификаторов «да-нет» для классификации данных по N классам?

#language-agnostic #machine-learning

#не зависит от языка #машинное обучение

Вопрос:

TL; DR: существует ли какой-либо классификатор более сложный, чем классификатор «да-нет»?

Сразу скажу, что у меня нет конкретного проекта, над которым я работаю, и это скорее технический вопрос, который меня интересует.

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

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

Другой проект классифицировал данные в непрерывном масштабе, в основном от 0 до 1,2, но с некоторыми данными до 6. Мы создали 6 или около того классификаторов и назначили их ячейкам: 0-0.2, 0.2-0.4, … и 1.0 и выше. После того, как все классификаторы вернулись для некоторой части данных, мы затем сопоставили квадратичное значение с оценками и взяли пик в качестве результата. Мне неудобно, но я не знаю почему.

Похоже, должен быть лучший способ, чем просто опрашивать набор классификаторов «да-нет» и пытаться принять решение на основе некоторого алгоритма. Чтобы привести глупый пример, рассмотрим систему, которая решает, изображен ли на картинке лук или гриб. (Это буквально первое, о чем я подумал.) Я бы сказал, что чем больше объект похож на лук, тем меньше он похож на гриб, и с онтологической точки зрения мне нужен метод классификации, который отражает это. Если у меня есть два классификатора «да-нет», которые не учитывают, что луковица противостоит грибности, что мне делать с изображением, которое получает высокие оценки от обоих? Есть ли какой-нибудь способ получить единый классификатор грибов или лука, который каким-то образом знает, что между этими двумя классами растительности нет совпадения? Или я могу рассчитывать на обучение классификаторов «да-нет» реальным данным, чтобы отразить это без какого-либо специального вмешательства?

Комментарии:

1. Выдающиеся ответы повсюду. Спасибо!

Ответ №1:

Существует две широкие школы классификации:

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

Модификации SVM для многоклассовости (много способов сделать это, вот один):

Пусть j-й (из k) обучающий пример xj относится к классу i (из N). Тогда его метка yj = i .

а) Вектор признаков: если xj = обучающий пример, принадлежащий классу i (из N), то вектор признаков, соответствующий xj, равен phi(xj,yj) = [0 0 … X .. 0]

  • Примечание: X находится в i-й «позиции». phi имеет в общей сложности D * N компонентов, где каждый пример имеет D объектов, например, изображение лука имеет D = 640 * 480 целых чисел в оттенках серого

  • Примечание: для других классов p, т.е. y = p, phi(xj, y) имеет «X» в векторе признаков в позиции p, все остальные равны нулю.

б) Ограничения: минимизировать W ^ 2 (как в ванильном SVM) таким образом, чтобы:

1) Для всех меток y, кроме y1: W.phi(x1, y1) > = W.phi (x1, y) 1

и 2) Для всех меток y, кроме y2: W.phi(x2, y2) > = W.phi (x2, y) 1

и k) Для всех меток y, кроме yk: W.phi (xk, yk) >= W.phi (xk, y) 1

  • Примечание: интуиция здесь заключается в том, что W.phi(xj, yj) больше, чем все остальные W.phi(xj, y1), W.phi (xj, y2) и т.д.

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

Ни один из них не использует N классификаторов «да-нет».

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

Чтобы ответить на ваш другой вопрос:

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

Это скорее проблема с входными данными, а не с самим алгоритмом обучения, который просто работает с матрицей чисел. Это может отражать шум / неопределенность в домене (иначе люди могут отличить грибы от лука ??). Это может быть исправлено с помощью большего / лучшего (обучающего) набора данных. Или, может быть, вы выбрали плохое распределение для моделирования, в порождающем случае.

Большинство людей предварительно обрабатывают необработанные изображения перед классификацией на этапе, называемом выбором объектов. Одним из методов выбора признаков может быть захват силуэта овоща, поскольку грибы и лук имеют разную форму, остальная часть изображения может быть «шумовой». В других областях, таких как обработка естественного языка, вы можете отбросить предлоги и сохранить количество разных существительных. Но иногда производительность может не улучшиться, потому что алгоритм обучения может не учитывать все функции в любом случае. Это действительно зависит от того, что вы пытаетесь уловить — задействован творческий подход. Также существуют алгоритмы выбора объектов.

Хорошим ресурсом для машинного обучения являются курсы Тони Джебары в Колумбийском университете

Комментарии:

1. Приятно! Если я правильно понимаю # 1, это в основном применение SVM к декартову пространству произведений {классы данных} X {координаты данных}. Это одно из тех элегантных решений, которое очевидно, как только вы уже знаете об этом: D. Спасибо, что согласились и с моим глупым примером. Выбор функции силуэта — действительно хорошая идея. Добро пожаловать в Stack Overflow!

2. @andronikus Спасибо, всегда пожалуйста. Да, я согласен с вашим пониманием # 1.

Ответ №2:

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

Ответ №3:

Похоже, что вы говорите конкретно о деревьях решений в своем вопросе. Деревья принятия решений являются одним из наиболее распространенных типов классификаторов; они способны обрабатывать несколько категорий, детализированные и непрерывные данные, а также пропущенные значения. Базовый алгоритм дерева решений называется ID3 и является популярным улучшением C4.5. Результаты дерева решений часто можно дополнительно улучшить с помощью boosting.

Комментарии:

1. Ах да, те. Мое самое первое, глубокое введение в машинное обучение (и программирование! И C ! тьфу) был проект биннинга, о котором я упоминал, который использовал BDTS, когда я начал над ним работать. Излишне говорить, что я понятия не имел, что происходит, но теперь, когда вы упомянули об этом, я думаю, что вы правы. Одна из причин, по которой я был сбит с толку, заключается в том, что проект использовал лес для каждой ячейки , а затем выполнял подгонку по этим результатам. Очевидно, что профессор тоже не знал, что происходит.

Ответ №4:

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

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

Для обработки изображений с помощью нейронных классификаторов см., Например, Мой сайт: http://www.egmont-petersen.nl (Нажмите на «Наука» и обзорную статью за 2002 год).