我想计算一个h2o.frame.H2OFrame
的哈希值。理想情况下,同时使用R
和python
。我对h2o.frame.H2OFrame
的理解是,这些对象基本上“生活”在h2o
服务器上(即由某些Java
对象表示),而不在R
或{{1 }}的上传位置。
我想计算“尽可能接近”实际训练算法的哈希值。这就排除了基础python
或R
对象(序列化)以及从中加载数据的任何基础文件上哈希值的计算。
原因是我想捕获python
的上传功能对基础数据执行的所有(可能)更改。
从h2o docs推断,没有通过h2o
公开的类似哈希的功能。
实现h2o.frame.H2OFrame
数据的类哈希摘要的一种可能性是通过对所有数字列求和并对分类列执行类似操作。但是,我真的很想在我的哈希函数中产生一些雪崩效果,以使函数输入中的微小变化导致输出中的较大差异。此要求排除了简单的总和等。
是否已经有一些我可能会忽略的界面? 如果没有,我该如何完成上述任务?
h2o
谢谢您的帮助。
答案 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
感谢您的帮助!