Контекст: я разрабатываю систему, которая анализирует клинические данные для фильтрации неправдоподобных данных, которые могут быть опечатками.
Что я сделал до сих пор:
Для количественной оценки правдоподобия до сих пор я пытался нормализовать данные, а затем вычислить значение правдоподобия для точки p на основе ее расстояния до известных точек данных в наборе D (= обучающий набор):
С помощью этого количественного определения я могу затем выбрать порог, который отделяет правдоподобные данные от неправдоподобных данных. Я использую python / numpy.
Мои проблемы:
- Этот алгоритм не может обнаружить независимые измерения. В идеале, я мог бы поместить в алгоритм все, что я знаю о записи, и позволить ему самому обнаружить, что измерение X не влияет на достоверность записи.
- Алгоритм на самом деле не работает для дискретных значений, таких как логические значения или выбор входных данных. Они могут быть отображены на непрерывные значения, но нелогично, что Выбор 1 ближе к Выбору 2, чем к Выбору 3.
Вопрос:
Какие алгоритмы я должен рассмотреть для этой задачи? Кажется, что существует множество вариантов, включая подходы на основе ближайшего соседа, кластеризации и статистические подходы. Кроме того, у меня есть проблемы с поиском документов, которые касаются обнаружения аномалий этой сложности.
Любой совет высоко ценится.
[Изменить] Пример:
Предположим, что данные состоят из роста человека, веса человека и отметки времени - так что это 3D-данные. Вес и рост взаимосвязаны, но отметка времени полностью независима. Если я просто учту евклидовы расстояния, мне нужно будет выбрать небольшой порог, чтобы соответствовать большинству моих данных перекрестной проверки. В идеале алгоритм должен просто игнорировать измерение метки времени, потому что не имеет значения определять, является ли запись правдоподобной, поскольку метка времени никак не коррелирует с другими измерениями. Любая отметка времени вероятна.
С другой стороны, можно привести примеры, где отметка времени имеет значение. Например, это может быть то, что значение Y для признака X является правдоподобным при измерении до определенной даты, но не после определенной даты.
Ответы:
Типичная формулировка обнаружения аномалий состоит в том, чтобы найти среднее значение и дисперсию для каждого из признаков неаномальных данных, и если является вектором тех признаков, имеющих компоненты то определяют вероятность комбинации признаков какх х я р ( х )m x xi p(x)
где каждый распределен по Гауссу:x i ∼ N ( μ i , σ 2 i )Икся Икся∼ N( μя, σ2я)
аномалия возникает всякий раз, когдар ( х ) < ϵ
Распределение каждого не обязательно должно быть нормальным, но лучше, если оно будет хотя бы нормальным. Но используемые вами функции являются произвольными; они могут быть взяты непосредственно из необработанных данных или вычислены, поэтому, например, если вы считаете, что функция лучше смоделирована с использованием тогда установите для функции а не .x i l o g l o g ( x i ) x iИкся Икся л о г л о г( хя) Икся
Похоже, это очень похоже на то, что вы уже делаете, если вы берете .Q= μ
Определениеε
Алгоритм подходит для отрицательных примеров (не аномалии). Но определяется из набора перекрестной проверки и обычно выбирается в качестве значения, которое обеспечивает лучший результатF 1ε F1
Но для вычисления F1 вам нужно знать, что является аномальным, а что нет; это действительно положительные результаты, когда система предсказывает аномалию, а на самом деле это аномалия, ложные срабатывания - это предсказанные аномалии, которые на самом деле не являются и так далее. Поэтому, если у вас этого нет, то вам, возможно, придется вернуться к догадкам.
Проблема взаимосвязанных функций
Выше есть недостаток, хотя, если функции взаимосвязаны. Если это так, то приведенные выше вычисления могут не пометить что-то как аномальное, что есть на самом деле. Для решения этой проблемы используется многомерный гауссов для объектов, где - ковариационная матрица.Σм Σ
То же самое относится и к поиску и у этого подхода есть недостаток, который заключается в том, что вы должны вычислять обратное значение . Таким образом, должно быть как минимум столько же сэмплов, сколько объектов, и если число объектов велико, процесс будет требовать значительных вычислительных ресурсов, и вы должны защищать линейно зависимые объекты. Помните об этих предостережениях, но для вас это не проблема.ε Σ
источник
Я почти закончил проект, где мне нужно было решить эти проблемы, и я хотел бы поделиться своим решением, если у кого-то возникнут такие же проблемы.
Прежде всего, описанный мной подход очень похож на оценку плотности ядра . Итак, это было полезно знать для исследования ...
Независимые Особенности
Независимые характеристики могут быть отфильтрованы путем измерения коэффициента корреляции . Я сравнил все особенности по парам и измерил корреляцию. Затем я взял максимальный абсолютный коэффициент корреляции каждой функции в качестве коэффициента масштабирования. Таким образом, объекты, которые не коррелируют с другими, умножаются на значение, близкое к 0, и, следовательно, их влияние на евклидово расстояние(иначе ) незначительно.| | Икс1- х2| | dя ев T а н гр е ( х1, х2)
Имейте в виду: коэффициент корреляции может измерять только линейные корреляции. См. Связанную страницу вики для деталей. Если корреляция в данных может быть приближена линейно, это прекрасно работает. Если нет, вам следует взглянуть на последнюю страницу этой статьи и посмотреть, сможете ли вы использовать их измерение корреляции, чтобы получить коэффициент масштабирования.
Дискретные значения
Я использовал описанный алгоритм только для непрерывных значений. Дискретные значения использовались для фильтрации тренировочного набора. Поэтому, если у меня есть рост и вес человека, и я знаю, что она женщина, я буду только проверять образцы от других женщин, чтобы проверить аномалию.
источник