обнаруживать выбросы в разреженном распределении? - PullRequest
5 голосов
/ 20 января 2012

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

| strlen |  freq  | 
|      0 |   2312 |
|      3 |     45 |
|      9 |     75 |
|     10 |  15420 |
|     11 |    395 |
|     12 |    114 |
|     19 |     27 |
|     20 |   1170 |
|     21 |     33 |
|     35 |     9  |

Что я хотел бы сделать, так это разработать алгоритм, чтобы определить, какая длина строки имеет высокую вероятность быть целенаправленно уникальной, а не типо или случайным мусором. это поле может иметь тип enum, поэтому для допустимых значений может быть несколько скачков частоты. ясно, 10 и 20 действительны, 0 просто опущены данные. 35 и 3 может быть случайным мусором, несмотря на то, что оба очень разные по частоте. 19 и 21 могут быть напечатаны вокруг формата 20. 11 может быть напечатан для 10, но как насчет 12?

Кажется, просто использование частоты появления% недостаточно. вокруг горячих точек с более высокой вероятностью «просто ошибка» вокруг очевидных выбросов.

также, фиксированный порог не срабатывает, когда есть 15 уникальных длин, которые могут варьироваться от 5 до 20 символов, каждая с частотой от 7 до 20%.

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

Да, для очистки данных в коде будут другие параметры, но, похоже, длина очень быстро предварительно фильтрует и классифицирует поля с любым количеством структур.

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

спасибо! * лев 1016 *

1 Ответ

2 голосов
/ 20 января 2012

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

http://en.wikipedia.org/wiki/Anomaly_detection

http://s3.amazonaws.com/mlclass-resources/docs/slides/Lecture15.pdf

Я не нашел ссылок на легкодоступные библиотеки. Что-то вроде MATLAB или его бесплатного двоюродного брата, Octave, может быть хорошим способом, если вы не можете найти библиотеку обнаружения аномалий на выбранном вами языке. https://goker.wordpress.com/tag/anomaly-detection/

...