Newer
Older
rnsr-geo-ml-dvc / 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).

```bash
$ 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

```bash
$ 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:

```bash
dvc config core.autostage true
```

### Stages

Pour lancer un _pipeline_ en dehors d'une expérience (composé de plusieurs
_stages_), 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`.

```bash
$ 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](plots_diff.png)

C'est [une page HTML](dvc_plots/index.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](https://marketplace.visualstudio.com/items?itemName=bierner.markdown-mermaid)):

```mermaid
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`:

```mermaid
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](https://fr.wikipedia.org/wiki/Graphe_orient%C3%A9_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.

### Experiments

Les _experiments_ sont un moyen de nommer et de retrouver des exécutions du
_pipeline_.

On en crée une en lançant `dvc exp run`.

```bash
$ dvc exp run
'data/addresses-40-cnrs-rnsr-big-classes-train.txt.dvc' didn't change, skipping                                                                       
'data/netscity-ville-aire-uniq.tsv.dvc' didn't change, skipping                                                                                       
Stage 'prepare@train' didn't change, skipping
Stage 'extract-areas@train' didn't change, skipping
'data/addresses-40-cnrs-rnsr-big-classes-test.txt.dvc' didn't change, skipping
Stage 'prepare@test' didn't change, skipping
Stage 'split' didn't change, skipping                                                                                                                 
Stage 'extract-areas@test' didn't change, skipping
Stage 'train' didn't change, skipping                                                                                                                 
Stage 'evaluate' didn't change, skipping                                                                                                              
                                                                      
Reproduced experiment(s): exp-44136
Experiment results have been applied to your workspace.

To promote an experiment to a Git branch run:

        dvc exp branch <exp> <branch>

```