"Pek çok pratik veri bilimi çalışmasında, veri seti kategorik değişkenler içerir. Bu değişkenler genellikle metin değerleri olarak saklanır". (Practical Business Python) Makine öğrenimi matematiksel denklemlere dayandığından, kategorik değişkenleri olduğu gibi tutmak sorun yaratır. Birçok algoritma kategorik değerleri ek bir işlem olmadan destekler, ancak bu durumlarda bile değişkenlerin kodlanıp kodlanmayacağı tartışma konusudur. Kategorik değerleri desteklemeyen algoritmalar için ise kodlama yöntemleri tek seçenektir. Burada bazı yöntemleri ele alalım.
Kodlama Yöntemleri
Etiket kodlama
Etiket kodlamada, her kategoriyi bir sayıya veya etikete eşleriz. Kategoriler için seçilen etiketlerin birbiriyle ilişkisi yoktur. Bu nedenle birbiriyle bağlantılı veya birbirine yakın olan kategoriler, kodlama sonrasında bu bilgiyi kaybeder.
Frekans kodlama
Kategorilerin sıklığını etiket olarak kullanmanın bir yoludur. Sıklığın hedef değişkenle bir ölçüde ilişkili olduğu durumlarda, veri yapısının doğasına bağlı olarak modele ağırlığı doğru orantılı veya ters orantılı şekilde atamada yardımcı olur.
One-hot kodlama
Bu yöntemde, her kategoriyi, özelliğin varlığını veya yokluğunu belirten 1 ve 0’lardan oluşan bir vektöre eşleriz. Vektör sayısı, tutmak istediğimiz kategori sayısına bağlıdır. Yüksek kardinaliteli özellikler için bu yöntem çok sayıda sütun üretir ve öğrenmeyi önemli ölçüde yavaşlatır. One-hot kodlama ile dummy kodlama arasında ve hangisinin ne zaman kullanılacağı konusunda sıkça konuşulur. Aralarındaki temel fark, one-hot kodlamanın kategori sayısı kadar sütun üretmesi, dummy kodlamanın ise bir eksiğini üretmesidir. Bu durum, doğrulama sürecinde model kurucu tarafından uygun şekilde ele alınmalıdır.
Dummy değişken tuzağı:
Diyelim ki bir kategorik özellikte iki kategori var. One-hot kodlama uygulandıktan sonra bu kategorik özelliği temsil eden iki sütun olacaktır, ancak yakından bakıldığında her iki değeri de temsil etmek için tek bir vektörün yeterli olduğu görülür. Örneğin iki değerli bir kategorik özellikte değerler “kırmızı” ve “mavi” olsun. One-hot kodlamadan sonra iki vektör oluşur: biri “kırmızı”nın, diğeri “mavi”nin varlığını gösterir; ancak bilgi yalnızca bir vektör kullanılarak da öğrenilebilir, diğeri sabit kalır. Bu yüzden bir vektörü düşürebiliriz; bu da algoritmaların eğitilmesi gereken veri miktarını azaltır. Bu yaklaşım modelin daha iyi performans göstermesine ve modelin çalışma mantığının açıklanmasını kolaylaştırmaya yardımcı olur. Gerçek hayatta çoğu zaman, sonuçlar hakkında ön bilgiye de sahip olduğumuz birçok kategorik özellikle uğraşırız. Kodlama uygulamaları, girdi sürecini yönetmenize imkân tanır ancak süreç ve öğrenme yükünü de ciddi ölçüde artırabilir.
Hedef, Etki veya Olasılık kodlama
Hedef kodlama, etiket kodlamaya benzer; farkı, etiketlerin hedefle doğrudan ilişkilendirilmesidir. Örneğin, ortalama hedef kodlamasında, özellikteki her kategori için etiket, eğitim verisinde hedef değişkenin ortalama değeriyle belirlenir. Bu kodlama yöntemi benzer kategoriler arasındaki ilişkiyi ortaya çıkarır, ancak ilişkiler kategoriler ve hedefin kendisiyle sınırlıdır. Ortalama hedef kodlamanın avantajları, verinin hacmini etkilememesi ve daha hızlı öğrenmeye yardımcı olmasıdır; dezavantajı ise doğrulamasının daha zor olmasıdır. Bu kodlama yönteminin uygulanmasında düzenlileştirme gereklidir. Hedef kodlayıcı için Python ve R sayfalarına göz atın.
Kodlama İstatistikleri
Kodlama değişkenliği, bir kategorinin kendi içindeki kodlama farklılığını açıklar. One-hot kodlamadaki değişkenlikten bahsederken, bu değişkenlik, uygulama zamanında hedef üzerinde yeterli etkiye sahip alınacak kategori sayısına karar verilmesine bağlıdır. Diğer kodlama yöntemleri de doğrulama sırasında belirlenen anlamlı bir değişkenlik gösterir.
Kodlama ayırt edilebilirliğini hesaplamak için, kategorilerin etiketlerini sayar ve sonra etiketlerin standart sapmasını hesaplarsınız. Bu, kodlanmış kategorilerin ne kadar ayırt edilebilir olduğunu, yani birbirlerinden uzak mı yoksa bir bölgede kümelenmiş mi olduklarını gösterir.
Model oluşturma sürecinde basit bir kodlama stiline yönelirseniz, modelin önyargılı olma eğiliminde olduğunu unutmayın; daha iyi anlamak için şu tartışmaya bakın. Ayrıca farklı modeller için kodlama yöntemini tahmin etmeniz gerekir; örneğin regresyon için ortalama hedef kodlama yapabilirsiniz. Sınıflandırma varsa, göreli frekans kodlamasını tercih edebilirsiniz.
Son olarak, farklı teknikler kullanarak kategorik değişkenleri kodlamaya yardımcı olan scikit-learn tarzı bir dönüştürücü paylaşmak isterim.
category_encoders
Bu scikit-learn kütüphanesi şu anda uygulanmış olan aşağıdaki teknikleri sunar:
- Ordinal
- One-Hot
- Binary
- Helmert Contrast
- Sum Contrast
- Polynomial Contrast
- Backward Difference Contrast
- Hashing
- BaseN
- LeaveOneOut
- Target Encoding
Girdi olarak pandas dataframe’lerini destekler ve veriyi dönüştürebilir. Ayrıca sklearn boru hatlarını da destekleyebilir; ayrıntılar için buraya bakın.
scikit-learn hakkında daha fazla bilgi edinmek isterseniz, DataCamp'in scikit-learn ile Denetimli Öğrenme kursunu alın.
"Pek çok pratik veri bilimi çalışmasında, veri seti kategorik değişkenler içerir. Bu değişkenler genellikle metin değerleri olarak saklanır". (Practical Business Python) Makine öğrenimi matematiksel denklemlere dayandığından, kategorik değişkenleri olduğu gibi tutmak sorun yaratır. Birçok algoritma kategorik değerleri ek bir işlem olmadan destekler, ancak bu durumlarda bile değişkenlerin kodlanıp kodlanmayacağı tartışma konusudur. Kategorik değerleri desteklemeyen algoritmalar için ise kodlama yöntemleri tek seçenektir. Burada bazı yöntemleri ele alalım.
Kodlama Yöntemleri
Etiket kodlama
Etiket kodlamada, her kategoriyi bir sayıya veya etikete eşleriz. Kategoriler için seçilen etiketlerin birbiriyle ilişkisi yoktur. Bu nedenle birbiriyle bağlantılı veya birbirine yakın olan kategoriler, kodlama sonrasında bu bilgiyi kaybeder.
Frekans kodlama
Kategorilerin sıklığını etiket olarak kullanmanın bir yoludur. Sıklığın hedef değişkenle bir ölçüde ilişkili olduğu durumlarda, veri yapısının doğasına bağlı olarak modele ağırlığı doğru orantılı veya ters orantılı şekilde atamada yardımcı olur.
One-hot kodlama
Bu yöntemde, her kategoriyi, özelliğin varlığını veya yokluğunu belirten 1 ve 0’lardan oluşan bir vektöre eşleriz. Vektör sayısı, tutmak istediğimiz kategori sayısına bağlıdır. Yüksek kardinaliteli özellikler için bu yöntem çok sayıda sütun üretir ve öğrenmeyi önemli ölçüde yavaşlatır. One-hot kodlama ile dummy kodlama arasında ve hangisinin ne zaman kullanılacağı konusunda sıkça konuşulur. Aralarındaki temel fark, one-hot kodlamanın kategori sayısı kadar sütun üretmesi, dummy kodlamanın ise bir eksiğini üretmesidir. Bu durum, doğrulama sürecinde model kurucu tarafından uygun şekilde ele alınmalıdır.
Dummy değişken tuzağı:
Diyelim ki bir kategorik özellikte iki kategori var. One-hot kodlama uygulandıktan sonra bu kategorik özelliği temsil eden iki sütun olacaktır, ancak yakından bakıldığında her iki değeri de temsil etmek için tek bir vektörün yeterli olduğu görülür. Örneğin iki değerli bir kategorik özellikte değerler “kırmızı” ve “mavi” olsun. One-hot kodlamadan sonra iki vektör oluşur: biri “kırmızı”nın, diğeri “mavi”nin varlığını gösterir; ancak bilgi yalnızca bir vektör kullanılarak da öğrenilebilir, diğeri sabit kalır. Bu yüzden bir vektörü düşürebiliriz; bu da algoritmaların eğitilmesi gereken veri miktarını azaltır. Bu yaklaşım modelin daha iyi performans göstermesine ve modelin çalışma mantığının açıklanmasını kolaylaştırmaya yardımcı olur. Gerçek hayatta çoğu zaman, sonuçlar hakkında ön bilgiye de sahip olduğumuz birçok kategorik özellikle uğraşırız. Kodlama uygulamaları, girdi sürecini yönetmenize imkân tanır ancak süreç ve öğrenme yükünü de ciddi ölçüde artırabilir.
Hedef, Etki veya Olasılık kodlama
Hedef kodlama, etiket kodlamaya benzer; farkı, etiketlerin hedefle doğrudan ilişkilendirilmesidir. Örneğin, ortalama hedef kodlamasında, özellikteki her kategori için etiket, eğitim verisinde hedef değişkenin ortalama değeriyle belirlenir. Bu kodlama yöntemi benzer kategoriler arasındaki ilişkiyi ortaya çıkarır, ancak ilişkiler kategoriler ve hedefin kendisiyle sınırlıdır. Ortalama hedef kodlamanın avantajları, verinin hacmini etkilememesi ve daha hızlı öğrenmeye yardımcı olmasıdır; dezavantajı ise doğrulamasının daha zor olmasıdır. Bu kodlama yönteminin uygulanmasında düzenlileştirme gereklidir. Hedef kodlayıcı için Python ve R sayfalarına göz atın.
Kodlama İstatistikleri
Kodlama değişkenliği, bir kategorinin kendi içindeki kodlama farklılığını açıklar. One-hot kodlamadaki değişkenlikten bahsederken, bu değişkenlik, uygulama zamanında hedef üzerinde yeterli etkiye sahip alınacak kategori sayısına karar verilmesine bağlıdır. Diğer kodlama yöntemleri de doğrulama sırasında belirlenen anlamlı bir değişkenlik gösterir.
Kodlama ayırt edilebilirliğini hesaplamak için, kategorilerin etiketlerini sayar ve sonra etiketlerin standart sapmasını hesaplarsınız. Bu, kodlanmış kategorilerin ne kadar ayırt edilebilir olduğunu, yani birbirlerinden uzak mı yoksa bir bölgede kümelenmiş mi olduklarını gösterir.
Model oluşturma sürecinde basit bir kodlama stiline yönelirseniz, modelin önyargılı olma eğiliminde olduğunu unutmayın; daha iyi anlamak için şu tartışmaya bakın. Ayrıca farklı modeller için kodlama yöntemini tahmin etmeniz gerekir; örneğin regresyon için ortalama hedef kodlama yapabilirsiniz. Sınıflandırma varsa, göreli frekans kodlamasını tercih edebilirsiniz.
Son olarak, farklı teknikler kullanarak kategorik değişkenleri kodlamaya yardımcı olan scikit-learn tarzı bir dönüştürücü paylaşmak isterim.
category_encoders
Bu scikit-learn kütüphanesi şu anda uygulanmış olan aşağıdaki teknikleri sunar:
Girdi olarak pandas dataframe’lerini destekler ve veriyi dönüştürebilir. Ayrıca sklearn boru hatlarını da destekleyebilir; ayrıntılar için buraya bakın.
scikit-learn hakkında daha fazla bilgi edinmek isterseniz, DataCamp'in scikit-learn ile Denetimli Öğrenme kursunu alın.