2015-07-22 15 views
5

Ben şöyle rpart paketini kullanıyorum:Bölüm kullanımı: Tahminlerde daha fazla değişkenlik nasıl elde edilir?

enter image description here

:

model <- rpart(totalUSD ~ ., data = df.train) 

aşağıda resimde gösterildiği gibi 80k üzerinde satırlar, rpart genelleme olduğunu sadece üç farklı grup içine tahminler olduğunu fark

Birkaç configuration options for the rpart method; Ancak, onları tam olarak anlamadım.

Rpart'ı yapılandırmanın bir yolu var, böylece daha fazla tahmin oluşturuyor (yalnızca üç yerine); böyle stark grupları değil, aralarında daha fazla seviye var mı?

Sormamın nedeni, maliyet tahmincimin yalnızca üç sayıdan birini döndürdüğü için oldukça basit görünmek olduğu içindir. Eğer gerçekten karmaşık bir ağaç yapısını isterseniz

structure(list(totalUSD = c(9726.6, 730.14, 750, 200, 60.49, 
310.81, 151.23, 145.5, 3588.13, 400), durationDays = c(730, 724, 
730, 189, 364, 364, 364, 176, 730, 1095), familySize = c(4, 1, 
2, 1, 3, 2, 1, 1, 4, 4), serviceName = c("Service5", 
"Service6", "Service9", "Service4", 
"Service1", "Service2", "Service1", "Service3", 
"Service7", "Service8"), homeLocationGeoLat = c(37.09024, 
10.691803, 37.09024, 35.86166, 55.378051, 35.86166, 51.165691, 
-30.559482, -30.559482, 41.87194), homeLocationGeoLng = c(-95.712891, 
-61.222503, -95.712891, 104.195397, -3.435973, 104.195397, 10.451526, 
22.937506, 22.937506, 12.56738), hostLocationGeoLat = c(55.378051, 
37.09024, 55.378051, 55.378051, 37.09024, 1.352083, 55.378051, 
37.09024, 23.424076, 1.352083), hostLocationGeoLng = c(-3.435973, 
-95.712891, -3.435973, -3.435973, -95.712891, 103.819836, -3.435973, 
-95.712891, 53.847818, 103.819836), geoDistance = c(6838055.10555534, 
4532586.82063172, 6838055.10555534, 7788275.0443749, 6838055.10555534, 
3841784.48282769, 1034141.95021832, 14414898.8246973, 6856033.00945242, 
10022083.1525388)), .Names = c("totalUSD", "durationDays", "familySize", 
"serviceName", "homeLocationGeoLat", "homeLocationGeoLng", "hostLocationGeoLat", 
"hostLocationGeoLng", "geoDistance"), row.names = c(25601L, 6083L, 
24220L, 20235L, 8372L, 456L, 8733L, 27257L, 15928L, 24099L), class = "data.frame") 
+0

Bize bir örnek veri veya bazı tekrarlanabilir örnek verebilir misiniz? – roman

+0

Evet, sorumu ekledim. Teşekkür ederim. – user1477388

+1

Tamam Verilerinle küçük bir oyun oynadım. Yaptığınız ağaç çok daha fazla veri kullandıkça sorununuzu yeniden oluşturmak zor. Parametrelerin, ağacınızda iki bölüme sahip olacak şekilde ayarlandığını tahmin ediyorum (iki açıklayıcı değişken önem taşır) ve bu da 3 terminal düğümüne neden olur. Ağaç, her terminal düğümündeki bölgelerdeki ortalamayı tahmin eder. Daha iyi ölçekli tahminler istiyorsanız, tek bir ağaca uymak yerine rastgele ormanlar veya güçlendirici şeyler deneyin. Daha sonra, ortalama ağaç sayısını (rasgele ormanları) veya büzülme parametresini (hızlandırma) ayarlamak için çapraz doğrulamayı kullanabilirsiniz. – roman

cevap

3

, bu deneyin: İşte

verilerim örneğidir

library(rpart) 
fit = rpart(totalUSD ~ ., data = df.train, control = rpart.control(cp = 0)) 

Temelde her bölünmüş zaman cp = 0 olursa olsun iyileştirmeler de çalışılmıştır böler. Bununla gerçekten karmaşık bir model elde edersiniz, ancak 80k gözlemleriniz var, bu yüzden minsplit veya minbucket'u rahatlıkla kullanabileceğiniz bir numaraya ayarlayın.

Bu stratejiyi, çalıştığım rasgele bir orman uygulamasında kullandım. Hesaplama süresinin çok artabileceğini unutmayın.

İlgili konular