Как подойти к задачам машинного обучения с большим пространством ввода? - PullRequest
16 голосов
/ 13 февраля 2010

Как мне подходить к ситуации, когда я пытаюсь применить какой-либо алгоритм ML (в частности, классификацию, в частности SVM) к некоторому входу большого размера, и результаты, которые я получаю, не вполне удовлетворительны?

1, 2 или 3-мерные данные могут быть визуализированы вместе с результатами алгоритма, чтобы вы могли понять, что происходит, и иметь представление о том, как решить проблему. Когда данные превышают 3 измерения, кроме интуитивного воспроизведения параметров, я не совсем уверен, как их атаковать?

Ответы [ 5 ]

25 голосов
/ 13 февраля 2010

Что вы делаете с данными ? Мой ответ: ничего . SVM предназначены для обработки многомерных данных. Сейчас я работаю над проблемой исследования, которая включает в себя контролируемую классификацию с использованием SVM. Наряду с поиском источников в Интернете, я провел свои собственные эксперименты по влиянию уменьшения размерности до классификации. Предварительная обработка функций с использованием PCA / LDA не позволила значительно повысить точность классификации SVM.

Для меня это совершенно понятно из того, как работают SVM. Пусть x будет m-мерным вектором признаков. Пусть y = Ax, где y в R ^ n, а x в R ^ m при n

Вот одно обсуждение, в котором обсуждается использование PCA до SVM: ссылка

Что вы можете сделать, это изменить параметры SVM. Например, для libsvm link параметры C и гамма имеют решающее значение для успешной классификации. В libsvm faq, особенно в этой записи link , содержатся более полезные советы. Среди них:

  1. Масштабируйте свои особенности перед классификацией.
  2. Попробуйте получить сбалансированные классы. Если это невозможно, то оштрафуйте одного класса больше, чем другого. Смотрите больше ссылок на дисбаланс SVM.
  3. Проверьте параметры SVM. Попробуйте много комбинаций, чтобы получить лучшую.
  4. Сначала используйте ядро ​​RBF. Это почти всегда работает лучше всего (в вычислительном отношении).
  5. Почти забыл ... перед тестированием перекрестная проверка !

РЕДАКТИРОВАТЬ: Позвольте мне просто добавить эту «точку данных». Недавно я провел еще один крупномасштабный эксперимент с использованием SVM с предварительной обработкой PCA на четырех эксклюзивных наборах данных. PCA не улучшило результаты классификации для любого выбора уменьшенной размерности. Исходные данные с простым диагональным масштабированием (для каждого признака вычитайте среднее и делите на стандартное отклонение) работали лучше. Я не делаю никакого общего заключения - просто делюсь этим экспериментом. Возможно, по другим данным PCA может помочь.

7 голосов
/ 13 февраля 2010

Некоторые предложения:

  • Данные проекта (только для визуализации) в более низкое пространство (с использованием PCA или MDS или любого другого, имеющего смысл для ваших данных)

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

Кроме того, если вы сообщите нам, что это за задача и каков ваш вывод SVM, могут быть более конкретные предложения, которые могут сделать люди.

3 голосов
/ 14 февраля 2010

Вы можете попытаться уменьшить размерность задачи с помощью PCA или аналогичного метода. Помните, что у PCA есть два важных момента. (1) Предполагается, что данные, к которым он применяется, нормально распределены, и (2) результирующие данные теряют свое естественное значение (в результате чего появляется черный ящик). Если вы можете жить с этим, попробуйте.

