我在 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) 我正在 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)
我想通过 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) 我正在尝试使用 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
我正在使用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) 我只是想知道隔离森林(iForest)是否可以处理时间序列数据。据我所知,iForest用于异常检测,它基于随机化技术对数据进行随机递归分区,然后将分区保存在树结构中。
我有一个理论问题。我只是想知道 iForest 是否可以处理时间序列数据,因为它基于一些随机化技术。这是否会违反时间序列特征,因为随机化可能会破坏时间依赖性?
我正在研究异常值检测中的不同方法。我遇到了 sklearn 的 Isolation Forest 实现和 Amazon sagemaker 的 RRCF(Robust Random Cut Forest)实现。两者都是基于决策树的集成方法,旨在隔离每个点。隔离步骤越多,该点就越有可能成为内点,反之亦然。
但是,即使查看了算法的原始论文,我也无法准确理解两种算法之间的区别。它们的工作方式有何不同?它们中的一个比另一个更有效吗?
编辑:我正在添加研究论文的链接以获取更多信息,以及一些讨论这些主题的教程。
隔离森林:
健壮的随机砍伐森林:
python outliers scikit-learn anomaly-detection amazon-sagemaker
上一篇文章描述了如何在 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) 我有以下表达:
(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 小时检测一次异常情况。我正在努力理解如何编写在检测到异常时发出的警报。或者我完全错了,这已经可以使用了,因为当检测到异常时它会触发?
谢谢
我正在处理数据并希望为这些数据生成异常检测模型。该数据仅包含三个特征:Latitude、Longitude和Speed。我将它标准化,然后应用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。但是,我找不到合适的决策线来仅检测真正的异常。
r ×3
scikit-learn ×3
time-series ×3
outliers ×2
python ×2
alert ×1
algorithm ×1
dplyr ×1
ggplot2 ×1
keras ×1
lstm ×1
plot ×1
prometheus ×1
svm ×1
tidyverse ×1