标签: anomaly-detection

为什么我的 LSTM 模型重复以前的值?

我在 Keras 中构建了一个简单的 LSTM 模型,如下所示:

model = Sequential()
model.add(keras.layers.LSTM(hidden_nodes, input_dim=num_features, input_length=window, consume_less="mem"))
model.add(keras.layers.Dense(num_features, activation='sigmoid'))
optimizer = keras.optimizers.SGD(lr=learning_rate, decay=1e-6, momentum=0.9, nesterov=True)
Run Code Online (Sandbox Code Playgroud)

当我将模型应用于某些数据时,我有这种特殊的行为: 在此处输入图片说明

其中橙色线代表预测值,蓝色线代表大真相。

如您所见,网络重复了以前的值,但这不是我想要的。我有几个功能(不仅是图片中显示的功能),我希望网络考虑与其他时间序列的依赖关系,而不是只查看单个过去的数据并重复以前的数据。

我希望问题足够清楚!

我的数据
有 36 个时间序列(分类和数字数据)。我使用了一个长度为 W 的窗口,并重新整理了数据,以便以 Keras (num_samples, window, num_features) 中所需的形式创建一个 numpy 向量。

编辑 1
个数据样本:

0.5, 0.1, 0.4, 1, 0,74
0.1, 0.1, 0.8, 0.9, 0,8
0.2, 0.3, 0.5, 1, 0,85
Run Code Online (Sandbox Code Playgroud)

我有一个分类属性和两个数字属性。前三行指的是分类行(分类的one-hot编码)。最后两个是指两个数字属性。

我构建训练和测试,如下所示: 在此处输入图片说明

所以我执行model.fit(T, X).

我也尝试过使用少量隐藏节点,但结果是一样的。

编辑 2
考虑使用数值和分类特征的自定义损失函数:

def mixed_num_cat_loss_backend(y_true, y_pred, signals_splits):
    if isinstance(y_true, np.ndarray):
        y_true = keras.backend.variable( y_true )
    if isinstance(y_pred, np.ndarray): …
Run Code Online (Sandbox Code Playgroud)

time-series lstm keras anomaly-detection

5
推荐指数
0
解决办法
1208
查看次数

过量质量或质量-体积曲线的实施

我正在寻找过量质量或质量体积曲线的实现,用于评估无监督异常检测算法。

我更喜欢用 Python 实现,但我可以用任何其他语言重写它。

谢谢你!

algorithm implementation unsupervised-learning anomaly-detection

5
推荐指数
1
解决办法
2132
查看次数

有没有办法计算隔离森林中观测级别的特征重要性?

我正在 R 中使用隔离森林对多变量数据执行异常检测。

我尝试计算异常分数以及计算该分数时各个指标的贡献。我能够获得异常分数,但在计算指标重要性时面临问题。

我能够通过 BigML(在线平台)获得所需的结果,但不能通过 R 获得。

R代码:

> library(solitude) # tried 'IsolationForest' and 'h2o' but not getting desired result
> mo = isolation_forest(data)
> final_scores <- predict(mo,data)
> summary(mo)
     Length Class  Mode
forest 14     ranger list

> head(final_scores,5)
[1] 0.4156554 0.3923926 0.4262782 0.4595296 0.4174865
Run Code Online (Sandbox Code Playgroud)

BigMl 的输出: 在此输入图像描述

我想通过 R 代码获取每个指标(a、b、c、d)的重要性值,就像我在 BigML 中得到的一样

我想我错过了一些基本参数。实际上我是 R 新手,所以我无法弄清楚。

我想到了一些方法来获得观察级别的特征重要性,但我在实现它时遇到了问题。

这是我正在计划的片段。

指标中的点是单独的观察结果,而线是根据特定变量进行分割的。

我能够追踪森林中的单棵树,但问题是森林中有 500 棵树,追踪单棵树并获取它们的重要性值是不切实际的。下面的示例纯粹基于虚拟数据。

在此输入图像描述

单棵树的输出:

> x = treeInfo(mo$forest,tree=3)
> x
   nodeID leftChild rightChild splitvarID splitvarName  splitval terminal prediction
1       0         1 …
Run Code Online (Sandbox Code Playgroud)

r anomaly-detection

5
推荐指数
1
解决办法
1620
查看次数

隔离森林:分类数据

我正在尝试使用 sklearn 中的隔离森林检测乳腺癌数据集中的异常。我正在尝试将 Iolation Forest 应用于混合数据集,当我拟合模型时,它会给我值错误。

这是我的数据集:https : //archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer/

这是我的代码:

from sklearn.model_selection import train_test_split
rng = np.random.RandomState(42)

X = data_cancer.drop(['Class'],axis=1)
y = data_cancer['Class'] 

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 20)
X_outliers = rng.uniform(low=-4, high=4, size=(X.shape[0], X.shape[1]))

clf = IsolationForest()
clf.fit(X_train)
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

ValueError: 无法将字符串转换为浮点数:'30-39'

是否可以对分类数据使用隔离森林?如果是,我该怎么做?

python outliers scikit-learn categorical-data anomaly-detection

4
推荐指数
1
解决办法
4667
查看次数

mutate_impl(.data,点)中的错误:评估错误:类Date的索引只允许年,季度,月,周和日的时间段

我正在使用Anomalize包检测异常,但是即使定义了Dateas索引,也遇到了上述错误:

样例代码:

x <- as.data.frame(data %>%
  group_by(date,acc_id) %>%
  summarise(count = as.numeric(n_distinct(d_id))) %>%
  ungroup())

