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 2 months ago
.vscode chore(vscode,dvc,yaml): Make DVC files YAML files 2 months ago
bin fix(dvc): Metrics where in an array 2 months ago
data feat(dvc.yaml): Reorganize dvc.yaml 2 months ago
dvc_plots chore(dvc): Test modelsize 4M 2 months ago
libs feat(params): Add getParam 2 months ago
.dvcignore chore(dvc): Initialize DVC in the repo 2 months ago
.gitignore feat: Add train-areas 2 months ago
README.md chore(dvc): Test modelsize 4M 2 months ago
dvc.lock chore(dvc): Test modelsize 4M 2 months ago
dvc.yaml fix(dvc): Metrics where in an array 2 months ago
metrics.json chore(dvc): Test modelsize 4M 2 months ago
metrics.tsv chore(dvc): Test modelsize 4M 2 months ago
package-lock.json feat(params): Add getParam 2 months ago
package.json feat(params): Add getParam 2 months ago
params.yaml chore(dvc): Test modelsize 4M 2 months ago
plots_diff.png chore(dvc): Test modelsize 4M 2 months ago
precision.json chore(dvc): Test modelsize 4M 2 months ago
precision.tsv chore(dvc): Test modelsize 4M 2 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.

Plots

Même sans expérience, on peut comparer des... runs: après un dvc repro, on peut faire (à condition d'avoir configuré des plots et des metrics) dvc metrics diff, ou dvc plots diff.

$ dvc metrics diff
Path          Metric    HEAD     workspace    Change                  
metrics.json  max       0.76     0.828        0.068
metrics.json  mean      0.28285  0.25927      -0.02358
metrics.json  median    0.2155   0.21         -0.0055
metrics.json  min       0.0356   0.0674       0.0318

Le résultat d'un premier dvc plots diff (sur les 48 aires géographiques):

dvc plots diff

C'est une page HTML située dans le répertoire dvc_plots.

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["evaluate"]
        node5["extract-areas@test"]
        node6["extract-areas@train"]
        node7["prepare@test"]
        node8["prepare@train"]
        node9["split"]
        node10["train"]
        node1-->node7
        node2-->node8
        node3-->node7
        node3-->node8
        node5-->node10
        node6-->node9
        node6-->node10
        node7-->node5
        node7-->node9
        node8-->node6
        node8-->node9
        node9-->node10
        node10-->node4

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["metrics.json"]
        node10["models"]
        node11["precision.json"]
        node1-->node10
        node2-->node4
        node3-->node5
        node4-->node1
        node4-->node6
        node5-->node1
        node5-->node7
        node6-->node10
        node7-->node1
        node7-->node10
        node8-->node4
        node8-->node5
        node10-->node9
        node10-->node11

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.