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.
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.
Yanıtlar:
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 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.
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]]