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:
- Créer une Table.
- Insérez les données dans la Table.
- Intégrer CatBoost dans ClickHouse (Étape facultative).
- 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.