2017-07-27 55 views
1

我正在寻找一种方法/数据结构来实现用于验证的二进制匹配器的评估系统。将CSV表转换为Redis数据结构

该系统将分布在多台PC上。

基本思路是,在许多地方在互联网上所描述的,例如,在本文档中:https://precisebiometrics.com/wp-content/uploads/2014/11/White-Paper-Understanding-Biometric-Performance-Evaluation.pdf

这个匹配,我正在测试,有两个数据项作为输入,并计算匹配分数,反映他们相似性(然后根据错误匹配/错误不匹配率选择阈值)。

目前我存储在CSV文件标签一起匹配得分,就像下面:

label1, label2, genuine, 0.1 
label1, label4, genuine, 0.2 
... 
label_2, label_n+1, impostor, 0.8 
label_2, label_n+3, impostor, 0.9 
... 
label_m, label_m+k, genuine, 0.3 
... 

(我有一个标记数据库)

然后我运行一个python脚本,即加载此表放入Pandas DataFrame并计算FMR/FNMR曲线,类似于上面链接中图2所示的曲线。处理过程非常简单,只需对数据帧进行排序,从上到下扫描行,并计算每行上下行上的冒名顶替者/ genuines的数量。

该系统还应该支持找到离群值以支持匹配算法改进(数据项对的标签,产生异常大的真实分数或异常小的冒充者分数)。使用DataFrames也很容易(只需排序并占据头部行)。

现在我正在考虑如何将比较数据存储在RAM中而不是HDD上的CSV文件中。

在这方面,我正在考虑Redis:数据量很大,并且有几台PC参与计算,Redis具有主从功能,可以通过网络快速同步数据,因此几台PC可以精确地数据克隆。 它也是免费的。

但是,Redis在我看来并不适合存储这样的表格数据。

因此,我需要更改数据结构和算法进行处理。 但是,对于我来说,如何将此表转换为Redis数据结构并不明显。

另一种选择是使用其他数据存储系统而不是Redis。但是,我不知道这样的系统,并会很乐意提供建议。

+1

您可以使用[redis-collections]中的DefaultDict(http://redis-collections.readthedocs.io/en/stable/api.html#redis_collections.dicts.DefaultDict) - 每个键都可以存储列表值。 – bbayles

回答

1

您需要了解更多关于Redis的信息以解决您的难题。我建议你试试https://try.redis.io,然后想想你的问题。

TL; DR - Redis不是“表格数据”存储,它是数据结构的存储。您最好使用以最佳方式为您的查询提供服务的数据结构。

IMO想要做的事实际上是保存大量数据(反正它有多大?),然后在Redis中存储模型(FMR曲线计算?异常值?)。这几乎可以肯定是用现有的核心数据结构(在这种情况下可能是Hashes和Sorted Sets)来完成的,但是对于新的Modules API可能更加优化。请参阅redis-ml模块,作为Redis提供机器学习模型的示例(也许您的使用案例将会是一个不错的补充;))

声明:我在Redis Labs中工作,Redis Labs是开源Redis和提供程序的所在地的商业解决方案,利用它,包括上述模块(开源,AGPL许可)。