Opsi Penanganan Fitur Catboost (pengaturan CTR)?

11

Saya bekerja dengan dataset dengan sejumlah besar fitur kategorikal (> 80%) memprediksi variabel target kontinu (yaitu Regresi). Saya telah membaca sedikit tentang cara menangani fitur-fitur kategorikal. Dan belajar bahwa pengkodean satu-panas yang telah saya gunakan di masa lalu adalah ide yang sangat buruk terutama ketika datang ke banyak fitur kategorikal dengan banyak tingkatan (baca posting ini , dan ini ).

Walaupun saya telah menemukan metode seperti pengkodean berbasis target (smoothing) dari fitur kategorikal yang sering didasarkan pada rata-rata nilai target untuk setiap fitur, mungkin ini post / kernel di Kaggle. Namun saya masih berjuang untuk menemukan cara yang lebih konkret sampai saya menemukan CatBoost sebagai sumber terbuka yang meningkatkan gradien pada pohon keputusan yang dirilis tahun lalu oleh kelompok Yandex. Mereka tampaknya menawarkan opsi penghitungan statistik tambahan untuk fitur-fitur kategorikal yang mungkin jauh lebih efisien daripada penyandian atau penghalusan satu panas yang sederhana.

Masalahnya adalah dokumentasi tidak membantu bagaimana mengatur pengaturan CTR . Saya telah mencoba berbagai cara tetapi tidak berhasil. Doc mengatakan pengaturan CTR sebagai simple_ctr , untuk diberikan sebagai ( bagian pengaturan CTR ):

['CtrType[:TargetBorderCount=BorderCount][:TargetBorderType=BorderType][:CtrBorderCount=Count][:CtrBorderType=Type][:Prior=num_1/denum_1]..[:Prior=num_N/denum_N]',
 'CtrType[:TargetBorderCount=BorderCount][:TargetBorderType=BorderType][:CtrBorderCount=Count][:CtrBorderType=Type][:Prior=num_1/denum_1]..[:Prior=num_N/denum_N]',
  ...]

Berikut ini contoh super sederhana, datanya terlihat seperti ini:

import pandas as pd
import catboost
data = [{'profit': '342','country': 'holland','account': 'Jones LLC', 'saving': 150, 'debt': -60, 'age': 28},
         {'profit': '875','country': 'germany','account': 'Alpha Co',  'saving': 200, 'debt': -10, 'age': 42},
         {'profit': '127','country': 'italy','account': 'Blue Inc',  'saving': 50,  'debt': -300,  'age': 38 }]
df = pd.DataFrame(data)

Berikut adalah Regulator Catboost sederhana:

X_train = df.drop(['profit'],axis=1)
Y_train = df['profit']
categorical_features_indices = [0,2]

train_pool = catboost.Pool(X_train, Y_train, cat_features=categorical_features_indices)

model = catboost.CatBoostRegressor(
    depth=3,
    iterations=5,
    eval_metric='RMSE',
    simple_ctr=None)

model.fit(train_pool);

The simple_ctr , salah satu pengaturan CTR, masalahnya !! Sangat disayangkan karena sepertinya paket menawarkan berbagai metode, sejauh ini tidak ada cara untuk mengaksesnya.

UPDATE 9 Agustus 2018: Beberapa hari yang lalu saya mengangkat masalah ini ke pengembang Catboost, lihat di sini , dan mereka membuka tiket untuk itu untuk memberikan tutorial.

TwinPenguins
sumber
Berikut adalah deskripsi tentang catboost pada kategori kategoris: tech.yandex.com/catboost/doc/dg/concepts/…
DiveIntoML
Ya, saya tahu tautannya; ini memberikan deskripsi teoretis terperinci. Namun tidak cukup deskripsi tentang bagaimana menggunakannya diberikan; Maksud saya petunjuk penggunaan praktis. Saya sudah mencobanya beberapa bulan lalu dan itu tidak langsung.
TwinPenguins
1
Saat ini saya hanya menggunakan param one_hot_max_size dan pemahaman saya adalah bahwa segala sesuatu yang bukan salah satu yang dikodekan panas, akan dikodekan menggunakan target berarti memperluas pengkodean. Saya menantikan dokumentasi resmi tambahan untuk memahami pengaturan ctr lebih baik dan bagaimana saya bisa bermain dengannya.
Garima Jain

Jawaban:

2

Saya menemukan bahwa untuk mengatur ctrparameter dan semua komponen yang harus dilewati daftar string, setiap string harus berisi ctrTypedan salah satu komponennya:

  • Kata pertama dari string harus berupa ctrTypemisalnya Borders:(klik di sini untuk parameter catboost)
  • Maka satu komponen ctrTypeharus mengikuti. Sebagai contoh TargetBorderType=5.
  • Semuanya bersama 'Borders:TargetBorderType=5'.
  • Ulangi prosedur untuk mengatur komponen lain dan menambahkan string baru ke daftar.

Contoh dengan dua komponen yang ditetapkan:

simple_ctr = ['Borders:TargetBorderType=Uniform', 'Borders:TargetBorderCount=50']
Giannis Krilis
sumber
Berhasil, terima kasih atas penjelasannya, dan maaf telah meluangkan waktu lama untuk kembali memeriksanya, terlintas di benak saya.
TwinPenguins
1

Apakah Anda mencoba menggunakan format yang disediakan seperti di bawah ini:

['CtrType[:TargetBorderCount=BorderCount][:TargetBorderType=BorderType][:CtrBorderCount=Count][:CtrBorderType=Type][:Prior=num_1/denum_1]..[:Prior=num_N/denum_N]'

['BinarizedTargetMeanValue[:TargetBorderCount=1][:TargetBorderType=Uniform][:CtrBorderCount=5][:CtrBorderType=Uniform][:Prior=1]']
Tertarik_Program
sumber
Apakah ini jawaban? Rasanya lebih seperti pertanyaan / komentar.
Stephen Rauch
@Interested_Programmer: Tidak berfungsi, coba sendiri dalam contoh yang baru saja saya berikan. Sudahkah Anda mengujinya atau Anda hanya menemukannya di dokumentasi?
TwinPenguins
Saya minta maaf @StephenRauch. Saya tidak dapat menjalankan notebook saya tetapi ternyata dapat digunakan pada fungsi lain untuk mengikuti format. Kalau dipikir-pikir, saya harus menambahkannya sebagai komentar. Saya juga menunggu para pembuat untuk mengeluarkan tutorial baru.
Tertarik_Programmer
1
ini juga berfungsi. simple_ctr = ['BinarizedTargetMeanValue'])
Tertarik_Programmer
1
Terima kasih. Tetapi seperti yang Anda tunjukkan, itu hanya berfungsi sebagai simple_ctr = ['BinarizedTargetMeanValue'])! Opsi lain tidak dapat dimasukkan seperti [: TargetBorderCount = BorderCount] dll. Jika Anda tahu cara memberi makan orang lain bersama dengan CtrType, beri tahu saya.
TwinPenguins