Help wanted!

The following content of this documentation page has been machine-translated. But unlike other websites, it is not done on the fly. This translated text lives on GitHub repository alongside main ClickHouse codebase and waits for fellow native speakers to make it more human-readable. You can also use the original English version as a reference.

Help ClickHouse documentation by editing this page

在ClickHouse中应用Catboost模型

CatBoost 是一个自由和开源的梯度提升库开发 Yandex 用于机器学习。

通过此指令,您将学习如何通过从SQL运行模型推理在ClickHouse中应用预先训练好的模型。

在ClickHouse中应用CatBoost模型:

  1. 创建表.
  2. 将数据插入到表中.
  3. 将CatBoost集成到ClickHouse中 (可选步骤)。
  4. 从SQL运行模型推理.

有关训练CatBoost模型的详细信息,请参阅 培训和应用模型.

先决条件

如果你没有 Docker 然而,安装它。

Docker 是一个软件平台,允许您创建容器,将CatBoost和ClickHouse安装与系统的其余部分隔离。

在应用CatBoost模型之前:

1.码头窗口映像 从注册表:

  1. $ docker pull yandex/tutorial-catboost-clickhouse

此Docker映像包含运行CatBoost和ClickHouse所需的所有内容:代码、运行时、库、环境变量和配置文件。

2. 确保已成功拉取Docker映像:

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

3. 基于此映像启动一个Docker容器:

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

1. 创建表

为训练样本创建ClickHouse表:

1. 在交互模式下启动ClickHouse控制台客户端:

  1. $ clickhouse client

ClickHouse服务器已经在Docker容器内运行。

2. 使用以下命令创建表:

  1. :) CREATE TABLE amazon_train
  2. (
  3. date Date MATERIALIZED today(),
  4. ACTION UInt8,
  5. RESOURCE UInt32,
  6. MGR_ID UInt32,
  7. ROLE_ROLLUP_1 UInt32,
  8. ROLE_ROLLUP_2 UInt32,
  9. ROLE_DEPTNAME UInt32,
  10. ROLE_TITLE UInt32,
  11. ROLE_FAMILY_DESC UInt32,
  12. ROLE_FAMILY UInt32,
  13. ROLE_CODE UInt32
  14. )
  15. ENGINE = MergeTree ORDER BY date

3. 从ClickHouse控制台客户端退出:

  1. :) exit

2. 将数据插入到表中

插入数据:

1. 运行以下命令:

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

2. 在交互模式下启动ClickHouse控制台客户端:

  1. $ clickhouse client

3. 确保数据已上传:

  1. :) SELECT count() FROM amazon_train
  2. SELECT count()
  3. FROM amazon_train
  4. +-count()-+
  5. | 65538 |
  6. +-------+

3. 将CatBoost集成到ClickHouse中

可选步骤。 Docker映像包含运行CatBoost和ClickHouse所需的所有内容。

CatBoost集成到ClickHouse步骤:

1. 构建评估库。

评估CatBoost模型的最快方法是编译 libcatboostmodel.<so|dll|dylib> 图书馆. 有关如何构建库的详细信息,请参阅 CatBoost文件.

2. 例如,在任何地方和任何名称创建一个新目录, data 并将创建的库放入其中。 Docker映像已经包含了库 data/libcatboostmodel.so.

3. 例如,在任何地方和任何名称为config model创建一个新目录, models.

4. 创建具有任意名称的模型配置文件,例如, models/amazon_model.xml.

5. 描述模型配置:

  1. <models>
  2. <model>
  3. <!-- Model type. Now catboost only. -->
  4. <type>catboost</type>
  5. <!-- Model name. -->
  6. <name>amazon</name>
  7. <!-- Path to trained model. -->
  8. <path>/home/catboost/tutorial/catboost_model.bin</path>
  9. <!-- Update interval. -->
  10. <lifetime>0</lifetime>
  11. </model>
  12. </models>

6. 将CatBoost的路径和模型配置添加到ClickHouse配置:

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

4. 从SQL运行模型推理

对于测试模型,运行ClickHouse客户端 $ clickhouse client.

让我们确保模型正常工作:

  1. :) SELECT
  2. modelEvaluate('amazon',
  3. RESOURCE,
  4. MGR_ID,
  5. ROLE_ROLLUP_1,
  6. ROLE_ROLLUP_2,
  7. ROLE_DEPTNAME,
  8. ROLE_TITLE,
  9. ROLE_FAMILY_DESC,
  10. ROLE_FAMILY,
  11. ROLE_CODE) > 0 AS prediction,
  12. ACTION AS target
  13. FROM amazon_train
  14. LIMIT 10

功能 模型值 返回带有多类模型的每类原始预测的元组。

让我们预测一下:

  1. :) SELECT
  2. modelEvaluate('amazon',
  3. RESOURCE,
  4. MGR_ID,
  5. ROLE_ROLLUP_1,
  6. ROLE_ROLLUP_2,
  7. ROLE_DEPTNAME,
  8. ROLE_TITLE,
  9. ROLE_FAMILY_DESC,
  10. ROLE_FAMILY,
  11. ROLE_CODE) AS prediction,
  12. 1. / (1 + exp(-prediction)) AS probability,
  13. ACTION AS target
  14. FROM amazon_train
  15. LIMIT 10

更多信息 exp() 功能。

让我们计算样本的LogLoss:

  1. :) SELECT -avg(tg * log(prob) + (1 - tg) * log(1 - prob)) AS logloss
  2. FROM
  3. (
  4. SELECT
  5. modelEvaluate('amazon',
  6. RESOURCE,
  7. MGR_ID,
  8. ROLE_ROLLUP_1,
  9. ROLE_ROLLUP_2,
  10. ROLE_DEPTNAME,
  11. ROLE_TITLE,
  12. ROLE_FAMILY_DESC,
  13. ROLE_FAMILY,
  14. ROLE_CODE) AS prediction,
  15. 1. / (1. + exp(-prediction)) AS prob,
  16. ACTION AS tg
  17. FROM amazon_train
  18. )

更多信息 avg()日志() 功能。

原始文章