【发布时间】:2020-07-23 19:41:02
【问题描述】:
我正在尝试使用 h2o 在 R 中训练一个自动编码器模型,以检测我的数据集中的异常情况:
这是我的代码:
df <- read.csv(file=inputFile) # extract dataframe
feature_names <- names(df)
train_df <- df # Use whole dataset for training for this example
# -- Now train auto-encoder model --
library(h2o)
localH2O = h2o.init()
h2o.removeAll() # Close clusters that were already running
train_h2o <- as.h2o(train_df) # Put data in h2o dataframe
# Create deep learning model
result_model = h2o.deeplearning(x = feature_names, training_frame = train_h2o,
autoencoder = TRUE,
hidden = c(6,5,6),
epochs = 50)
然后模型训练成功后,我输入result_model,得到:
layer units type dropout l1 l2 mean_rate rate_rms momentum
1 1 798 Input 0.00 % NA NA NA NA NA
2 2 6 Rectifier 0.00 % 0.000000 0.000000 0.018308 0.110107 0.000000
3 3 5 Rectifier 0.00 % 0.000000 0.000000 0.002325 0.001377 0.000000
4 4 6 Rectifier 0.00 % 0.000000 0.000000 0.001975 0.001191 0.000000
5 5 798 Rectifier NA 0.000000 0.000000 0.010888 0.064831 0.000000
层单位是: 798, 6, 5, 6, 798,即使它应该有 7 个输入节点。
有人可以帮忙吗?将不胜感激。
【问题讨论】:
-
输入变量看起来是分类的,这些需要转换成二进制矩阵。您可以使用
model.matrix查看获得的列数 -
如何将它们变成二进制矩阵?
-
好吧,我猜 h20 是在幕后执行此操作的(警告我从未使用过它),但这可以解释为什么您会获得如此多的列/输入。尝试运行
ncol(model.matrix(~.-1, df))以获取粗略的列数(它会丢失一些) -
错误信息:
contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]]) 中的错误:对比只能应用于具有 2 个或更多级别的因子跨度> -
但是如果你问我的数据框有多少列,它大约是 730
标签: r h2o autoencoder