7.3 KiB
machine_translated |
---|
true |
Aplicación de un modelo Catboost en ClickHouse
CatBoost es una biblioteca de impulso de gradiente libre y de código abierto desarrollada en Yandex para el aprendizaje automático.
Con esta instrucción, aprenderá a aplicar modelos preentrenados en ClickHouse ejecutando la inferencia de modelos desde SQL.
Para aplicar un modelo CatBoost en ClickHouse:
- Crear una tabla.
- Insertar los datos en la tabla.
- Integrar CatBoost en ClickHouse (Paso opcional).
- Ejecute la inferencia del modelo desde SQL.
Para obtener más información sobre la formación de modelos CatBoost, consulte Entrenamiento y aplicación de modelos.
Requisito
Si usted no tiene el Acoplador sin embargo, instalarlo.
!!! note "Nota" Acoplador es una plataforma de software que le permite crear contenedores que aíslan una instalación de CatBoost y ClickHouse del resto del sistema.
Antes de aplicar un modelo CatBoost:
1. Neumático de la Imagen de acoplador del registro:
$ docker pull yandex/tutorial-catboost-clickhouse
Esta imagen de Docker contiene todo lo que necesita para ejecutar CatBoost y ClickHouse: código, tiempo de ejecución, bibliotecas, variables de entorno y archivos de configuración.
2. Asegúrese de que la imagen de Docker se haya extraído correctamente:
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
yandex/tutorial-catboost-clickhouse latest 622e4d17945b 22 hours ago 1.37GB
3. Inicie un contenedor Docker basado en esta imagen:
$ docker run -it -p 8888:8888 yandex/tutorial-catboost-clickhouse
1. Crear una tabla
Para crear una tabla ClickHouse para el ejemplo de capacitación:
1. Inicie el cliente de consola ClickHouse en el modo interactivo:
$ clickhouse client
!!! note "Nota" El servidor ClickHouse ya se está ejecutando dentro del contenedor Docker.
2. Cree la tabla usando el comando:
:) 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. Salir del cliente de la consola ClickHouse:
:) exit
2. Insertar los datos en la tabla
Para insertar los datos:
1. Ejecute el siguiente comando:
$ clickhouse client --host 127.0.0.1 --query 'INSERT INTO amazon_train FORMAT CSVWithNames' < ~/amazon/train.csv
2. Inicie el cliente de consola ClickHouse en el modo interactivo:
$ clickhouse client
3. Asegúrese de que los datos se hayan cargado:
:) SELECT count() FROM amazon_train
SELECT count()
FROM amazon_train
+-count()-+
| 65538 |
+---------+
3. Integrar CatBoost en ClickHouse
!!! note "Nota" Paso opcional. La imagen de Docker contiene todo lo que necesita para ejecutar CatBoost y ClickHouse.
Para integrar CatBoost en ClickHouse:
1. Construir la biblioteca de evaluación.
La forma más rápida de evaluar un modelo CatBoost es compilar libcatboostmodel.<so|dll|dylib>
biblioteca. Para obtener más información acerca de cómo construir la biblioteca, vea Documentación de CatBoost.
2. Cree un nuevo directorio en cualquier lugar y con cualquier nombre, por ejemplo, data
y poner la biblioteca creada en ella. La imagen de Docker ya contiene la biblioteca data/libcatboostmodel.so
.
3. Cree un nuevo directorio para el modelo de configuración en cualquier lugar y con cualquier nombre, por ejemplo, models
.
4. Cree un archivo de configuración de modelo con cualquier nombre, por ejemplo, models/amazon_model.xml
.
5. Describir la configuración del modelo:
<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. Agregue la ruta de acceso a CatBoost y la configuración del modelo a la configuración 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. Ejecute la inferencia del modelo desde SQL
Para el modelo de prueba, ejecute el cliente ClickHouse $ clickhouse client
.
Vamos a asegurarnos de que el modelo está funcionando:
:) 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 "Nota" Función modelEvaluar devuelve tupla con predicciones sin procesar por clase para modelos multiclase.
Vamos a predecir la probabilidad:
:) 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 "Nota" Más información sobre exp() función.
Vamos a calcular LogLoss en la muestra:
:) 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 "Nota" Más información sobre avg() y Registro() función.