我正在通过RStudio版本1.1.463从Windows 10 Home OS运行H2O。
我正在尝试运行h2o.deeplearning()
函数。这是准备代码:
dataset_m = dataset[2:83]
# Convert all values to numeric and Feature Scaling
for (j in 1:(ncol(dataset_m)-1)) {
dataset_m[,j] = as.numeric(as.character(dataset_m[,j]))
dataset_m[,j] = scale(dataset_m[,j])
}
library(h2o)
h2o.init(nthreads = -1)
model = h2o.deeplearning(y = 'Output',
training_frame = as.h2o(dataset_m),
activation = 'Rectifier',
hidden = c(43,43),
epochs = 100,
train_samples_per_iteration = -2)
我遇到以下错误:
water.exceptions.H2OIllegalArgumentException: Provided column type matrix is unknown. Cannot proceed with parse due to invalid argument.
我检查了机器上的.out文件,但找不到有关触发此事件的行或列的任何其他信息。同一目录中有2个CSV文件,一个CSV文件在上次输入时有99,137行,另一个在991,328行中。两者都有所有列。我输入了不同大小的数据,以检查H2O服务器的食欲并因此检查两者之间的差异。我检查了最后几行,但数据似乎合适。没有迹象表明数据损坏会触发CSV文件中的错误。
我运行sapply(dataset_m, typeof)
来检查是否有任何异常,但是除最后一列为“整数”外,所有列均显示为“ double”。
需要几分钟才能返回错误。不确定此信息是否对确定原因有用。
我也有一个使用少量数据的代码,该代码使用相同的H2O功能并且正在运行。因此,我不确定这次我在做什么错。错误消息也没有暗示任何特定的内容。
是因为H2O服务器可以处理的数据量大吗?
期待您的想法,建议和帮助。
答案 0 :(得分:0)
而不是使用矩阵调用as.h2o(),而是为as.h2o()提供data.frame。
您的示例不是可剪切粘贴的,因此我不知道这是否确实可行,但这就是这个主意:
df = as.data.frame(dataset_m)
h2o_df = as.h2o(df)
model = h2o.deeplearning(y = 'Output',
training_frame = h2o_df,
...
答案 1 :(得分:0)
无需使用scale()
,因为h2o.deeplearning()
会帮您做到这一点,默认情况下:http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/algo-params/standardize.html
在阅读了您的问题下的评论后,我发现删除对scale()
的呼叫也可以为您解决问题:-)
关于代码的其他一些想法:
dataset_m = as.numeric(as.character(dataset_m))
会起作用;无需逐列进行操作。train = as.h2o(dataset_m)
,而不要在h2o.deeplearning()
调用中进行。然后可以对其进行错误检查,在其他模型中再次使用等。h2o.importFile()
来加载数据集,并应自动意识到每一列都是数字。这样既可以将其加载到R中,又可以进行as.h2o()调用。