Алгоритм поиска кластеров в 1d кластерах, но не обязательно кластеризация всего - PullRequest
0 голосов
/ 30 декабря 2018

Представьте, что у меня есть массив, подобный следующему:

[0.1,0.12,0.14,0.45,0.88,0.91,0.94,14.3,15,16]

Я хотел бы определить шаблоны в этом, поэтому я могу сравнить его с другим набором данных, чтобы увидеть, соответствует ли он,Например, если я введу 0.89, я бы хотел видеть, что это относится к кластеру 0.88 - 0.94.Однако, если я введу 0.5, я хотел бы видеть, что это не относится к набору данных, даже если оно близко к 0.45 - аномалия в данных.

(приведенный выше массивсодержит примеры номеров, но в реальной системе я сравниваю свойства кода HTML, чтобы классифицировать их. Я использую Tensorflow для категоризации текста, но некоторые вещи (такие как длина CSS, соотношение CSS: HTML) являются числами.Шаблоны в этом, это не очевидно или в одном месте - например, категория A может иметь много очень высоких значений и низких значений, но почти нет между ними. Я не могу дать вам реальные цифры, потому что они определяются введенным кодоми препроцессор ML, но мы можем предположить, что числа составляют около 10% аномалии, и почти всегда пытаются показать одну или несколько комбинаций среднего, нижнего или верхнего. При «обучении» эти числа берутся из данных и сохраняются в одноммассивов (представляющих три категории). Затем я хочу взять свой вклад и сказать, какой из шаблонов массивов кажетсядля выравнивания с входным номером.)

Теперь представьте, что массив состоит из сотен или тысяч элементов.По крайней мере, 10% будут аномалии, и я должен учитывать это.Я предполагаю, что обнаружение кластера не является правильным термином - это в основном избавление от аномалий - но часть, на которой я застрял, имела диапазоны разных размеров.Например, в приведенном выше примере я все же хотел бы, чтобы 14.3 - 16 считался одним диапазоном / кластером, даже если они намного дальше, чем 0.1 - 0.14.

IЯ покопался в статье в Википедии (https://en.m.wikipedia.org/wiki/Anomaly_detection) на эту тему) и обнаружил, что наиболее вероятным функциональным и простым подходом будет анализ плотности в стиле K-ближайших соседей. Однако я не смогнайти любой плагин Python, который может легко сделать это для меня - проблема в том, что в этой конкретной задаче так много вариантов, что в принципе невозможно найти именно то, что я ищу. Я также попытался сделать свой собственныйБазовый алгоритм для сравнения каждого элемента с соседом и определения того, к какому объекту он ближе (к кластеру), или если это расстояние больше 2 *, среднее значение расстояний между другими элементами в кластерах классифицирует его как аномалию.это было не очень точно, и в нем по-прежнему присутствовал элемент предвзятости человека (почему 2 *, а не 3 *?), кроме того, в начале и в конце он стал совершенно бесполезным.р массив.Поэтому, если у кого-то из вас есть рекомендация по быстрому алгоритму, который будет работать еще лучше, или реализации вышеупомянутого, это будет с благодарностью.

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

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Используйте классические статистические методы, такие как оценка плотности ядра .Хорошо известны эвристики для выбора пропускной способности.KDE - простой и предпочтительный выбор для одномерных данных.

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

0 голосов
/ 30 декабря 2018

Методы обнаружения выбросов можно классифицировать как на основе распределения, так и на основе расстояния (хотя эти категории не обязательно должны быть непересекающимися).

Для обнаружения аномалий на основе распределения вы должны подобрать модель, соответствующую вашему конкретному набору проблем.Например, если вы должны знать, что ваш набор данных нормально распределен (общий подход, вы можете проверить, следует ли это, например, используя QQ-plot), вы можете использовать нормальное распределение, чтобы получить вероятность того, что точка данных будет частьювашего набора данных.Затем вы устанавливаете границу (обычно ~ 0,05) и классифицируете точку как выброс, если вероятность того, что точка будет частью набора данных, меньше 0,05.

Как вы знаете, одно только K-средство не является алгоритмом обнаружения аномалий, даже если бы вы нашли хороший набор центроидов (в вашем примере 0,5 просто классифицировалось бы в том же кластере, что и 0,45).), вам все равно понадобится дискриминационный аргумент (как упомянуто ранее или одно расстояние, основанное на локальном значении выброса).Проблема с обнаружением выбросов на основе расстояния состоит в том, что обычно не удается объяснить, почему данные ведут себя так, как они.

В настоящее время вы не предоставляете нам достаточно информации о своем наборе проблем.Что вы можете сказать нам по вашим данным?Откуда это взялось?Есть ли у вас какие-либо предположения об этом?или вы можете сделать какие-либо гипотезы?Что ты уже пробовал?Как выглядит сюжет?и т. д.

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

...