将 CSV table 转换为 Redis 数据结构
Convert CSV table to Redis data structures
我正在寻找一个 method/data 结构来实现二进制匹配器的评估系统以进行验证。
该系统将分布在多台PC上。
互联网上很多地方都描述了基本思想,例如,在这篇文档中:https://precisebiometrics.com/wp-content/uploads/2014/11/White-Paper-Understanding-Biometric-Performance-Evaluation.pdf
我正在测试的这个匹配器将两个数据项作为输入并计算反映它们相似性的匹配分数(然后将选择一个阈值,取决于 false match/false non-match率)。
目前我在 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 脚本,将这个 table 加载到 Pandas DataFrame 并计算 FMR/FNMR 曲线,类似于所示在图 2 中的 link 上面。处理相当简单,只需对数据帧进行排序,从上到下扫描行并计算每行上方和下方行的数量impostors/genuines。
系统还应支持查找异常值以支持匹配算法改进(成对数据项的标签,产生异常大的真实分数或异常小的冒名顶替分数)。使用 DataFrames 这也很容易(只需排序并获取标题行)。
现在我正在考虑如何将比较数据存储在 RAM 中而不是 HDD 上的 CSV 文件。
我正在考虑Redis这方面:数据量大,多台PC参与计算,Redis有一个master-slave特性可以快速同步网络上的数据,以便多台 PC 具有数据的精确克隆。
它也是免费的。
但是,Redis 在我看来似乎不太适合存储此类表格数据。
因此,我需要改变数据结构和算法来处理它们。
但是,对我来说,如何将这个 table 翻译成 Redis 数据结构并不明显。
另一种选择是使用其他一些数据存储系统而不是 Redis。但是,我不知道有这样的系统,将不胜感激。
您需要更多地了解 Redis 才能解决您的挑战。我建议您 https://try.redis.io 尝试一下,然后再考虑您的问题。
TL;DR - Redis 不是 "tabular data" 存储,它是数据结构的存储。以最佳方式使用为您的查询提供服务的数据结构取决于您。
IMO 你想要做的实际上是将大数据(到底有多大?)保存在较慢的存储上,并将模型(FMR 曲线计算?异常值?)存储在 Redis 中。这几乎可以肯定地使用现有的核心数据结构(在这种情况下可能是哈希和排序集)来完成,但也许使用新模块 API 更优化。请参阅 redis-ml 模块作为从 Redis 提供机器学习模型的示例(也许您的用例会是对它的一个很好的补充;))
免责声明:我在 Redis Labs 工作,这里是开源 Redis 的发源地,也是利用它的商业解决方案提供商,包括上述模块(开源,AGPL 许可)。
我正在寻找一个 method/data 结构来实现二进制匹配器的评估系统以进行验证。
该系统将分布在多台PC上。
互联网上很多地方都描述了基本思想,例如,在这篇文档中:https://precisebiometrics.com/wp-content/uploads/2014/11/White-Paper-Understanding-Biometric-Performance-Evaluation.pdf
我正在测试的这个匹配器将两个数据项作为输入并计算反映它们相似性的匹配分数(然后将选择一个阈值,取决于 false match/false non-match率)。
目前我在 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 脚本,将这个 table 加载到 Pandas DataFrame 并计算 FMR/FNMR 曲线,类似于所示在图 2 中的 link 上面。处理相当简单,只需对数据帧进行排序,从上到下扫描行并计算每行上方和下方行的数量impostors/genuines。
系统还应支持查找异常值以支持匹配算法改进(成对数据项的标签,产生异常大的真实分数或异常小的冒名顶替分数)。使用 DataFrames 这也很容易(只需排序并获取标题行)。
现在我正在考虑如何将比较数据存储在 RAM 中而不是 HDD 上的 CSV 文件。
我正在考虑Redis这方面:数据量大,多台PC参与计算,Redis有一个master-slave特性可以快速同步网络上的数据,以便多台 PC 具有数据的精确克隆。 它也是免费的。
但是,Redis 在我看来似乎不太适合存储此类表格数据。
因此,我需要改变数据结构和算法来处理它们。 但是,对我来说,如何将这个 table 翻译成 Redis 数据结构并不明显。
另一种选择是使用其他一些数据存储系统而不是 Redis。但是,我不知道有这样的系统,将不胜感激。
您需要更多地了解 Redis 才能解决您的挑战。我建议您 https://try.redis.io 尝试一下,然后再考虑您的问题。
TL;DR - Redis 不是 "tabular data" 存储,它是数据结构的存储。以最佳方式使用为您的查询提供服务的数据结构取决于您。
IMO 你想要做的实际上是将大数据(到底有多大?)保存在较慢的存储上,并将模型(FMR 曲线计算?异常值?)存储在 Redis 中。这几乎可以肯定地使用现有的核心数据结构(在这种情况下可能是哈希和排序集)来完成,但也许使用新模块 API 更优化。请参阅 redis-ml 模块作为从 Redis 提供机器学习模型的示例(也许您的用例会是对它的一个很好的补充;))
免责声明:我在 Redis Labs 工作,这里是开源 Redis 的发源地,也是利用它的商业解决方案提供商,包括上述模块(开源,AGPL 许可)。