Другой вариант - попробовать несколько алгоритмов выбора параметров. Поскольку SVM уже упоминались здесь, вы можете попробовать подход Чанга и Ли ( Ранжирование функций с использованием линейного SVM ), в котором они использовали линейный SVM для предварительного выбора «интересных функций», а затем использовали SVM на основе RBF на выбранные функции. Если вы знакомы с Orange, библиотекой интеллектуального анализа данных Python , вы сможете закодировать этот метод менее чем за час. Обратите внимание, что это жадный подход, который из-за своей «жадности» может потерпеть неудачу в случаях, когда входные переменные сильно коррелированы. В этом случае, и если вы не можете решить эту проблему с помощью PCA (см. Выше), вы можете перейти к эвристическим методам, которые пытаются выбрать наилучшие возможные комбинации предикторов. Основной ловушкой такого подхода является высокий потенциал переоснащения. Убедитесь, что у вас есть куча «девственных» данных, которые не были видны в течение всего процесса построения модели. Протестируйте вашу модель на этих данных только один раз, после того как вы убедитесь, что модель готова. Если вы потерпите неудачу, не используйте эти данные еще раз для проверки другой модели, вам придется найти новый набор данных. В противном случае вы не будете уверены, что вы не переоделись еще раз.

Список выбранных работ по выбору параметров: Выбор характеристик для данных по многомерным геномным микрочипам

О, и еще одна вещь о SVM. SVM - это черный ящик. Вы лучше выясните, что такое механизм, который генерирует данные, и смоделируйте механизм, а не данные. С другой стороны, если бы это было возможно, скорее всего, вы бы здесь не задавали этот вопрос (и я бы не стал так огорчаться из-за переоснащения).

Список выбранных документов по выбору параметров

  1. Выбор характеристик для данных по многомерным геномным микрочипам
  2. Упаковщики для выбора подмножества функций
  3. Выбор параметров при оптимизации роя частиц
  4. Я работал в лаборатории, которая разработала этот Стохастический метод для определения, in silico, наркотического характера молекул
3 голосов
/ 14 февраля 2010

Я бы подошел к проблеме следующим образом:

Что вы подразумеваете под "результатами, которые я получаю, не вполне удовлетворительные"?

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

  • У вас есть выбросы в ваших данных обучения (данные, которые неправильно классифицированы). В этом случае вы можете попробовать алгоритмы, такие как RANSAC, чтобы справиться с этим.
  • Ваша модель (в данном случае SVM) не подходит для этой проблемы. Это можно диагностировать, попробовав другие модели (adaboost и т. Д.) Или добавив дополнительные параметры в текущую модель.
  • Представление данных не очень подходит для вашей задачи классификации. В этом случае предварительная обработка данных с помощью выбора признаков или методов уменьшения размерности поможет

Если уровень классификации по данным теста неудовлетворителен, это означает, что ваша модель соответствует данным:

  • Либо ваша модель слишком сложна (слишком много параметров), и ее необходимо ограничить,
  • Или вы тренировали его на тренировочном наборе, который слишком мал, и вам нужно больше данных

Конечно, это может быть смесь вышеперечисленных элементов. Это все «слепые» методы для решения проблемы. Чтобы лучше понять проблему, вы можете использовать методы визуализации, проецируя данные в более низкие измерения, или искать модели, которые лучше подходят для проблемной области, как вы ее понимаете (например, если вы знаете, что данные обычно распределяются, вы можете использовать GMM для моделирования данных ...)

1 голос
/ 13 февраля 2010

Если я не ошибаюсь, вы пытаетесь увидеть, какие параметры в SVM дают вам лучший результат. Ваша проблема - подгонка модели / кривой. Я работал над аналогичной проблемой пару лет назад. Есть тонны библиотек и алгоритмов, чтобы сделать то же самое. Я использовал алгоритм Ньютона-Рафсона и разновидность генетического алгоритма, чтобы соответствовать кривой.

Сгенерируйте / угадайте / получите ожидаемый результат с помощью эксперимента в реальном мире (или, если вы делаете простую классификацию, просто сделайте это самостоятельно). Сравните это с результатами вашего SVM. Алгоритмы, о которых я упоминал ранее, повторяют этот процесс до тех пор, пока результат вашей модели (в данном случае SVM) не будет несколько соответствовать ожидаемым значениям (обратите внимание, что этот процесс займет некоторое время, исходя из вашей проблемы / размера данных. кластер Беовульф 140 узлов).

Если вы решите пойти с Ньютоном-Рафсоном, это может быть хорошим местом для начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...