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.
sumber
Jawaban:
Saya menemukan bahwa untuk mengatur
ctr
parameter dan semua komponen yang harus dilewati daftar string, setiap string harus berisictrType
dan salah satu komponennya:ctrType
misalnyaBorders:
(klik di sini untuk parameter catboost)ctrType
harus mengikuti. Sebagai contohTargetBorderType=5
.'Borders:TargetBorderType=5'
.Contoh dengan dua komponen yang ditetapkan:
sumber
Apakah Anda mencoba menggunakan format yang disediakan seperti di bawah ini:
sumber