计算h2o帧的哈希

时间:2018-12-03 12:44:53

标签: python r h2o

我想计算一个h2o.frame.H2OFrame的哈希值。理想情况下,同时使用Rpython。我对h2o.frame.H2OFrame的理解是,这些对象基本上“生活”在h2o服务器上(即由某些Java对象表示),而不在R或{{1 }}的上传位置。

我想计算“尽可能接近”实际训练算法的哈希值。这就排除了基础pythonR对象(序列化)以及从中加载数据的任何基础文件上哈希值的计算。 原因是我想捕获python的上传功能对基础数据执行的所有(可能)更改。

h2o docs推断,没有通过h2o公开的类似哈希的功能。 实现h2o.frame.H2OFrame数据的类哈希摘要的一种可能性是通过对所有数字列求和并对分类列执行类似操作。但是,我真的很想在我的哈希函数中产生一些雪崩效果,以使函数输入中的微小变化导致输出中的较大差异。此要求排除了简单的总和等。

是否已经有一些我可能会忽略的界面? 如果没有,我该如何完成上述任务?

h2o

谢谢您的帮助。

2 个答案:

答案 0 :(得分:2)

它在REST API 1中可用(请参见屏幕截图),您可能也可以在Python的H2OFrame对象中找到它,但它没有直接公开。

答案 1 :(得分:0)

因此,这里根据米哈尔·库尔卡(Michal Kurka)和汤姆·克拉列维奇(Tom Kraljevic)的建议,在python中提供了完整的解决方案:

import h2o
import requests
import json

h2o.init()

iris_df=h2o.upload_file(path="~/iris.csv")

apiEndpoint="http://127.0.0.1:54321/3/Frames/"
res=json.loads(requests.get(apiEndpoint+iris_df.frame_id).text)

print("Checksum 1: ",res["frames"][0]["checksum"])

#change a bit
iris_df[0,1]=iris_df[0,1]+1e-3

res=json.loads(requests.get(apiEndpoint+iris_df.frame_id).text)

print("Checksum 2: ", res["frames"][0]["checksum"])

h2o.cluster().shutdown()

这给

Checksum 1:  8858396055714143663
Checksum 2:  -4953793257165767052

感谢您的帮助!