Представьте, что у меня есть массив, подобный следующему:
[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 *?), кроме того, в начале и в конце он стал совершенно бесполезным.р массив.Поэтому, если у кого-то из вас есть рекомендация по быстрому алгоритму, который будет работать еще лучше, или реализации вышеупомянутого, это будет с благодарностью.
Заранее спасибо.