Je cherche une méthode/structure de données pour implémenter un système d'évaluation pour un matcher binaire pour une vérification.Convertir une table CSV en structures de données Redis
Ce système sera réparti sur plusieurs PC.
idée de base est décrite dans de nombreux endroits sur Internet, par exemple, dans ce document: https://precisebiometrics.com/wp-content/uploads/2014/11/White-Paper-Understanding-Biometric-Performance-Evaluation.pdf
Ce matcher, que je teste, prend deux éléments de données comme une entrée et calcule un score de correspondance qui reflète leur similitude (un seuil sera alors choisi, en fonction du faux couplage/du faux taux de non-correspondance).
Actuellement je stocke des scores correspondant ainsi que des étiquettes dans un fichier CSV, comme suit:
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
...
(j'ai une base de données marquée)
Je lance un script python, qui se charge cette table dans Pandas DataFrame et calcule la courbe FMR/FNMR, similaire à celle représentée dans la figure 2 dans le lien ci-dessus. Le traitement est plutôt simple, il suffit de trier les données, de balayer les lignes de haut en bas et de calculer le nombre d'imposteurs/génois sur les rangées au-dessus et en dessous de chaque rangée.
Le système devrait également prendre en charge la recherche de valeurs aberrantes afin de prendre en charge l'amélioration de l'algorithme de correspondance (étiquettes de paires d'éléments de données, résultats originaux anormalement élevés ou scores d'imposteur anormalement petits). C'est aussi assez facile avec les DataFrames (juste trier et prendre des lignes de tête).
Maintenant, je pense à la façon de stocker les données de comparaison dans la RAM au lieu de fichiers CSV sur le disque dur. Je considère Redis à cet égard: la quantité de données est importante, et plusieurs PC sont impliqués dans les calculs, et Redis a une fonction maître-esclave qui lui permet de synchroniser rapidement les données sur le réseau, de sorte que plusieurs PC ont exactement clones de données. C'est gratuit.
Cependant, Redis ne me semble pas très bien convenir pour stocker de telles données tabulaires. Par conséquent, j'ai besoin de changer les structures de données et les algorithmes pour leur traitement. Cependant, ce n'est pas évident pour moi, comment traduire cette table en structures de données Redis.
Une autre option consisterait à utiliser un autre système de stockage de données à la place de Redis. Cependant, je ne suis pas au courant de ces systèmes et serai reconnaissant pour les suggestions.
Vous pourriez utiliser un 'DefaultDict' de [redis-collections] (http://redis-collections.readthedocs.io/en/stable/api.html#redis_collections.dicts.DefaultDict) - chaque clé pourrait stocker une liste des valeurs. – bbayles