Apprentissage du RNSR avec répartition géographique - essai avec DVC

@François Parmentier François Parmentier authored on 22 Jul
.dvc chore(dvc): Add a file to DVC 4 months ago
.vscode chore(vscode,dvc,yaml): Make DVC files YAML files 4 months ago
bin fix(dvc): Metrics where in an array 4 months ago
data feat(dvc.yaml): Reorganize dvc.yaml 4 months ago
dvc_plots feat: Add evaluation and plots 4 months ago
libs feat(params): Add getParam 4 months ago
.dvcignore chore(dvc): Initialize DVC in the repo 4 months ago
.gitignore feat: Add train-areas 4 months ago
README.md docs: Update dag 4 months ago
dvc.lock fix(dvc): Metrics where in an array 4 months ago
dvc.yaml fix(dvc): Metrics where in an array 4 months ago
metrics.json fix(dvc): Metrics where in an array 4 months ago
metrics.tsv feat(dvc): Add metrics 4 months ago
package-lock.json feat(params): Add getParam 4 months ago
package.json feat(params): Add getParam 4 months ago
params.yaml feat: Add maximum size to models 4 months ago
precision.json feat: Add evaluation and plots 4 months ago
precision.tsv feat: Add evaluation and plots 4 months ago
README.md

rnsr-geo-ml-dvc

Apprentissage du RNSR avec répartition géographique - essai avec DVC.

Voir les travaux précédents: https://gitbucket.inist.fr/parmentf/rnsr-ml.

DVC

Initialisation

La documentation de l'extension DVC de VSCode dit que pour initialiser le dépôt il faut taper dvc exp init -i, mais ça ne marche pas avec ma version de DVC (qui est apparemment plus récente que ce à quoi s'attend l'extension).

$ dvc init  
Initialized DVC repository.

You can now commit the changes to git.

+---------------------------------------------------------------------+
|                                                                     |
|        DVC has enabled anonymous aggregate usage analytics.         |
|     Read the analytics documentation (and how to opt-out) here:     |
|             <https://dvc.org/doc/user-guide/analytics>              |
|                                                                     |
+---------------------------------------------------------------------+

What's next?
------------
- Check out the documentation: <https://dvc.org/doc>
- Get help and share ideas: <https://dvc.org/chat>
- Star us on GitHub: <https://github.com/iterative/dvc>

Cette commande a créé:

  • .dvcignore
  • .dvc
    • .gitignore
    • config

Alors que l'installation de l'extension VSCode a ajouté:

  • .vscode
    • settings.json

Pour créer un remote, je tape dvc remote add -d local /home/parmentf/data/dvc.
Il faut juste que le répertoire existe (et soit vide ou déjà consacré à ça).

Ajout de fichier

$ dvc add data/netscity-ville-aire-uniq.tsv 
100% Adding...|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████|1/1 [00:00, 20.28file/s]
                                                                                                                                                                                                                               
To track the changes with git, run:

    git add data/netscity-ville-aire-uniq.tsv.dvc data/.gitignore

To enable auto staging, run:

        dvc config core.autostage true

Donc, si on veut se simplifier la vie sur les ajouts suivants:

dvc config core.autostage true

Experiments

Pour initialiser le fichier dvc.yaml, générant les expériences, on peut utiliser dvc exp init --interactive.

Pour lancer le pipeline d'une expérience, il suffit de faire dvc repro.

Les fichiers résultats outs d'un stage (une étape) sont automatiquement ajoutés à DVC.

Diagram

dvc dag --mermaid (ou dvc dag --md) permet de visualiser ça (dans VSCode, il y a l'extension Markdown Preview Mermaid Support):

flowchart TD
  node1["data/addresses-40-cnrs-rnsr-big-classes-test.txt.dvc"]
  node2["data/addresses-40-cnrs-rnsr-big-classes-train.txt.dvc"]
  node3["data/netscity-ville-aire-uniq.tsv.dvc"]
  node4["extract-areas@test"]
  node5["extract-areas@train"]
  node6["prepare@test"]
  node7["prepare@train"]
  node8["split"]
  node9["train"]
  node1-->node6
  node2-->node7
  node3-->node6
  node3-->node7
  node4-->node9
  node5-->node8
  node5-->node9
  node6-->node4
  node6-->node8
  node7-->node5
  node7-->node8
  node8-->node9

Et avec dvc dag --outs --md:

flowchart TD
  node1["areas"]
  node2["data/addresses-40-cnrs-rnsr-big-classes-test.txt"]
  node3["data/addresses-40-cnrs-rnsr-big-classes-train.txt"]
  node4["data/area-address-test.tsv"]
  node5["data/area-address-train.tsv"]
  node6["data/areas-test.txt"]
  node7["data/areas-train.txt"]
  node8["data/netscity-ville-aire-uniq.tsv"]
  node9["models"]
  node1-->node9
  node2-->node4
  node3-->node5
  node4-->node1
  node4-->node6
  node5-->node1
  node5-->node7
  node6-->node9
  node7-->node1
  node7-->node9
  node8-->node4
  node8-->node5

Note: DAG signifie Directed Acyclic Graph (ou Graphe Orienté Acyclique).

Aires géographiques

Le split donne 100 aires géographiques, dont plus de 50 avec moins de 40 adresses.

On les rassemble donc dans areas/GatheredLittleAreas, ce qui laisse 48 aires (dont celle-ci) avec au moins 40 (inclus) aires.