x$acc_id <- as.character(x$acc_id)

x <- x %>% 
  tibbletime::as_tbl_time(index = date)


x %>%
  time_decompose(count, method = "twitter", trend = "2 months") %>%
  anomalize(remainder, method = "gesd") %>%
  time_recompose() %>%
  plot_anomalies(time_recomposed = TRUE)
Run Code Online (Sandbox Code Playgroud)

错误:

mutate_impl(.data,点)中的错误:评估错误:类Date的索引只允许年,季度,月,周和日的时间段。

dput(head(x))

structure(list(date = structure(c(17532, 17532, 17532,  17532, 17532, 17532), class = "Date"), acc_id = c("a44444",  "gg555", "0195459b-5809-4b54-89b5-1a4376c9f126",  "ggg6546", "hhjh77",  "hhjh68777"), count = c(3, 1, 1, 1,  1, 1)), .Names = …
Run Code Online (Sandbox Code Playgroud)

r time-series dplyr anomaly-detection tidyverse

3
推荐指数
1
解决办法
913
查看次数

时间序列数据的隔离森林

我只是想知道隔离森林(iForest)是否可以处理时间序列数据。据我所知,iForest用于异常检测,它基于随机化技术对数据进行随机递归分区,然后将分区保存在树结构中。

我有一个理论问题。我只是想知道 iForest 是否可以处理时间序列数据,因为它基于一些随机化技术。这是否会违反时间序列特征,因为随机化可能会破坏时间依赖性?

machine-learning time-series anomaly-detection

3
推荐指数
1
解决办法
6162
查看次数

孤立森林与鲁棒随机切割森林在异常值检测中的比较

我正在研究异常值检测中的不同方法。我遇到了 sklearn 的 Isolation Forest 实现和 Amazon sagemaker 的 RRCF(Robust Random Cut Forest)实现。两者都是基于决策树的集成方法,旨在隔离每个点。隔离步骤越多,该点就越有可能成为内点,反之亦然。

但是,即使查看了算法的原始论文,我也无法准确理解两种算法之间的区别。它们的工作方式有何不同?它们中的一个比另一个更有效吗?

编辑:我正在添加研究论文的链接以获取更多信息,以及一些讨论这些主题的教程。

隔离森林:

论文 教程

健壮的随机砍伐森林:

论文 教程

python outliers scikit-learn anomaly-detection amazon-sagemaker

3
推荐指数
1
解决办法
3259
查看次数

在 ggplot 中围绕属于因子水平的点绘制圆圈

上一篇文章描述了如何在 ggplot 中超出给定值的点周围绘制红色圆圈。我想对异常检测结果执行相同的操作,但是在属于给定因子级别的点周围绘制圆圈。

我如何更改此代码以允许在给定因子水平周围绘制圆圈?

ggplot(mtcars, aes(wt, mpg)) + 
  geom_point() +
  geom_point(data=mtcars[mtcars$mpg>30,],
             pch=21, fill=NA, size=4, colour="red", stroke=1) +
  theme_bw()
Run Code Online (Sandbox Code Playgroud)

plot r ggplot2 anomaly-detection

1
推荐指数
1
解决办法
5765
查看次数

如何在 Prometheus 中提醒 z 分数

我有以下表达:

(avg_over_time(my_metrics{service_name="aService"}[5m])) - (avg_over_time(my_metrics{service_name="aService"}[48h])) / (stddev_over_time(my_metrics{service_name="aService"}[48h]))
 
Run Code Online (Sandbox Code Playgroud)

每隔 48 小时检测一次异常情况。我正在努力理解如何编写在检测到异常时发出的警报。或者我完全错了,这已经可以使用了,因为当检测到异常时它会触发?

谢谢

alert prometheus anomaly-detection

1
推荐指数
1
解决办法
2366
查看次数

复杂数据的良好异常检测模型

我正在处理数据并希望为这些数据生成异常检测模型。该数据仅包含三个特征:LatitudeLongitudeSpeed。我将它标准化,然后应用t-SNE然后再次标准化。有没有标记或目标数据。所以,它应该是一个无监督的异常检测。

我无法共享数据,因为它是私有的。但是,看起来是这样的:

图片

数据中存在一些异常值,例如异常值:

图片

这是数据的最终形状:

图片

如您所见,数据有点复杂。当我手动搜索异常实例时(通过查看特征值),我观察到红色圆圈内的实例(下图中)应该被检测为异常

红色区域内的实例应该是异常的:

图片

我曾经OneClassSVM检测异常。这里是参数;

nu = 0.02
kernel = "rbf"
gamma = 0.1
degree = 3
verbose = False
random_state = rng
Run Code Online (Sandbox Code Playgroud)

和模型;

# fit the model
clf = svm.OneClassSVM(nu=nu, kernel=kernel, gamma=gamma, verbose=verbose, random_state=random_state)
clf.fit(data_scaled)
y_pred_train = clf.predict(data_scaled)
n_error_train = y_pred_train[y_pred_train == -1].size
Run Code Online (Sandbox Code Playgroud)

这是我最后得到的:

图片

这是检测到的异常OneClassSVM和红色实例被检测为异常:

图片

因此,如您所见,该模型将许多实例预测为异常,但实际上,这些实例中的大多数应该是正常的。

我为nu,gamma和尝试了不同的参数值degree。但是,我找不到合适的决策线来检测真正的异常

  • 我的模型有什么问题?我应该尝试不同的异常检测算法吗?
  • 我的数据不适合异常检测吗?

svm scikit-learn anomaly-detection

0
推荐指数
1
解决办法
742
查看次数