我想在Java类中使用H2O自动编码器(异常检测)进行推理/预测。
我构建了自动编码器示例" ECG Hearbeats"来自H2O DeepLearningBooklet与R并保存。我可以成功地将生成的Java类及其相关的h2o-genmodel.jar导入到我的Java项目中。
不幸的是,我找不到一个示例或文档如何在那里使用它。
这是我第一次尝试使用一些代码和一些猜测来自我在Java代码中用于推理的其他H2O模型的经验:
private static String modelClassName = "machinelearning.DeepLearning_model_R_1509973865970_1";
public static void main(String[] args) throws Exception {
hex.genmodel.GenModel rawModel;
rawModel = (hex.genmodel.GenModel) Class.forName(modelClassName).newInstance();
EasyPredictModelWrapper model = new EasyPredictModelWrapper(rawModel);
RowData row = new RowData();
// row.put(key, value); // TODO Add new line of input data, e.g.:
// 2.10,2.13,2.19,2.28,2.44,2.62,2.80,3.04,3.36,3.69,3.97,4.24,4.53,4.80,5.02,5.21,5.40,5.57,5.71,5.79,5.86,5.92,5.98,6.02,6.06,6.08,6.14,6.18,6.22,6.27,6.32,6.35,6.38,6.45,6.49,6.53,6.57,6.64,6.70,6.73,6.78,6.83,6.88,6.92,6.94,6.98,7.01,7.03,7.05,7.06,7.07,7.08,7.06,7.04,7.03,6.99,6.94,6.88,6.83,6.77,6.69,6.60,6.53,6.45,6.36,6.27,6.19,6.11,6.03,5.94,5.88,5.81,5.75,5.68,5.62,5.61,5.54,5.49,5.45,5.42,5.38,5.34,5.31,5.30,5.29,5.26,5.23,5.23,5.22,5.20,5.19,5.18,5.19,5.17,5.15,5.14,5.17,5.16,5.15,5.15,5.15,5.14,5.14,5.14,5.15,5.14,5.14,5.13,5.15,5.15,5.15,5.14,5.16,5.15,5.15,5.14,5.14,5.15,5.15,5.14,5.13,5.14,5.14,5.11,5.12,5.12,5.12,5.09,5.09,5.09,5.10,5.08,5.08,5.08,5.08,5.06,5.05,5.06,5.07,5.05,5.03,5.03,5.04,5.03,5.01,5.01,5.02,5.01,5.01,5.00,5.00,5.02,5.01,4.98,5.00,5.00,5.00,4.99,5.00,5.01,5.02,5.01,5.03,5.03,5.02,5.02,5.04,5.04,5.04,5.02,5.02,5.01,4.99,4.98,4.96,4.96,4.96,4.94,4.93,4.93,4.93,4.93,4.93,5.02,5.27,5.80,5.94,5.58,5.39,5.32,5.25,5.21,5.13,4.97,4.71,4.39,4.05,3.69,3.32,3.05,2.99,2.74,2.61,2.47,2.35,2.26,2.20,2.15,2.10,2.08
AutoEncoderModelPrediction p = model.predictAutoEncoder(row);
System.out.println(p.reconstructedRowData);
System.out.println(p.reconstructed[0]);
// TODO How to do get the MSE from object 'p'?
此代码实际编译并运行。但是,我真的不明白如何
我认为答案很简单,但没有文件不容易找到: - )
感谢您的帮助。
答案 0 :(得分:2)
(最后的main.java的代码示例)
您已正确使用它并在此行library(raster)
GBR <- getData(name = "GADM", country = "GBR", level = 1)
pts <- matrix(c(-0.4966766, -2.0772529, -3.8437793, 51.91829, 52.86147, 56.73899), ncol = 2)
r <- raster(GBR, res=1/12)
d <- distanceFromPoints(r, pts)
m <- mask(d, GBR)
plot(m)
rawModel = (hex.genmodel.GenModel) Class.forName(modelClassName).newInstance();
是列标题,key
是实际值,如果H2Oframe没有列标题,则H2O会自动为其分配value
,{{您可以手动编写此内容或使用C1
使用循环(请参阅代码段,例如此内容)
当前没有这种方法,但您可以获取原始值和重建值,然后从中计算MSE(参见下面的代码片段,最后几行使用{{1计算MSE) }和C2
数组)
当我创建模型时,我将其称为System.out.println(java.util.Arrays.toString(rawModel.getNames()));
(请参阅下面的代码,original
是其中一个参数),您将在下面的最后一个代码段中看到,所以如果你使用您需要更新该部分的其他名称。
reconstructed
以下是如何创建anomaly_model
文件,传递密钥的列名以及使用内置方法结果计算MSE的示例代码。
(注意:我为model_id
生成了随机值,你可以把它放在任何你想要的地方)
anomaly_model <- h2o.deeplearning(x = names(train_ecg), training_frame = train_ecg, activation = "Tanh",
autoencoder = TRUE,hidden = c(50,20,50),sparse = TRUE,l1 = 1e-4,epochs = 100, model_id = 'anomaly_model')
希望这有帮助!