Random Forest modelinde daha yeni verilerin ağırlıklandırılması


14

6 kategori arasında ayrım yapmak için Random Forest ile bir sınıflandırma modeli eğitimi alıyorum. İşlem verilerim yaklaşık 60k + gözlem ve 35 değişkene sahip. İşte yaklaşık olarak nasıl göründüğüne bir örnek.

 _________________________________________________
|user_id|acquisition_date|x_var_1|x_var_2| y_vay  |
|-------|----------------|-------|-------|--------|
|111    | 2013-04-01     | 12    | US    | group1 |
|222    | 2013-04-12     | 6     | PNG   | group1 |
|333    | 2013-05-05     | 30    | DE    | group2 |
|444    | 2013-05-10     | 78    | US    | group3 |
|555    | 2013-06-15     | 15    | BR    | group1 |
|666    | 2013-06-15     | 237   | FR    | group6 |

Model oluşturulduktan sonra, son birkaç haftanın gözlemlerini almak istiyorum. Sistemde değişiklikler olduğu için, daha yeni gözlemler tahmin etmek istediğim mevcut gözlemlerin ortamına daha yakından benzeyecektir. Bu nedenle, Rastgele Orman'ın son gözlemlere daha fazla önem vermesi için bir ağırlık değişkeni yaratmak istiyorum.

R'deki randomForest paketinin gözlem başına ağırlıkları kaldırabildiğini bilen var mı?

Ayrıca, ağırlık değişkenini oluşturmak için iyi bir yöntem nedir önerebilir misiniz? Örneğin, verilerim 2013'ten geldiğinden, ay sayısını tarihten ağırlık olarak alabileceğimi düşünüyordum. Bu yöntemle ilgili bir sorun gören var mı?

Şimdiden çok teşekkürler!


Yığın taşmasına bir soru göndermeyi düşünebilirsiniz. Uygulama konularında size daha fazla yardımcı olacaklar. Bu sitenin odağı daha teori tabanlıdır.
Alex Williams

Muhtemelen yazımda yeterince net değilim, ancak sorularım uygulama konusuyla ilgili değil. Örneğin, ağırlık değişkenini oluşturmayı sorduğum bölümde, R'deki hangi komutun bana bu konuda yardımcı olabileceğini sormak istemiyorum. Basitçe, bu arada rastgele ormanın varsayımlarını ihlal edip etmeyeceğimi merak ediyordum.
Nikolay Nenov

1
Cevap hayır, inanıyorum. Aşağıdaki cevabımda açıkladığım şekilde farklı gruplara ağırlık atayabilirsiniz. İlgilendiğiniz şey olmadığını anlıyorum, ama benzer bir fikir. Önerdiğim gibi yinelenen gözlemler kullanmayı deneyebilirsiniz.
Alex Williams

Yanıtlar:


5

rangerR (paket pdf nispeten yeni), bu yapacaktır. Rastgele ormanların ranger uygulaması, case.weightsbireysel vaka / gözlem ağırlıklarına sahip bir vektör alan bir argümana sahiptir .


Temiz! Aradığım çözüm gibi dikişler. Olasılığın nasıl hesaplandığına dair ayrıntılara bir bağlantınız var mı?
Nikolay Nenov

1
Olasılıkları nasıl hesapladıklarından% 100 emin değilim - ama sanırım, eğer bir başlangıç ​​yapmak istiyorsanız, şu makaleye bir göz atın: Malley, JD, Kruppa, J., Dasgupta, A., Malley, KG ve Ziegler , A. (2012). Olasılık makineleri: parametrik olmayan öğrenme makineleri kullanılarak tutarlı olasılık tahmini. Yöntemler Inf Med 51: 74-81. dx.doi.org/10.3414/ME00-01-0052
GrantRWHumphries

7

Daha yeni veri noktalarını temsil etmek için verileri yeniden örnekleyebilirsiniz. Rf her halükarda bir replasman ile örnekleme aşamasını içerir ve dengesiz sınıflar için "kabaca dengelenmiş torbalama", azınlık sınıfını aşırı temsil etmek için örnekleme kullanır ve deneyimlerime göre sınıf ağırlıklı rastgele orman olarak iyi veya daha iyi sonuçlar üretir.

Uygulamayı kolaylaştırmak için torbalama sırasında egzersiz matrisinizi ( referans ) oluşturma düzeyinde yeniden örnekleyebilirsiniz, ancak bu durumda birçok tekrar yapmayı öneririm.

Dahili olarak scikit-learn da dahil olmak üzere bazı rastgele orman uygulamaları, her bir numunenin torbada kaç kez bulunduğunu takip etmek için örnek ağırlıklarını kullanır ve torbalama düzeyinde aşırı örneklemeye ve çapraz doğrulamada eğitim düzeyinde aşırı örneklemeye yakın olmalıdır.


4

"Classwt" parametresine bakmalısınız. Bu, doğrudan ilgilendiğiniz gibi görünmüyor, ancak size ne yapmak istediğinize dair bir fikir verebilir .

Buraya bakın: Stack Exchange soru # 1

Ve burada: Stack Exchange soru # 2

Ağırlıklı rastgele ormanlarla ilgili makale: PDF

Temel fikir, sınıfları, nadiren gözlenen grupların / sınıflandırmaların bootstrap örneklerinizde seçilme olasılığının daha yüksek olacağı şekilde ağırlıklandırmaktır. Bu, dengesiz veriler için yararlıdır (farklı sınıfların önceki olasılıkları büyük ölçüde farklı olduğunda).

Bana öyle geliyor ki, benzer bir şey yapmak istiyorsunuz, ancak son olaylar için (belirli gruplar / sınıflamalar için değil). Bunu yapmanın basit bir yolu, daha yeni gözlemler için yinelenen gözlemler (yani tekrarlanan, özdeş satırlar koymak) oluşturmaktır. Ancak, bu potansiyel olarak verimsiz olabilir. R'deki her bir gözlemi doğrudan ağırlıklandırmanın bir yolunu bilmiyorum, ama bundan habersiz olabilirim.

Alternatif uygulamalar için etrafa bakmayı deneyebilirsiniz, örneğin C'de - en kötüsü, bunlar biraz kodlama ile özelleştirilebilir.


1
Linkler için çok teţekkürler, Alex. Bu makale, sınıflandırıcılarınızı ağırlıklandırmak istediğiniz durumlara iyi örnekler vermektedir. Korkarım ki bu benim için çalışmıyor, çünkü biri sınıflandırıcılar ağırlık dışında bir şey için "classwt" parametresini kullanamazsınız - yani sınıf başına bir ağırlığa ihtiyacınız var, aksi takdirde randomForest bir hata döndürür.
Nikolay Nenov

1
Evet doğrudan "classwt" kullanabileceğinizi sanmıyorum. "Gözlem ağırlıkları" gibi bir parametre istiyorsunuz ama bunun var olduğunu düşünmüyorum.
Alex Williams
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.