【发布时间】:2020-10-22 20:43:27
【问题描述】:
我在 R 中使用 H2O 自动编码器进行异常检测。我没有训练数据集,所以我使用 data.hex 来训练模型,然后使用相同的 data.hex 来计算重建误差。 data.hex 中重构错误最大的行被认为是异常的。由模型本身计算的模型的均方误差 (MSE) 将是平方重建误差的总和,然后除以行数(即示例)。下面是模型的一些 sudo 代码。
# Deeplearning Model
model.dl <- h2o.deeplearning(x = x, training_frame = data.hex, autoencoder = TRUE, activation = "Tanh", hidden = c(25,25,25), variable_importances = TRUE)
# Anomaly Detection Algorithm
errors <- h2o.anomaly(model.dl, data.hex, per_feature = FALSE)
目前我的data.hex中大约有10个特征(因子),它们都是分类特征。我有两个问题:
(1) 在数据进入深度学习模型(autoencoder=TRUE)之前,我是否需要执行特征选择以选择 10 个特征的子集,以防某些特征彼此显着相关?或者我不需要,因为数据会进入一个自动编码器,它会压缩数据并只选择最重要的信息,所以特征选择是多余的?
(2) 这里使用H2O自动编码器的目的是识别data.hex中动作异常的发送者。以下是 data.hex 的两个示例。示例 B 是示例 A 的转换版本,通过连接示例 A 中每个发送者-接收者对的所有操作。
分别在示例A和示例B中的data.hex上运行模型后,我得到的是
(a) 示例 A 的 MSE (~0.005) 比示例 B 的 MSE 大 20 倍以上;
(b) 当我将重建误差按升序排列并绘制它们时(因此误差在图中从左到右增加),示例 A 的重建误差曲线在右端更陡峭(例如飙升),而示例 B 中的重构误差曲线逐渐增加。
我的问题是,哪个 data.hex 示例更适合我识别异常的目的?
感谢您的见解!
【问题讨论】:
标签: h2o feature-selection autoencoder anomaly-detection mse