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

Kategorik bir özelliğin olası kategori sayısı azsa bunu sözlük olarak kodlayabilirsiniz. Model, sözlük kodlamasıyla olası her bir kategorik değeri ayrı bir özellik olarak ele alır. Model, eğitim sırasında her kategori için farklı ağırlıklar öğrenir.

Örneğin, kısmen car_color adlı bir kategorik özelliğe göre bir arabanın fiyatını tahmin etmek için 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" ise ayrı bir özelliktir.
Şekil 1. Her kategori için benzersiz bir özellik.

Alıştırma: Sezgilerinizi kontrol 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
Eğitim sırasında, bir model yalnızca kayan nokta sayılarını değiştirebilir. "Red" dizesi kayan noktalı bir sayı değil. "Red" gibi dizeleri kayan noktalı sayılara dönüştürmeniz gerekir.
Yanlış
Makine öğrenimi modelleri yalnızca kayan noktalı değerlere sahip özelliklerde eğitilebilir. Bu nedenle, eğitmeden önce bu dizeleri kayan noktalı değerlere dönüştürmeniz gerekir.

Dizin numaraları

Makine öğrenimi modelleri yalnızca kayan noktalı sayıları işleyebilir. Bu nedenle, her dizeyi aşağıdaki resimde olduğu 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.

Alıştırma: Sezgilerinizi kontrol edin

Modeliniz doğrudan Şekil 2'de gösterilen dizin numaralarında mı eğitilmeli?
Evet
Model, dizin numaralarına göre eğitilirse her birini yanlış bir şekilde sayısal bir değer olarak değerlendirir ve "Black" (dizin numarası 5) değerinin model için "Orange" (dizin numarası 1) ile karşılaştırıldığında 5 kat daha anlamlı olduğunu kabul eder.
Hayır
Modeliniz dizin sayılarıyla eğitilmemelidir. Kullanıyorsa modeliniz her dizin numarasını sayısal bir değer olarak değerlendirir ve "Black" (endeks numarası 5) değerinin model için "Orange" (dizin numarası 1) ile kıyaslandığında 5 kat daha anlamlı olduğunu düşünür.

Tek sıcak kodlama

Bir sözlük oluşturmanın sonraki adımı, her bir dizin numarasını kendi tek kullanımlık kodlamaya 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 sahiptir; kalan tüm öğeler 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ı Orange 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
"Siyah" 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. Daha sonra sistem bu değerleri tek seferlik bir özellik vektörüne dönüştürür. Örneğin, sekiz rengi olan bir sistem için 3 değeri 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 daha azdır. Seyrekte temsil, 1,0 değerinin konumunu seyrek bir vektörde depolamak anlamına gelir. Örneğin, "Blue" için bir sıcak vektör şöyle olur:

[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 Yaklaşık 850.000 "Schmidt", "Schneider"

Kategori sayısı yüksek olduğunda, tek seferlik kodlama genellikle kötü bir seçimdir. Ayrı bir Yerleştirme modülünde ayrıntılı olarak açıklanan yerleştirmeler genellikle çok daha iyi bir seçimdir. Yerleştirmeler, 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 adlandırılır), boyutların sayısını azaltmanın daha az yaygın bir yoludur.