【问题标题】:Questions about feature selection and data engineering when using H2O autoencoder for anomaly detection使用 H2O 自编码器进行异常检测时有关特征选择和数据工程的问题
【发布时间】: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


    【解决方案1】:

    问题 1

    您不需要减少模型中输入特征的数量。我不能说我知道训练期间会发生什么,但是正如你所说,可以在隐藏层中消除共线/相关特征。您可以考虑调整隐藏节点并查看其行为方式。 hidden = c(25,25,25) -> hidden = c(25,10,25)hidden = c(15,15) 甚至 hidden = c(7, 5, 7) 用于您的一些功能。

    问题 2

    您的模型的目的是什么?您是在尝试确定哪些“发送方/接收方组合”是异常,还是您正在尝试确定哪些“发送方/接收方 + 特定操作组合”是异常?如果是前者(“发送方/接收方组合”),我猜示例 B 会更好。

    如果您想了解“发送方/接收方组合”并使用示例 A,那么您将如何汇总一个发送方-接收方组合的所有操作?你会平均他们的错误吗?

    但听起来示例 A 对升序列表中的异常有更多响应(其中只有几行具有高错误)。我会采样不同的行,看看错误是否有意义(作为领域专家)。看看更高的错误是否往往看起来像是异常的行。

    【讨论】:

    • 感谢 Neema 的回答和好的建议!你对我的第二个问题的问题是我需要考虑的。
    猜你喜欢
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 2020-07-14
    • 2018-09-25
    相关资源
    最近更新 更多