當前位置:
首頁 > 最新 > ClickHouse如何結合自家的GNDT演算法庫CatBoost來做機器學習

ClickHouse如何結合自家的GNDT演算法庫CatBoost來做機器學習

作者|Altinity

譯者|Liu Zhiyong

編輯|Cai Fangfang

AI 前線導讀:ClickHouse 是俄羅斯第一大搜索引擎 Yandex 開發的列式儲存資料庫。據測試報告,這個列式儲存資料庫的性能大幅超越了很多商業 MPP 資料庫軟體,比如 Vertica(HP Vertica 成為 MPP 列式存儲商業資料庫的高性能代表,Facebook 就購買了 Vertica 數據用於用戶行為分析。)、InfiniDB。2016 年 6 月 15 日,ClickHouse 由 Yandex 開源。2017 年 7 月 21 日,Yandex 開源了 CatBoost,這是一種支持類別特徵,基於梯度提升決策樹的機器學習方法。它是 MartixNet 演算法的繼承者。它能夠在數據稀疏的情況下教機器學習。特別是在沒有像視頻、文本、圖像這類感官性數據時,CatBoost 也能根據事務性數據或歷史數據進行操作。CatBoost 採用了 Apache 許可證,它相較其他框架的最大優點是測試精準度高,而且只需少量調試,且性能良好。今天我們就來看看 Altinity 前幾日撰寫的教程 [^5],給我們演示了 ClickHouse 如何結合自家開源的 GBDT 演算法庫 CatBoost 來做機器學習。Altinity 是一家 ClickHouse 的服務供應商。

更多乾貨內容請關注微信公眾號「AI 前線」,(ID:ai-front)

ClickHouse 非常靈活,可用於各種用例。現在最有意思的技術領域之一就是機器學習,而 ClickHouse 非常適合作為非常快速的數據源。幾個月前,ClickHouse 團隊實現了對機器學習演算法的支持,這使得在 ClickHouse 數據上運行機器演算法變得更容易、更快捷。他們從開源的 Yandex CatBoost^0 演算法開始,但它可以在未來擴展到其他演算法。在本文中,我們發布了關於如何使用 ClickHouse 來運行 CatBoost 模型的教程。

CatBoost

CatBoost 是最先進的開源梯度提升決策樹演算法庫。

CatBoost 是由 Yandex 研究人員和工程師開發的,在公司內部廣泛應用於排列任務、預測和提出建議。Yandex 稱其是通用的,可以應用於廣泛的領域和各種各樣的問題。

CatBoost 與傳統的梯度提升決策樹有什麼不同?

如需獲取更詳細的信息,請參閱 TechCrunch 發布的文章《Yandex 開源 CatBoost》[^1]。

CatBoost 結合 ClickHouse

現在讓我們看看 CatBoost 如何結合 ClickHouse。本文其餘部分轉載自 GitHub 上的 clickhouse-presentations 項目提供的教程 ^6,ClickHouse 方面,由 Yandex 工程師 Nikolai Kochetov 負責此項目。那麼讓我們開始吧。

啟動容器

本教程使用 Docker 容器。啟動容器的命令如下:

結果,您可以通過 http://localhost:8888 來訪問 Jupyter Notebook 中的 CatBoost 和 ClickHouse 教程:

VirtualBox 映像

可以使用 VirtualBox 映像 ^3 替代 Docker 容器。在啟動後,可以在 http://localhost:8888 上使用相同的材料。

命令提示符

您需要使用命令提示符才能使用 ClickHouse。您可以使用 Docker 容器或 VirtualBox 映像中的命令提示符。另一個選項是使用 jupyter notebook 命令提示符。打開主頁並選擇 NewTerminal。所有其他命令都可以直接複製到終端窗口中。

使用 ClickHouse

ClickHouse 支持多種不同的介面,包括用於流行編程語言的 HTTP,JDBC,ODBC 和許多第三方庫。但是,本教程是通過 TCP 使用本地客戶端。

命令行界面

ClickHouse 伺服器已經在 Docker 容器中運行。要連接到伺服器,請鍵入以下命令:

結果,ClickHouse 顯示一個輸入的邀請:

嘗試寫一個「Hello,world!」查詢:

如果一切正常,那就進入下一個步驟。

使用 ClickHouse 作為計算器

運行簡單的計算查詢:

system.numbers 表有一個單獨的列,稱為 number。該列存儲從 0 開始的整數。我們來看前 10 個:

現在計算前 100 個整數的平方和:

最後一個例子是使用 system.numbers 表中的子查詢創建的。首先選擇數字從 0 到 100 的單數列,然後計算平方,並使用求和聚合函數計算平方和。

創建一個表並插入數據

為訓練樣本創建一個表格:

為了將數據插入到 ClickHouse 中,您需要使用 Linux 命令行。使用 Crtl+C 來退出 ClickHouse(或者,鍵入「quit」、「logout」、「exit」、「quit」、「q」或等價命令)。然後運行以下命令:

檢查數據是否被插入:

計算 ACTION 列的平均值:

使用已訓練的模型

用模型配置創建一個配置文件:

ClickHouse 配置文件應該已經有這樣的設置:

要驗證一下,運行以下命令:

讓我們確保模型正在工作。計算表中前 10 行的預測值:

現在我們來預測一下概率:

計算樣本上的 LogLoss:

與 CatBoost 集成

我們不需要為測試樣本創建一個表,而是使用 catBoostPool 表函數。列描述在 /home/catboost/tutorial/amazon/test.cd 文件中,它看起來像這樣:

看看從 catBoostPool 返回的臨時表結構:

該表包含了列描述文件中的每個特性和別名的列。計算前 10 行的概率:

在從 catBoostPool 讀取數據時,可以使用 * 代替 modelEvaluate 的參數。計算測試樣本的答案並將結果寫入文件:

在 Kaggle[^4] 上提交結果(您可以使用 jupyter notebook 界面從 Docker 容器中下載 submission.tsv)看看你在排行榜上排名如何?

[0]:CatBoost

https://tech.yandex.com/catboost/

[2]:CatBoost is an open-source gradient boosting library with categorical features support*

https://catboost.yandex/#benchmark

[1]:Yandex open sources CatBoost, a gradient boosting machine learning library

https://techcrunch.com/2017/07/18/yandex-open-sources-catboost-a-gradient-boosting-machine-learning-librar/

https://yadi.sk/d/htNTv2VK3Q9RQ7

[4]:Amazon.com - Employee Access Challenge

https://www.kaggle.com/c/amazon-employee-access-challenge/leaderboard

[5]:ClickHouse for Machine Learning

https://www.altinity.com/blog/2018/1/18/clickhouse-for-machine-learning

https://github.com/yandex/clickhouse-presentations/blob/master/tutorials/catboost_with_clickhouse_en.md

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器學習 的精彩文章:

Kaggle推出免費線上課程,覆蓋機器學習、深度學習等四門課

TAG:機器學習 |