ClickHouse/docs/fr/guides/apply_catboost_model.md
2020-03-30 15:48:55 +03:00

7.3 KiB

machine_translated
true

Application D'un modèle Catboost dans ClickHouse

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

Avec cette instruction, vous apprendrez à appliquer des modèles pré-formés dans ClickHouse en exécutant l'infé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 L'inférence du modèle à partir de SQL.

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

Préalable

Si vous n'avez pas le Docker pourtant, l'installer.

!!! 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 d'appliquer 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 d'environnement et fichiers de configuration.

2. Assurez-vous que l'image 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 l'exemple de formation:

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

$ clickhouse client

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

2. Créer la table à l'aide 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. L'image 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 d'informations sur la création de la bibliothèque, voir Documentation CatBoost.

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

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

4. Créez un fichier de configuration de modèle avec n'importe 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 D'accè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 L'infé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 d'infos 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 d'infos sur avg() et journal() fonction.

Article Original