Olabilirlik tahminini kullanarak kategorik değişkenleri kodlamak


22

Olabilirlik tahminini kullanarak kategorik değişkenleri nasıl kodlayabileceğimi anlamaya çalışıyorum, ancak şu ana kadar çok az başarılı oldum.

Herhangi bir öneri çok takdir edilecektir.


Hedef etiketimiz olmadığında tahmin süresi boyunca ne yapmalı?
Ranjeet Singh

Yanıtlar:


24

Ben de bu konuyu öğreniyordum ve bunlar da bulduğum şey:

  • Bu tür kodlamaya, olasılık kodlaması , etki kodlaması veya hedef kodlama denir.

  • Fikir, kategorik değişkeninizi hedef değişken kullanımıyla kodluyor (göreve bağlı olarak sürekli veya kategorik). Örneğin, eğer regresyon göreviniz varsa, kategorik değişkeninizi hedefin ortalaması ile kodlayabilirsiniz. Her kategori için hedefin karşılık gelen ortalamasını (bu kategori arasında) hesaplar ve bir kategorinin değerini bu ortalamayla değiştirirsiniz.

  • Sınıflandırma göreviniz varsa, hedefinizin göreceli sıklığını her kategori değerine göre hesaplarsınız.

  • Matematiksel bir bakış açısıyla, bu kodlama, her kategori değerine bağlı olarak hedefinizin olasılığı anlamına gelir.

  • Basit bir şekilde, yukarıda açıkladığım şekilde yaparsanız, muhtemelen önyargılı bir tahmin alırsınız. Bu yüzden Kaggle topluluğunda genellikle 2 düzey çapraz doğrulama kullanıyorlar. Bu yorumu burada raddar ile okuyun . İlgili defter burada .

Alıntı:

Y'nin ortalama değerini alıyor. Ancak düz anlam ifade etmiyor, fakat çapraz onaylama yolunda çapraz onaylama;

Diyelim ki 20 kat çapraz doğrulama var. Sadece # 2- # 20 katlarından gelen bilgileri kullanarak # 1 kat özelliğinin ortalama değerini hesaplamamız gerekiyor.

Yani, # 2- # 20 kıvrım alırsınız, içinde ayarlanmış başka bir çapraz doğrulama yaratırsınız (10 kat yaptım). Her terkedilme katlama için hesaplama aracı (sonunda 10 ortalama kazanırsınız). Bu 10 anlamına gelir ve bu vektörü birincil # 1 doğrulama kümeniz için uygularsınız. Kalan 19 kat için bunu tekrarlayın.

Açıklamak zor, anlamak zor ve ustalaşmak :) Ama doğru yapılırsa birçok fayda sağlayabilir :)

  • Bu kodlamanın bir başka uygulaması da burada .

  • R kütüphanesi vtreat'te , etki kodlama uygulamasına sahiptirler. Bu gönderiye bakınız .

  • In CatBoost kütüphanesinde onlar hedef kodlama dahil kategorik değişken kodlama için birçok seçenek var.

  • Sklearn'de henüz böyle bir kodlama yok.



Hedef kodlamayı kullanmanız durumunda özellik etkileşimini nasıl uygularsınız? Örneğin, F1 ve F2 kodlanmış hedefler. F1 * F2 ile kodlanmış değerleri çarpmanız yeterli mi?
Michael Larionov,

Her LOO katlaması için ortalamayı hesaplarsanız, bunların ortalamasını alırsınız, # 2- # 20 katının ortalamasını aldığınız gibi tamamen aynıdır, bunun neden CV olarak kabul edilebileceğini anlamıyorum. Ayrıca, bu 10 ortalamaya girdiğinde "vector" ile ne demek istediğini anlamıyorum.
SiXUlm

Geç bir yorum; Kategori Kodlayıcılarda hedef kodlama basit bir ortalama kodlamadır; Raddar tarafından tarif edilen kıvrım içi kıvrım düzenini yapmaz.
Dan Scally

7

Hedef kodlama, sklearn'de şu anda category_encoders paketi ile mevcuttur.

Hedef kodlayıcı

class category_encoders.target_encoder.TargetEncoder (verbose = 0, cols = Yok, drop_invariant = Yanlış, return_df = Doğru, impute_missing = Doğru, handle_unknown = 'impute', min_samples_leaf = 1, yumuşatma = 1)

Kategorik özellikler için Hedef Kodlama. Dışarıda bırakma yaklaşımına dayanarak.

Yukarıdaki yorumda josh tarafından belirtildiği gibi.


1

Olasılık kodlaması hala scikit learn'de mevcut değil. Sözlük oluşturarak ve ardından değiştirme işlevini yapabilirsiniz.

dict1 = {'cate1':1,'cate2':1,'cate3':2,'cate4':2}
for i in df.shape[0]:
    df.iloc[i] = dict1[df.iloc[i]] 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.