Kategorik veri: Kelime dağarcığı ve tek seferlik kodlama

Boyut terimi, özellik vektöründeki öğe sayısının eş anlamlısıdır. Bazı kategorik özellikler düşük boyutlu olur. Örneğin:

Detay adı Kategori sayısı Örnek kategoriler
snowed_today 2 Doğru, Yanlış
skill_level 3 Başlangıç, Uygulayıcı, Uzman
season 4 Kış, İlkbahar, Yaz, Sonbahar
day_of_week 7 Pazartesi, Salı, Çarşamba
gezegen 8 Merkür, Venüs, Dünya

Bir kategorik özelliğin olası kategori sayısı düşükse bu özelliği sözlük olarak kodlayabilirsiniz. Sözlük kodlaması sayesinde model, olası her kategorik değeri ayrı bir özellik olarak değerlendirir. Model, eğitim sırasında her kategori için farklı ağırlıklar öğrenir.

Örneğin, bir otomobilin fiyatını kısmen car_color adlı kategorik bir özelliğe göre tahmin edecek bir model oluşturduğunuzu varsayalım. Kırmızı arabalar yeşil arabalara göre daha değerli olabilir. Üreticiler sınırlı sayıda dış renk sunduğundan car_color düşük boyutlu kategorik bir özelliktir. Aşağıdaki görselde car_color için bir kelime dağarcığı (olası değerler) önerilmektedir:

Şekil 1. Paletteki her renk ayrı bir özellik olarak temsil edilir. Yani her renk, özellik vektöründe ayrı bir özelliktir.
      Örneğin, "Kırmızı" bir özelliktir, "Turuncu" ayrı bir özelliktir vb.
Şekil 1. Her kategori için benzersiz bir özellik.

Alıştırma: Öğrendiklerinizi test edin

Doğru veya Yanlış: Bir makine öğrenimi modeli, "Kırmızı" ve "Siyah" gibi ham dize değerlerini sayısal vektörlere dönüştürmeden doğrudan eğitilebilir.
Doğru
Yanlış

Dizin numaraları

Makine öğrenimi modelleri yalnızca kayan noktalı sayıları işleyebilir. Bu nedenle, her bir dizeyi aşağıdaki görselde gösterildiği gibi benzersiz bir dizin numarasına dönüştürmeniz gerekir:

Şekil 2. Her renk benzersiz bir tam sayı değeriyle ilişkilendirilir. Örneğin, "Kırmızı" 0 tam sayısıyla, "Turuncu" 1 tam sayısıyla vb. ilişkilendirilir.
Şekil 2. Dizine eklenen özellikler.

Dizeleri benzersiz dizin sayılarına dönüştürdükten sonra, modelin değerler arasındaki anlamlı ilişkileri öğrenmesine yardımcı olacak şekilde verileri daha da işlemeniz gerekir. Kategorik özellik verileri dizine eklenen tam sayılar olarak bırakılırsa ve bir modele yüklenirse model, dizine eklenen değerleri sürekli kayan noktalı sayılar olarak değerlendirir. Bu durumda model, "mor"un "turuncu"ya kıyasla altı kat daha olası olduğunu düşünür.

Tek sıcak kodlama

Kelime dağarcığı oluşturmanın bir sonraki adımı, her bir dizin numarasını one-hot kodlamasına dönüştürmektir. One-hot kodlamada:

  • Her kategori, N öğeden oluşan bir vektörle (dizi) temsil edilir. Burada N, kategorilerin sayısıdır. Örneğin, car_color sekiz olası kategoriye sahipse onu temsil eden tek sıcaklık vektörü sekiz öğeye sahip olur.
  • Bir sıcak vektördeki öğelerden tam biri 1,0 değerine, geri kalan tüm öğeler ise 0,0 değerine sahiptir.

Örneğin, aşağıdaki tabloda car_color içindeki her bir öğenin tek sıcak kodlaması gösterilmektedir:

Özellik Kırmızı Turuncu Mavi Sarı Yeşil Siyah Mor Kahverengi
"Kırmızı" 1 0 0 0 0 0 0 0
"Orange" 0 1 0 0 0 0 0 0
"Mavi" 0 0 1 0 0 0 0 0
"Sarı" 0 0 0 1 0 0 0 0
"Yeşil" 0 0 0 0 1 0 0 0
"Black" 0 0 0 0 0 1 0 0
"Mor" 0 0 0 0 0 0 1 0
"Kahverengi" 0 0 0 0 0 0 0 1

Özellik vektörüne iletilen, dize veya dizin numarası değil, tek sıcaklık vektörüdür. Model, özellik vektörünün her bir öğesi için ayrı bir ağırlık öğrenir.

Aşağıdaki görselde, kelime dağarcığı temsilindeki çeşitli dönüşümler gösterilmektedir:

