Как подойти к задачам машинного обучения с использованием многомерного входного пространства?

StackOverflow https://stackoverflow.com/questions/2255833

Вопрос

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

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

Это было полезно?

Решение

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

Для меня это полностью имеет смысл, исходя из того, как работают SVM.Пусть x - m-мерный вектор признаков.Пусть y = Ax , где y находится в R ^ n, а x - в R ^ m для n < m, то есть y - это x, спроецированное на пространство меньшей размерности.Если классы Y1 и Y2 линейно разделимы в R ^ n, то соответствующие классы X1 и X2 линейно разделимы в R^ m.Следовательно, исходные подпространства должны быть "по крайней мере" такими же разделяемыми, как и их проекции на более низкие измерения, т. е. PCA теоретически не должен помогать.

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

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Если вы решите пойти с Newton-Raphson's, это возможно, это хорошее место для начала.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top