Наблюдатель за выбросами с нуля с R

Краткое руководство по выявлению выбросов в многомерном пространстве.

Аудитория

В этом коротком сообщении блога мы рассмотрим основы распространенного метода автоматического кодирования - разложения матрицы - для обнаружения выбросов. Мы будем использовать базовую функцию в R для кодирования модели обратной проекции PCA для матричной декомпозиции.

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

Предварительные требования: анализ главных компонентов (PCA), линейная алгебра

Идея

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

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

Реализация

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

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

Difference_X1 (1-й ПК) = X1 (исходный) - C1 (реконструированный X1 с 1-м ПК)

pr.out = prcomp(X, center = TRUE, scale = TRUE)
pc.use <- 1
recon <- pr.out$x[,1:pc.use] %*% t(pr.out$rotation[,1:pc.use])
recon <- scale(recon, center = FALSE , scale=1/pr.out$scale)
recon <- scale(recon, center = -1 * pr.out$center, scale = FALSE)
diff = abs(X - recon)

Затем мы разработаем вес w, который представляет процент объясненной дисперсии (то есть собственные значения, обозначенные как лямбда) только с первым главным компонентом:

w_X1 (1-й ПК) = лямбда (1-й ПК) / лямбда (все ПК)

w_1st.pc = sum(pr.out$sdev[1])
w_all.pc = sum(pr.out$sdev)
w = w_1st.pc / w_all.pc

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

Score_X1 (1-й ПК) = Difference_X1 * w_X1

score = diff * w

Затем мы вычислим оценки для оставшихся переменных (от X2 и Xn) и сложим их вместе, чтобы получить окончательную оценку для этой строки данных (точки данных). После того, как каждой точке данных присвоена оценка, мы можем отсортировать наш набор данных по наивысшим оценкам, чтобы выявить самые высокие выбросы.

Полное математическое представление выглядит следующим образом:

Где X - это p -мерный набор данных Xi = [xi1, xi2,…, xip] (с i строками);

C - восстановленное значение X с использованием выбранного количества компьютеров;

j - выбранное количество включаемых компьютеров с наибольшим числом компьютеров.

Открыт для работы над проектами.
[email protected]