Şekil 3. Kategorileri özellik vektörleriyle eşleyen uçtan uca sürecin şeması. Şemada giriş özellikleri "Sarı",
      'Turuncu", "Mavi" ve ikinci kez "Mavi"dir.  Sistem, giriş değerini bir kimlikle eşlemek için saklanan bir kelime hazinesini kullanır ("Kırmızı" 0, "Turuncu" 1, "Mavi" 2, "Sarı" 3 vb.). Bu nedenle sistem, "Sarı",
      'Turuncu", "Mavi" ve "Mavi"yi 3, 1, 2, 2 ile eşleştirir. Sistem daha sonra bu değerleri tek sıcaklık özellik vektörüne dönüştürür. Örneğin, sekiz olası renge sahip bir sistemde 3, 0, 0, 0, 1, 0, 0, 0, 0 olur.
Şekil 3. Kategorileri özellik vektörleriyle eşleyen uçtan uca süreç.

Seyrek gösterim

Değerleri çoğunlukla sıfır (veya boş) olan bir özellik seyrek özellik olarak adlandırılır. car_color gibi birçok kategorik özellik seyrek olma eğilimindedir. Seyrekte temsil, 1,0 değerinin konumunu seyrek bir vektörde depolamak anlamına gelir. Örneğin, "Blue" için tek sıcaklık vektörü:

[0, 0, 1, 0, 0, 0, 0, 0]

1 2. konumda olduğundan (sayımı 0'dan başlatırken), önceki tek sıcaklık vektörü için seyrek gösterim şu şekildedir:

2

Seyrek gösterimin, sekiz öğeli tek sıcaklık vektöründen çok daha az bellek tükettiğini unutmayın. En önemlisi, modelin seyrek temsil yerine tek sıcaklık değerine sahip vektörde eğitilmesi gerekir.

Kategorik verilerdeki aykırı değerler

Sayısal veriler gibi kategorik veriler de aykırı değerler içerir. car_color'ün yalnızca popüler renkleri değil, "Mauve" veya "Avocado" gibi nadiren kullanılan bazı aykırı renkleri de içerdiğini varsayalım. Bu aykırı renklerin her birine ayrı bir kategori vermek yerine bunları sözlük dışı (OOV) adlı tek bir "her şeyi kapsayan" kategoride toplayabilirsiniz. Diğer bir deyişle, tüm aykırı değerler tek bir aykırı değer paketinde gruplandırılır. Sistem, bu aykırı değer grubu için tek bir ağırlık öğrenir.

Yüksek boyutlu kategorik özellikleri kodlama

Bazı kategorik özelliklerin çok sayıda boyutu vardır (ör. aşağıdaki tablodakiler):

Detay adı Kategori sayısı Örnek kategoriler
words_in_english ~500.000 "mutlu", "yürüyüş"
US_postal_codes ~42.000 "02114", "90301"
last_names_in_Germany ~850.000 "Schmidt", "Schneider"

Kategori sayısı yüksek olduğunda tek sıcak kodlama genellikle kötü bir seçimdir. Ayrı bir Yerleştirmeler modülünde ayrıntılı olarak açıklanan yerleştirmeler genellikle çok daha iyi bir seçenektir. Yerleşimler, boyut sayısını önemli ölçüde azaltır. Bu da modellere iki önemli şekilde fayda sağlar:

  • Model genellikle daha hızlı eğitilir.
  • Oluşturulan model genellikle tahminleri daha hızlı çıkarır. Yani modelin gecikmesi daha düşüktür.

Karma oluşturma (karma oluşturma hilesi olarak da bilinir), boyut sayısını azaltmanın daha az kullanılan bir yoludur.

Özetlemek gerekirse karma oluşturma, bir kategoriyi (ör. renk) küçük bir tam sayıyla eşler. Bu tam sayı, ilgili kategoriyi barındıracak "paket"in numarasıdır.

Ayrıntılı olarak, karma oluşturma algoritmasını aşağıdaki gibi uygularsınız:

  1. Kategoriler vektöründeki kutu sayısını N olarak ayarlayın. Burada N, kalan kategorilerin toplam sayısından az olmalıdır. İsteğe bağlı bir örnek olarak N = 100 olduğunu varsayalım.
  2. Karma oluşturma işlevi seçin. (Genellikle karma değer aralığını da seçersiniz.)
  3. Her kategoriyi (ör. belirli bir renk) bu karma oluşturma işlevinden geçirerek 89237 gibi bir karma oluşturma değeri oluşturun.
  4. Her bir kutuya, çıkış karma değerinin mod N'ye göre bir dizin numarası atayın. N'nin 100 ve karma değerinin 89237 olduğu bu durumda, 89237 % 100 = 37 olduğundan modülü sonucu 37 olur.
  5. Bu yeni dizin numaralarını kullanarak her bir grup için tek sıcak kodlama oluşturun.

Verileri karma oluşturma hakkında daha fazla bilgi için Üretim makine öğrenimi sistemleri modülünün Rastgeleleştirme bölümüne bakın.