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

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

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

16
задан Steve Tjoa 13 February 2010 в 00:30
поделиться

5 ответов

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

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

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

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

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

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

26
ответ дан 30 November 2019 в 16:24
поделиться

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

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

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

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

7
ответ дан 30 November 2019 в 16:24
поделиться

Извлечение GetEnvironment Strings .

-121--2268901-

Посмотрите на переменную _ environ .

-121--2268904-

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

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

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

1
ответ дан 30 November 2019 в 16:24
поделиться

Используйте Data.Binary и один из производных сценариев, поставляемых вместе с пакетом.

Очень просто выводить бинарные экземпляры с помощью функций 'deriveM', предоставляемых в наборе инструментов Data.Binay.

derive :: (Data a) => a -> String

Для любого «a» в Data он выводит бинарный экземпляр для вас как последовательность. Есть и версия putStr, deriveM. Пример:

*Main> deriveM (undefined :: Drinks)
instance Binary Main.Drinks where
  put (Beer a) = putWord8 0 >> put a
  put Coffee = putWord8 1
  put Tea = putWord8 2
  put EnergyDrink = putWord8 3
  put Water = putWord8 4
  put Wine = putWord8 5
  put Whisky = putWord8 6
  get = do
    tag_ <- getWord8
    case tag_ of
      0 -> get >>= \a -> return (Beer a)
      1 -> return Coffee
      2 -> return Tea
      3 -> return EnergyDrink
      4 -> return Water
      5 -> return Wine
      6 -> return Whisky
      _ -> fail "no parse"

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

-121--4780032-

Как показано на этом потоке , возможно, потребуется завершить существующий процесс abd или разблокировать порт 5037 (остатки предыдущих попыток запуска adb ).

Попробуйте закрыть Eclipse, выдав « C :\Users\Mohit\Documents\StartSDK\tools kill-server » - команда терминала и повторение.
Если это все еще не работает, можно попробовать открыть монитор активности, чтобы проверить, запущены ли какие-либо процессы adb, и убить их.

Привет, сейчас все в порядке, я видел с nestat - командной строкой, что это был несколько процессов на порту 5037. Порт, служащий для эмулятора.
Спасибо

-121--2292316-

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

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

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

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

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

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

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

3
ответ дан 30 November 2019 в 16:24
поделиться

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

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

Список избранных работ по выбору параметров: Feature selection for high-dimensional genomic microarray data

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

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

  1. Выбор признаков для высокоразмерных геномных данных микрочипов
  2. Обертки для выбора подмножества признаков
  3. Выбор параметров в оптимизации роя частиц
  4. Я работал в лаборатории, которая разработала этот Стохастический метод для определения in silico характера молекул, похожего на лекарство
3
ответ дан 30 November 2019 в 16:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: