ClickHouse/docs/fr/guides/apply-catboost-model.md
Ivan Blinkov d91c97d15d
[docs] replace underscores with hyphens (#10606)
* Replace underscores with hyphens

* remove temporary code

* fix style check

* fix collapse
2020-04-30 21:19:18 +03:00

7.5 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true f865c9653f 41 Application Des Modèles CatBoost

Application Dun modèle Catboost Dans ClickHouse

CatBoost est une bibliothèque de dynamisation de gradient libre et open-source développée à Yandex pour lapprentissage automatique.

Avec cette instruction, vous apprendrez à appliquer des modèles pré-formés dans ClickHouse en exécutant linférence de modèle à partir de SQL.

Pour appliquer un modèle CatBoost dans ClickHouse:

  1. Créer une Table.
  2. Insérez les données dans la Table.
  3. Intégrer CatBoost dans ClickHouse (Étape facultative).
  4. Exécutez Linférence du modèle à partir de SQL.

Pour plus dinformations sur la formation des modèles CatBoost, voir Formation et application de modèles.

Préalable

Si vous navez pas le Docker pourtant, linstaller.

!!! note "Note" Docker est une plate-forme logicielle qui vous permet de créer des conteneurs qui isolent une installation CatBoost et ClickHouse du reste du système.

Avant dappliquer un modèle CatBoost:

1. Tirez la Docker image à partir du registre:

$ docker pull yandex/tutorial-catboost-clickhouse

Cette image Docker contient tout ce dont vous avez besoin pour exécuter CatBoost et ClickHouse: code, runtime, bibliothèques, variables denvironnement et fichiers de configuration.

2. Assurez-vous que limage Docker a été tirée avec succès:

$ docker image ls
REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
yandex/tutorial-catboost-clickhouse   latest              622e4d17945b        22 hours ago        1.37GB

3. Démarrer un conteneur Docker basé sur cette image:

$ docker run -it -p 8888:8888 yandex/tutorial-catboost-clickhouse

1. Créer une Table

Pour créer une table ClickHouse pour lexemple de formation:

1. Démarrez clickhouse console client en mode interactif:

$ clickhouse client

!!! note "Note" Le serveur ClickHouse est déjà en cours dexécution dans le conteneur Docker.

2. Créer la table à laide de la commande:

:) CREATE TABLE amazon_train
(
    date Date MATERIALIZED today(),
    ACTION UInt8,
    RESOURCE UInt32,
    MGR_ID UInt32,
    ROLE_ROLLUP_1 UInt32,
    ROLE_ROLLUP_2 UInt32,
    ROLE_DEPTNAME UInt32,
    ROLE_TITLE UInt32,
    ROLE_FAMILY_DESC UInt32,
    ROLE_FAMILY UInt32,
    ROLE_CODE UInt32
)
ENGINE = MergeTree ORDER BY date

3. Quitter le client de la console ClickHouse:

:) exit

2. Insérez les données dans la Table

Pour insérer les données:

1. Exécutez la commande suivante:

$ clickhouse client --host 127.0.0.1 --query 'INSERT INTO amazon_train FORMAT CSVWithNames' < ~/amazon/train.csv

2. Démarrez clickhouse console client en mode interactif:

$ clickhouse client

3. Assurez-vous que les données ont été téléchargées:

:) SELECT count() FROM amazon_train

SELECT count()
FROM amazon_train

+-count()-+
|   65538 |
+-------+

3. Intégrer CatBoost dans ClickHouse

!!! note "Note" Étape facultative. Limage Docker contient tout ce dont vous avez besoin pour exécuter CatBoost et ClickHouse.

Pour intégrer CatBoost dans ClickHouse:

1. Construire la bibliothèque dévaluation.

Le moyen le plus rapide dévaluer un modèle CatBoost est la compilation libcatboostmodel.<so|dll|dylib> bibliothèque. Pour plus dinformations sur la création de la bibliothèque, voir Documentation CatBoost.

2. Créez un nouveau répertoire nimporte où et avec nimporte quel nom, par exemple, data et mettez la bibliothèque créée dedans. Limage Docker contient déjà la bibliothèque data/libcatboostmodel.so.

3. Créez un nouveau répertoire pour le modèle de configuration nimporte où et avec nimporte quel nom, par exemple, models.

4. Créez un fichier de configuration de modèle avec nimporte quel nom, par exemple, models/amazon_model.xml.

5. Décrire la configuration du modèle:

<models>
    <model>
        <!-- Model type. Now catboost only. -->
        <type>catboost</type>
        <!-- Model name. -->
        <name>amazon</name>
        <!-- Path to trained model. -->
        <path>/home/catboost/tutorial/catboost_model.bin</path>
        <!-- Update interval. -->
        <lifetime>0</lifetime>
    </model>
</models>

6. Ajoutez le chemin Daccès à CatBoost et la configuration du modèle à la configuration de ClickHouse:

<!-- File etc/clickhouse-server/config.d/models_config.xml. -->
<catboost_dynamic_library_path>/home/catboost/data/libcatboostmodel.so</catboost_dynamic_library_path>
<models_config>/home/catboost/models/*_model.xml</models_config>

4. Exécutez Linférence du modèle à partir de SQL

Pour le modèle de test exécutez le client ClickHouse $ clickhouse client.

Assurons nous que le modèle fonctionne:

:) SELECT
    modelEvaluate('amazon',
                RESOURCE,
                MGR_ID,
                ROLE_ROLLUP_1,
                ROLE_ROLLUP_2,
                ROLE_DEPTNAME,
                ROLE_TITLE,
                ROLE_FAMILY_DESC,
                ROLE_FAMILY,
                ROLE_CODE) > 0 AS prediction,
    ACTION AS target
FROM amazon_train
LIMIT 10

!!! note "Note" Fonction modelEvaluate retourne tuple avec des prédictions brutes par classe pour les modèles multiclasse.

Prédisons la probabilité:

:) SELECT
    modelEvaluate('amazon',
                RESOURCE,
                MGR_ID,
                ROLE_ROLLUP_1,
                ROLE_ROLLUP_2,
                ROLE_DEPTNAME,
                ROLE_TITLE,
                ROLE_FAMILY_DESC,
                ROLE_FAMILY,
                ROLE_CODE) AS prediction,
    1. / (1 + exp(-prediction)) AS probability,
    ACTION AS target
FROM amazon_train
LIMIT 10

!!! note "Note" Plus dinfos sur exp() fonction.

Calculons LogLoss sur léchantillon:

:) SELECT -avg(tg * log(prob) + (1 - tg) * log(1 - prob)) AS logloss
FROM
(
    SELECT
        modelEvaluate('amazon',
                    RESOURCE,
                    MGR_ID,
                    ROLE_ROLLUP_1,
                    ROLE_ROLLUP_2,
                    ROLE_DEPTNAME,
                    ROLE_TITLE,
                    ROLE_FAMILY_DESC,
                    ROLE_FAMILY,
                    ROLE_CODE) AS prediction,
        1. / (1. + exp(-prediction)) AS prob,
        ACTION AS tg
    FROM amazon_train
)

!!! note "Note" Plus dinfos sur avg() et journal() fonction.

Article Original