Clickhouse'da bir Catboost modeli uygulamak 

CatBoost geliştirilen ücretsiz ve açık kaynak kodlu bir GRA anddi libraryent kütüphan aesidir. Yandex makine öğrenimi için.

Bu Talimatla, Sql'den model çıkarımı çalıştırarak Clickhouse'da önceden eğitilmiş modelleri uygulamayı öğreneceksiniz.

Clickhouse'da bir CatBoost modeli uygulamak için:

  1. Tablo oluşturma.
  2. Verileri tabloya ekleme.
  3. Catboost'u Clickhouse'a entegre edin (İsteğe bağlı adım).
  4. SQL'DEN Model Çıkarımını çalıştırın.

Eğitim CatBoost modelleri hakkında daha fazla bilgi için bkz Eğitim ve uygulama modelleri.

Önkoşullar 

Eğer yoksa Docker yine de yükleyin.

Bir CatBoost modeli uygulamadan önce:

1. P pullull the Docker görüntü kayıt defter theinden:

$ docker pull yandex/tutorial-catboost-clickhouse

Kod, çalışma zamanı, kütüphaneler, ortam değişkenleri ve Yapılandırma Dosyaları: bu Docker görüntü catboost ve ClickHouse çalıştırmak için gereken her şeyi içerir.

2. Docker görüntüsünün başarıyla çekildiğinden emin olun:

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

3. Bu görüntüye dayalı bir Docker kabı başlatın:

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

1. Tablo oluşturma 

Eğitim örneği için bir ClickHouse tablosu oluşturmak için:

1. Etkileşimli modda ClickHouse konsol istemcisini başlatın:

$ clickhouse client

2. Komutu kullanarak tablo oluşturun:

:) 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. ClickHouse konsol istemcisinden çıkış:

:) exit

2. Verileri tabloya ekleme 

Verileri eklemek için:

1. Aşağıdaki komutu çalıştırın:

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

2. Etkileşimli modda ClickHouse konsol istemcisini başlatın:

$ clickhouse client

3. Verilerin yüklendiğinden emin olun:

:) SELECT count() FROM amazon_train

SELECT count()
FROM amazon_train

+-count()-+
|   65538 |
+-------+

3. Catboost'u Clickhouse'a entegre edin 

Catboost'u Clickhouse'a entegre etmek için:

1. Değerlendirme kitaplığı oluşturun.

Bir CatBoost modelini değerlendirmenin en hızlı yolu derlemedir libcatboostmodel.<so|dll|dylib> kitaplık. Kitaplığın nasıl oluşturulacağı hakkında daha fazla bilgi için bkz. CatBoost belgeleri.

2. Herhangi bir yerde ve herhangi bir adla yeni bir dizin oluşturun, örneğin, data ve oluşturulan kütüphaneyi içine koyun. Docker görüntüsü zaten kütüphaneyi içeriyor data/libcatboostmodel.so.

3. Yapılandırma modeli için herhangi bir yerde ve herhangi bir adla yeni bir dizin oluşturun, örneğin, models.

4. Örneğin, herhangi bir ada sahip bir model yapılandırma dosyası oluşturun, models/amazon_model.xml.

5. Model yapılandırmasını açıklayın:

<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. Catboost yolunu ve model yapılandırmasını ClickHouse yapılandırmasına ekleyin:

<!-- 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. SQL'DEN Model Çıkarımını çalıştırın 

Test modeli için ClickHouse istemcisini çalıştırın $ clickhouse client.

Modelin çalıştığından emin olalım:

:) 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

Olasılığı tahmin edelim:

:) 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

Örnek üzerinde LogLoss hesaplayalım:

:) 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
)

Orijinal makale

Rating: 2.9 - 18 votes

Was this content helpful?
★★★☆☆