Kategorisel veya sayısal olarak ay ve saat gibi kodlama özellikleri?


23

Makine öğrenim modelinde ay ve saat gibi özellikleri faktör veya sayısal olarak kodlamak daha mı iyidir?

Bir yandan, sayısal kodlamanın makul olabileceğini düşünüyorum, çünkü zaman ileriye doğru ilerleyen bir süreç (beşinci ayın ardından altıncı ay), ancak diğer yandan kategorik kodlamanın döngüsel yapı nedeniyle daha makul olabileceğini düşünüyorum yıllar ve günler (12. ay ilki takip eder).

Bunun için genel bir çözüm veya kongre var mı?


RF modelinde günün saatini (1-24) değişken olarak tanımlarken de aynı sorunla karşılaştım. Değişkeni kategorik olarak dönüştürürsem, VarImp işlevi her saat için önemli değer gösterir ve çok düzensiz görünüyor. 'Günün saati' tipi sayısal değişkeni kategorik olarak değiştirmenin gerekli olduğunu merak ediyorum.
Mahmudur Rahman,

Yanıtlar:


19

Günün değişken zamanının (sinüs, kosinüs) dönüşümünü eklemeyi düşündünüz mü? Bu, örneğin 0 ve 23 saatin birbirine yakın olmasını ve böylece değişkenin döngüsel yapısının parlamasını sağlar.

( Daha Fazla Bilgi )


bununla ilgili bir sorunum var çünkü eğer yaparsam: günah (pi * X / 24) ki burada [0, 23] 'te X sabah 6 ile akşam 6 arasında aynı değerlendirmeye sahip oluruz (pi * 6/24) == günah (p * 18/24). ama bunlar tamamen farklı saatler
Eran Moshe

Çevrimi böyle yapabilir: günah (pi * X / 12). Teşekkür Eran:]
Eran Moshe

Yukarıdaki bağlantıdaki yazıdaki @EranMoshe fyi yerine 2 * pi faktörü kullanıyorlar, bu yüzden günah olur (2 * pi * X / 12) - yorumlarda buna bir neden
veriyorlar

Ve (2 * pi X / 24) olan (pi X / 12):] Gördüğünüz gibi aynı problemle mücadele ettim blog.davidkaleko.com/feature-engineering-cyclical-features.html ile mücadele edildi. Yorumlarda “Mariel G” nin onu tam anlamıyla farkettiğim gibi düzelttiğini görebilirsiniz: pi * X / 12 günün saatlerinde dolaşımda olacak. Öğrenmeye geldiğim şey ise, 24 saatlik gerçek bir dönemi tanımlamak için bunun cos ve sin bileşenlerini almanız gerektiği! (sadece periyodik bir işleve değil gerçek bir çembere ihtiyacınız var)
Eran Moshe

@EranMoshe ah evet, eğer saatler içinde yapmak istiyorsanız o zaman piX / 12'ye düşürülebilir, ancak aylar yapmak istiyorsanız, o zaman 2piX / 12 yani pi / 6 olur. Yani genel olarak 2piX / dönem olur
tsando

9

Cevap, zaman özelliği ve hedef değişken arasında temsil etmek istediğiniz ilişkilerin türüne bağlıdır.

Zamanı sayısal olarak kodlarsanız, model üzerinde belirli kısıtlamalar koyarsınız. Doğrusal bir regresyon modeli için, zamanın etkisi şimdi monotoniktir, hedef zamanla artar veya azalır. Karar ağaçları için birbirine yakın zaman değerleri birlikte gruplandırılacaktır.

Kategorik olarak kodlama süresi modele daha fazla esneklik kazandırır, ancak bazı durumlarda model iyi öğrenmek için yeterli veriye sahip olmayabilir. Yararlı olabilecek bir teknik, zaman değerlerini bir takım setler halinde gruplamak ve kümeyi kategorik bir nitelik olarak kullanmaktır.

Bazı örnek gruplamalar:

  • Kullanım durumuna bağlı olarak aylar boyunca çeyrek veya mevsim halinde gruplandırın. Örneğin: Ocak-Mar, Nis-Haziran, vb.
  • Günün saati için, günün saati kovalarına gruplandırın: sabah, akşam, vb.
  • Haftanın günü için hafta içi, hafta sonu olarak gruplandırın.

Yukarıdakilerin her biri, yeterli veri verilerek doğrudan kategorik bir nitelik olarak da kullanılabilir. Ayrıca, bir alan bilgisi temelli yaklaşımı tamamlamak için gruplamalar veri analizi ile de keşfedilebilir.


4

Sayısal özellikleri kullanmanızı öneririm. Kategorik özelliklerin kullanılması, esasen iki kategori arasındaki mesafeyi uygun görmeyeceğiniz anlamına gelir (örneğin kategori 1, kategori 3'e olduğu kadar kategori 2'ye de yakındır). Bu kesinlikle saatlerce veya aylarca geçerli değil.

Ancak gündeme getirdiğiniz mesele, saat ve ayları 12'nin 1'e 11'e yakın olduğu bir şekilde temsil etmek istemesidir. saat / ayları sayısal özellikler olarak kullanmadan önce bir sinüs / kosinüs işlevi.


3

Hangi algoritmayı kullandığınıza bağlı.

Rastgele orman gibi ağaç tabanlı algoritmalar kullanıyorsanız, sadece bu soruyu iletin. Kategorik kodlama ağaç tabanlı algoritmalar için gerekli değildir.

Yapay sinir ağı gibi diğer algoritmalar için her iki yöntemi de denemeyi öneririm (sürekli ve kategorik). Etki, farklı durumlar arasında farklılık gösterir.


Ağaç tabanlı uygulamaya bağlıdır. Scikit-learn ve xgboost gibi yaygın olarak kullanılan paketler kategorik değişkenleri tanımıyor. Onları tek bir sıcak kodlama bekleniyor.
Ricardo Cruz

Bu yazıdan : towardsdatascience.com/… karar ağaçlarına dayanan hiçbir şey için sıcak kullanmamalısınız, ki bu benim zor yoldan bulduğum şey.
ashley

1

Sahip olduğunuz tüm veriler nedeniyle iyi tanımlanmış, kategorik bir kodlama öneririm, bu da uygulanması daha kolaydır.


1

@Raghu tarafından verilen cevabı tekrarlamak için . Kategorik ve sayısal özellikler arasındaki büyük farklardan biri, sayıların büyüklüğünün karşılaştırılabilir olması, yani 2019'un 2018'den büyük mü, yoksa Aralık (12) Mart'tan (3) büyük mü? Pek sayılmaz. Bu sayılarda sıralı bir düzen olsa da, büyüklükleri karşılaştırılamaz. Dolayısıyla kategorik bir değere dönüştürmek daha anlamlı olabilir.

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.