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.
Help ClickHouse documentation by editing this page
在ClickHouse中应用Catboost模型
CatBoost 是一个由开发的开源免费机器学习库。
通过这篇指导,您将学会如何用SQL建模,使用ClickHouse预先训练好的模型来推断数据。
在ClickHouse中应用CatBoost模型的一般过程:
- 创建数据表.
- .
- 将CatBoost集成到ClickHouse中 (可跳过)。
- .
有关训练CatBoost模型的详细信息,请参阅 训练和模型应用.
请先安装 。
注
Docker 是一个软件平台,用户可以用来创建独立于其余系统、集成CatBoost和ClickHouse的容器。
在应用CatBoost模型之前:
1. 从容器仓库拉取docker映像 () :
此Docker映像包含运行CatBoost和ClickHouse所需的所有内容:代码、运行环境、库、环境变量和配置文件。
2. 确保已成功拉取Docker映像:
REPOSITORY TAG IMAGE ID CREATED SIZE
yandex/tutorial-catboost-clickhouse latest 622e4d17945b 22 hours ago 1.37GB
3. 基于此映像启动一个Docker容器:
$ docker run -it -p 8888:8888 yandex/tutorial-catboost-clickhouse
1. 在交互模式下启动ClickHouse控制台客户端:
$ clickhouse client
注
ClickHouse服务器已经在Docker容器内运行。
2. 使用以下命令创建表:
3. 从ClickHouse控制台客户端退出:
:) exit
插入数据:
1. 运行以下命令:
$ clickhouse client --host 127.0.0.1 --query 'INSERT INTO amazon_train FORMAT CSVWithNames' < ~/amazon/train.csv
2. 在交互模式下启动ClickHouse控制台客户端:
$ clickhouse client
3. 确保数据已上传:
注
可跳过。 Docker映像包含运行CatBoost和ClickHouse所需的所有内容。
CatBoost集成到ClickHouse步骤:
1. 构建评估库。
评估CatBoost模型的最快方法是编译 libcatboostmodel.<so|dll|dylib>
库文件.
2. 创建一个新目录(位置与名称可随意指定), 如 data
并将创建的库文件放入其中。 Docker映像已经包含了库 data/libcatboostmodel.so
.
3. 创建一个新目录来放配置模型, 如 models
.
4. 创建一个模型配置文件,如 models/amazon_model.xml
.
5. 描述模型配置:
<models>
<model>
<!-- Model type. Now catboost only. -->
<!-- Model name. -->
<name>amazon</name>
<!-- Path to trained model. -->
<!-- Update interval. -->
<lifetime>0</lifetime>
</model>
</models>
6. 将CatBoost库文件的路径和模型配置添加到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>
测试模型是否正常,运行ClickHouse客户端 $ clickhouse client
.
让我们确保模型能正常工作:
:) SELECT
modelEvaluate('amazon',
RESOURCE,
MGR_ID,
ROLE_ROLLUP_1,
ROLE_ROLLUP_2,
ROLE_DEPTNAME,
ROLE_TITLE,
ROLE_FAMILY_DESC,
ROLE_CODE) > 0 AS prediction,
FROM amazon_train
LIMIT 10
注
函数 modelEvaluate 返回带有多类模型的每类原始预测的元组。
执行预测:
注
查看函数说明 。
让我们计算样本的LogLoss:
:) 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
注