Мы использовали Standard Scaler, чтобы сделать наши данные нормальными, и построили график разброса.
Теперь мы импортируем DBSCAN, чтобы дать баллы кластерам. Если это не удается, он покажет -1.
Теперь у нас есть результаты, но как нам проверить, какое значение является min, max и есть ли у нас значения -1? Мы будем использовать значение arg min для проверки наименьшего значения в кластере.
Мы видим из результата шесть значений, которые равны -1.
Давайте теперь построим график рассеяния.
Вышеупомянутые методы, которые мы применили, относятся к одномерным выбросам.
Для обнаружения многовариантных выбросов нам необходимо понимать многовариантные выбросы.
Например, мы берем автомобильные показания. Мы видели два счетчика показаний: один для одометра, который записывает или измеряет скорость, с которой движется транспортное средство, а второй — для чтения оборотов в минуту, который записывает количество оборотов, совершаемых колесом автомобиля в минуту.
Допустим, одометр показывает в диапазоне 0-60 миль в час и оборотов в диапазоне 0-750. Мы предполагаем, что все приходящие значения должны коррелировать друг с другом. Если одометр показывает скорость 50, а обороты показывают 0 впусков, показания неверны. Если одометр показывает значение больше нуля, это означает, что автомобиль двигался, поэтому обороты должны иметь более высокие значения, но в нашем случае он показывает значение 0. т. е. многомерные выбросы.
C. Метод расстояния Махаланобиса
В DBSCAN мы использовали евклидовы метрики расстояния, но в данном случае речь идет о методе расстояния Махаланобиса. Мы также можем использовать расстояние Махаланобиса с DBSCAN.
DBSCAN(eps=0.5, min_samples=3, metric='mahalanobis', metric_params={'V':np.cov(X)}, algorithm='brute', leaf_size=30, n_jobs=-1)
Почему евклидово не подходит для сущностей, коррелирующих друг с другом? Евклидово расстояние не может найти или даст неверные данные о том, насколько близки две точки.
Метод Махаланобиса использует расстояние между точками и распределение, которое является чистыми данными. Евклидово расстояние часто находится между двумя точками, и его z-оценка рассчитывается как x минус среднее и делится на стандартное отклонение. В Mahalanobis z-показатель равен x минус среднее значение, деленное на ковариационную матрицу.
Следовательно, какой эффект имеет деление на ковариационную матрицу? Значения ковариации будут высокими, если переменные в вашем наборе данных сильно коррелированы.
Точно так же, если значения ковариации низкие, расстояние значительно не уменьшается, если данные не коррелированы. Это настолько хорошо, что решает проблемы как масштаба, так и корреляции переменных.
Code
Набор данных можно взять из Anomaly-/caret.csv на главной · aster28/Anomaly- (github.com)
df = pd.read_csv('caret.csv').iloc[:, [0,4,6]] df.head()
Мы определили расстояние функции как x = None, data = None и Covariance = None. Внутри функции мы взяли среднее значение данных и использовали значение ковариации значения там. В противном случае мы вычислим ковариационную матрицу. T означает транспонирование.
Например, если размер массива пять или шесть и вы хотите, чтобы он был в двух переменных, то нам нужно транспонировать матрицу.
np.random.multivariate_normal(mean, cov, size = 5)
array([[ 0.0509196, 0.536808 ], [ 0.1081547, 0.9308906], [ 0.4545248, 1.4000731], [ 0.9803848, 0.9660610], [ 0.8079491 , 0.9687909]])
np.random.multivariate_normal(mean, cov, size = 5).T
array([[ 0.0586423, 0.8538419, 0.2910855, 5.3047358, 0.5449706], [ 0.6819089, 0.8020285, 0.7109037, 0.9969768, -0.7155739]])
Мы использовали sp.linalg, который представляет собой линейную алгебру и имеет различные функции, выполняемые на линейной алгебре. Он имеет функцию inv для обращения матрицы. Точка NumPy как средство умножения матрицы.
импортировать scipy как sp def Distance(x=None, data=None, cov=None): x_m = x - np.mean(data), если не cov: cov = np.cov(data.values.T) inv_cov = sp. linalg.inv(cov) left = np.dot(x_m, inv_cov) m_distance = np.dot(left, x_m.T) return m_distance.diagonal() df_g= df[['карат', 'глубина', 'цена' ]].head(50) df_g['m_distance'] = расстояние(x=df_g, данные=df[['карат', 'глубина', 'цена']]) df_g.head()
B. Метод Тьюки для обнаружения выбросов
Метод Тьюки также часто называют методом Box and Whisker или Box plot.
Метод Тьюки использует верхний и нижний диапазоны.
Верхний диапазон = 75-й процентиль -k*IQR
Нижний диапазон = 25-й процентиль + k* IQR
Давайте посмотрим на наши данные Титаника с переменной возраста, используя коробчатую диаграмму.
sns.boxplot (титанический ['возраст']. значения)
На изображении мы видим, что квадратное пятно, созданное Seaborn, показывает, что многие точки в возрасте от 55 до 80 лет являются выбросами, не входящими в квартиль. Мы обнаружим нижний и верхний диапазон, создав функцию outliers_detect.
def outliers_detect(x, k = 1.5): x = np.array(x).copy().astype(float) first = np.quantile(x, .25) Third = np.quantile(x, .75) # Расчет IQR iqr = третий - первый # Верхний диапазон и нижний диапазон нижний = первый - (k * iqr) верхний = третий + (k * iqr) возврат нижний, верхний
outliers_detect (титанический ['возраст'], k = 1.5)
(2.5, 54.5)
D. Обнаружение с помощью PyCaret
Мы будем использовать тот же набор данных для обнаружения с помощью PyCaret.
из pycaret.anomaly import * setup_anomaly_data = setup(df)
Pycaret — это машинное обучение с открытым исходным кодом, которое использует модель обучения без учителя для обнаружения выбросов. Он имеет метод get_data для использования набора данных в самом pycaret, set_up для задачи предварительной обработки перед обнаружением, обычно принимает фрейм данных, но также имеет много других функций, таких как ignore_features и т. д.
Другие методы create_model для использования алгоритма. Сначала мы будем использовать изолированный лес.
ifor = create_model("iforest") plot_model(ifor) ifor_predictions = Predict_Model(ifor, data = df) print(ifor_predictions) ifor_anomaly = ifor_predictions[ifor_predictions["Аномалия"] == 1] print(ifor_anomaly.head()) print( ifor_anomaly.shape)
Аномалия 1 указывает на выбросы, а аномалия 0 не показывает выбросов.
Желтый цвет здесь указывает на выбросы.
Теперь давайте посмотрим на другой алгоритм, K ближайших соседей (KNN).
knn = create_model("knn") plot_model(knn) knn_pred = predict_model(knn, data = df) print(knn_pred) knn_anomaly = knn_pred[knn_pred["Аномалия"] == 1] knn_anomaly.head() knn_anomaly.shape
Теперь воспользуемся алгоритмом кластеризации.
clus = create_model("кластер") plot_model(clus) clus_pred = Predict_Model(clus, data = df) print(clus_pred) clus_anomaly = clus_predictions[clus_pred["Аномалия"] == 1] print(clus_anomaly.head()) clus_anomaly. форма
E. Обнаружение аномалий с помощью PyOD
PyOD — это библиотека Python для обнаружения выбросов в многомерных данных. Это хорошо как для обучения с учителем, так и для обучения без учителя.
из pyod.models.iforest импортировать IForest из pyod.models.knn импортировать KNN
Мы импортировали библиотеку и алгоритм.
из pyod.utils.data import generate_data из pyod.utils.data import Assessment_print из pyod.utils.example import visualize train= 300 test=100 контаминировать = 0.1 X_train, X_test, y_train, y_test = generate_data(n_train=train, n_test=test , n_features=2,загрязнение=загрязнение,random_state=42)
cname_alg = 'KNN' # имя алгоритма K ближайших соседей c = KNN() c.fit(X_train) #Соответствие алгоритму y_trainpred = c.labels_ y_trainscores = c.decision_scores_ y_testpred = c.predict(X_test) y_testscores = c.decision_function(X_test) print("Обучающие данные:") Assessment_print(cname_alg, y_train, y_train_scores) print("Тестовые данные:") y_trainpred, y_testpred, show_figure = Истина, save_figure = Истина)
Мы будем использовать алгоритм IForest.
fname_alg = 'IForest' # имя алгоритма K ближайших соседей f = IForest() f.fit(X_train) #Подбор алгоритма y_train_pred = c.labels_ y_train_scores = c.decision_scores_ y_test_pred = c.predict(X_test) y_test_scores = c.decision_function(X_test) print("Обучающие данные:") Assessment_print(fname_alg, y_train_pred, y_train_scores) print("Тестовые данные:") y_train_pred, y_test_pred, show_figure = Истина, save_figure = Истина)
F. Обнаружение аномалий Пророком
Мы будем использовать набор данных авиапассажиров с временными рядами. Prophet/example_air_passengers.csv на главной · aster28/prophet (github.com)
импортировать пророка из пророка импортировать прогнозиста из пророка импортировать пророка m = Prophet()
данные = pd.read_csv('air_pass.csv') data.head()
data.columns = ['ds', 'y'] данные ['y'] = np.where (данные ['y']! = 0, np.log (данные ['y']), 0)
Журнал столбца y не допускает отрицательного значения. Мы разделили наши данные на обучение, тестирование и сохранили прогноз в переменной прогноза.
поезд, тест = train_test_split (данные, random_state = 42) m.fit (поезд [['ds', 'y']]) прогноз = m.predict (тест) определение определения (прогноз): forcast = прогноз [['ds ', 'yhat', 'yhat_lower', 'yhat_upper']].copy() forcast['real']= data['y'] forcast['аномалия'] =0 forcast.loc[forcast['real'] > forcast['yhat_upper'], 'аномалия']=1 forcast.loc[forcast['real']< forcast['yhat_lower'], 'аномалия']=-1 forcast['imp']=0 in_range = forcast ['yhat_upper']-forcast['yhat_lower'] forcast.loc[forcast['аномалия']==1, 'imp'] = forcast['real']-forcast['yhat_upper']/in_range forcast.loc[ forcast['аномалия']==-1, 'imp']= forcast['yhat_lower']-forcast['real']/in_range возвращает прогноз
обнаружить (прогноз)
Мы приняли аномалию за -1.
Заключение
Процесс обнаружения выбросов в заданном наборе данных называется обнаружением аномалий. Выбросы — это объекты данных, которые выделяются среди остальных значений объекта в наборе данных и ведут себя ненормально.
Задачи обнаружения аномалий могут использовать методы кластеризации на основе расстояния и плотности, чтобы идентифицировать выбросы как кластер.
Здесь мы обсуждаем различные методы обнаружения аномалий и объясняем их, используя код для трех наборов данных о Титанике, пассажирах Air и Caret to.
Ключевые моменты
1. Выбросы или обнаружение аномалий можно обнаружить с помощью метода Box-Whisker или DBSCAN.
2. Метод евклидова расстояния используется с некоррелированными элементами.
3. Метод Махаланобиса используется с многомерными выбросами.
4. Все значения или точки не являются выбросами. Некоторые шумы должны быть мусором. Выбросы — это достоверные данные, которые необходимо скорректировать.
5. Мы использовали PyCaret для обнаружения выбросов с использованием различных алгоритмов, где аномалия равна единице, показанной желтым цветом, и нет выбросов, где выброс равен 0.
6. Мы использовали PyOD, библиотеку обнаружения выбросов Python. Он имеет более 40 алгоритмов. Используются контролируемые и неконтролируемые методы.
7. Мы использовали Prophet и определили функцию обнаружения, чтобы выделить выбросы.
Материалы, показанные в этой статье, не принадлежат Analytics Vidhya и используются по усмотрению Автора.
- SEO-контент и PR-распределение. Получите усиление сегодня.
- Платоблокчейн. Интеллект метавселенной Web3. Расширение знаний. Доступ здесь.
- Источник: https://www.analyticsvidhya.com/blog/2023/01/learning-different-techniques-of-anomaly-detection/
- 1
- 10
- 11
- 7
- a
- О нас
- выше
- адреса
- Отрегулированный
- AIR
- алгоритм
- алгоритмы
- Все
- аналитика
- Аналитика Видхья
- и
- обнаружение аномалии
- Другой
- прикладной
- массив
- гайд
- до
- между
- Коробка
- рассчитанный
- под названием
- не могу
- автомобиль
- случаев
- проверка
- Закрыть
- Кластер
- кластеризации
- код
- цвет
- Column
- Колонки
- COM
- как
- Корреляция
- создали
- данным
- Наборы данных
- глубина
- обнаруженный
- обнаружение
- отклонение
- различный
- усмотрение
- обсуждать
- расстояние
- распределение
- Разделенный
- Dont
- DOT
- каждый
- эффект
- позволяет
- лиц
- и т.д
- Эфир (ETH)
- пример
- Объяснять
- не удается
- Особенности
- Найдите
- обнаружение
- First
- Поплавок
- Прогноз
- лес
- КАДР
- от
- функция
- Функции
- GitHub
- Дайте
- данный
- хорошо
- график
- счастливый
- здесь
- High
- высший
- очень
- Как
- HTTPS
- определения
- изображение
- Импортировать
- in
- указывает
- инверсия
- изоляция
- вопросы
- IT
- пункты
- саму трезвость
- изучение
- Библиотека
- Низкий
- машина
- обучение с помощью машины
- сделанный
- Главная
- сделать
- Создание
- многих
- матрица
- Макс
- означает
- меры
- Медиа
- метод
- методы
- Метрика
- модель
- Модели
- БОЛЕЕ
- перемещение
- имя
- Необходимость
- отрицательный
- соседи
- "обычные"
- нормально
- номер
- NumPy
- объект
- объекты
- ONE
- с открытым исходным кодом
- Другие контрактные услуги
- в противном случае
- контур
- принадлежащих
- Платон
- Платон Интеллектуальные данные
- ПлатонДанные
- пунктов
- прогноз
- цена
- процесс
- Питон
- случайный
- ассортимент
- Reading
- реальные
- учет
- Цена снижена
- ОТДЫХ
- результат
- Итоги
- возвращают
- то же
- Шкала
- рожденное море
- Во-вторых
- Форма
- должен
- показывать
- показанный
- Шоу
- существенно
- ШЕСТЬ
- Размер
- So
- некоторые
- скорость
- раскол
- стоять
- стандарт
- стоит
- хранить
- взять
- принимает
- говорить
- Сложность задачи
- задачи
- снижения вреда
- тестXNUMX
- Ассоциация
- Там.
- В третьих
- три
- время
- в
- Train
- Обучение
- понимать
- неконтролируемое обучение
- us
- использование
- обычно
- использует
- ценностное
- Наши ценности
- различный
- автомобиль
- Что
- Колесо
- будь то
- который
- будете
- в
- X
- ВАШЕ
- зефирнет
- нуль