Идеи математического моделирования Кубка Шэньчжэня 2023 – пример: обнаружение аномалий

Идеи вопросов

(Поделитесь на CSDN, как только появятся вопросы о конкурсе)

https://blog.csdn.net/dc_sinor?type=blog

1. Введение – Об обнаружении аномалий

Обнаружение аномалий (обнаружение выбросов) в следующих сценариях:

  • предварительная обработка данных
  • Обнаружение вирусных троянов
  • Тестирование продукции промышленного производства
  • Проверка сетевого трафика

Подождите, есть важная роль. Поскольку в приведенных выше сценариях количество аномальных данных составляет небольшую часть, алгоритмы классификации, такие как SVM и логистическая регрессия, неприменимы, поскольку:

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

Ниже приведены области применения алгоритмов, связанных с обнаружением аномалий и обучением с учителем:

аномальное обнаружение

  • мошенничество с кредитными картами
  • Аномальное обнаружение производственных продуктов
  • Обнаружение аномалий машин в центре обработки данных
  • обнаружения вторжений

контролируемое обучение

  • Идентификация спама
  • категории новостей

2. Алгоритм обнаружения аномалий

вставьте сюда описание изображения
вставьте сюда описание изображения

import tushare
from matplotlib import pyplot as plt
 
df = tushare.get_hist_data("600680")
v = df[-90: ].volume
v.plot("kde")
plt.show()

За последние три месяца, если объем транзакций превышает 200 000, это может считаться ненормальным.

вставьте сюда описание изображения
вставьте сюда описание изображения

2. Анализ блочной диаграммы

import tushare
from matplotlib import pyplot as plt
 
df = tushare.get_hist_data("600680")
v = df[-90: ].volume
v.plot("kde")
plt.show()

вставьте сюда описание изображения
Общеизвестно, что если объем торгов акциями меньше 20 000 или больше 80 000, следует быть более бдительными!

3. На основе расстояния/плотности

Типичный алгоритм: «Алгоритм локального фактора выброса - Фактор локального выброса», который вводит «k-расстояние, k-е расстояние», «k-расстояние окрестности, k-е расстояние окрестности», «досягаемое расстояние, достижимое расстояние» и "плотность локальной достижимости, плотность локальной достижимости" и "коэффициент локального выброса, коэффициент локального выброса", чтобы найти выбросы.

Визуально ощутите это, как показано на рисунке 2, для точек набора С1 общий разнос, плотность и дисперсия относительно равномерны, и их можно рассматривать как один и тот же кластер, для точек набора С2 их также можно рассматривать как кластер. Точки o1 и o2 относительно изолированы и могут рассматриваться как аномальные или дискретные точки. Теперь вопрос заключается в том, как реализовать универсальность алгоритма, который может удовлетворить идентификацию выбросов C1 и C2, которые имеют очень разные распределения плотности. LOF может достичь нашей цели.

вставьте сюда описание изображения
вставьте сюда описание изображения

4. На основе идеи разделения

Типичный алгоритм — «Изолированный лес, Изолирующий лес», идея такова:

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

Алгоритм этого алгоритма представляет собой процесс использования гиперплоскости для разделения подпространства и последующего построения аналогичного бинарного дерева:

вставьте сюда описание изображения

import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest

rng = np.random.RandomState(42)

# Generate train data
X = 0.3 * rng.randn(100, 2)
X_train = np.r_[X + 1, X - 3, X - 5, X + 6]
# Generate some regular novel observations
X = 0.3 * rng.randn(20, 2)
X_test = np.r_[X + 1, X - 3, X - 5, X + 6]
# Generate some abnormal novel observations
X_outliers = rng.uniform(low=-8, high=8, size=(20, 2))

# fit the model
clf = IsolationForest(max_samples=100*2, random_state=rng)
clf.fit(X_train)
y_pred_train = clf.predict(X_train)
y_pred_test = clf.predict(X_test)
y_pred_outliers = clf.predict(X_outliers)

# plot the line, the samples, and the nearest vectors to the plane
xx, yy = np.meshgrid(np.linspace(-8, 8, 50), np.linspace(-8, 8, 50))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.title("IsolationForest")
plt.contourf(xx, yy, Z, cmap=plt.cm.Blues_r)

b1 = plt.scatter(X_train[:, 0], X_train[:, 1], c='white')
b2 = plt.scatter(X_test[:, 0], X_test[:, 1], c='green')
c = plt.scatter(X_outliers[:, 0], X_outliers[:, 1], c='red')
plt.axis('tight')
plt.xlim((-8, 8))
plt.ylim((-8, 8))
plt.legend([b1, b2, c],
           ["training observations",
            "new regular observations", "new abnormal observations"],
           loc="upper left")
plt.show()

вставьте сюда описание изображения

Acho que você gosta

Origin blog.csdn.net/dc_sinor/article/details/131896508
Recomendado
Clasificación