Способ поиска "самого чистого" подмножества данных, то есть подмножества с самой низкой изменчивостью - PullRequest
1 голос
/ 05 апреля 2009

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

Существует 3 возможных сценария:

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

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

0% плохо = дело 1
100% плохо = дело 2

Я ищу только смежные участки с низкой изменчивостью; то есть мне все равно, есть ли отдельные точки, которые соответствуют тренду

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

Я свободно владею C ++, но, поскольку я пытаюсь сделать код открытым исходным кодом и кроссплатформенным, я придерживаюсь стандартов ISO C ++. Это подразумевает отсутствие .NET, но если у вас есть пример .NET, я был бы признателен, если бы вы также помогли мне преобразовать его в ISO C ++. Я также знаю JAVA, немного ассемблера и фортран.

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

Заранее спасибо


Я понимаю, что оставил некоторые вещи в воздухе, и поэтому позвольте мне уточнить:

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

Ответы [ 2 ]

4 голосов
/ 05 апреля 2009

Алгоритм RANSAC - это один из подходов к тому, что вы ищете, если я вас правильно понимаю. http://en.wikipedia.org/wiki/RANSAC

1 голос
/ 05 апреля 2009

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

Исключение выбросов несет в себе некоторый риск искажения результата в соответствии с вашими ожиданиями.

...