2014-09-22 9 views
5

Bu blog yazısı üzerinden R-blog yazarlarını okuyordum ve kodun son bölümü ile karıştırıldım ve bunu çözemiyorum.Kohonen haritaları R'de hata mı çiziliyor?

http://www.r-bloggers.com/self-organising-maps-for-customer-segmentation-using-r/

Ben kendi verilerle bu yeniden yaratmaya çalıştınız. 2755 puan ile üstel dağılımı takip eden 5 değişkenim var.

ben iyiyim ve onun meydana getirdiği haritayı belirleyebiliriz:

var <- 1 
var_unscaled <- aggregate(as.numeric(training[,var]),by=list(som_model$unit.classif),FUN = mean, simplify=TRUE)[,2] 
plot(som_model, type = "property", property=var_unscaled, main = names(training)[var], palette.name=coolBlueHotRed) 

gibi:

plot(som_model, type="codes") 

enter image description here

anlamıyorum kod bölümüdür Anladığım kadarıyla, kodun bu bölümü neye benzediğini görmek için haritadaki değişkenlerden birini çiziyormuş gibi görünüyor, ama burası problemlerle karşılaşıyorum. Ben kod bölümünü çalıştırdığınızda ben uyarı olsun:

Warning message: 
In bgcolors[!is.na(showcolors)] <- bgcol[showcolors[!is.na(showcolors)]] : 
number of items to replace is not a multiple of replacement length 

ve arsa üretir: sadece bazı nasıl doğru görünmüyor

enter image description here ...

Şimdi düşündüğüm şey, toplama işlevinin verileri yeniden sipariş etme biçimidir. Var_unscaled uzunluğu 789 ve som_model $ data, training [, var] ve unit.classif uzunlukları 2755 uzunluğundadır. Birleştirilmiş verileri çizmeyi denedim, sonuç bir uyarı değildi, fakat anlaşılmayan bir grafik (beklendiği gibi).

Şimdi bunu yaptım çünkü unit.classif'in içinde çok sayıda yinelenen sayı var ve bu yüzden boyut küçülüyor.

Soru şu, uyarmak için endişeleniyor muyum? Doğru bir grafik mi üretiyor? "Property" nin arsada aranan bölümü tam olarak nedir? Verileri "toplayabilmem" için farklı bir yol var mı?

+0

arsa doğru değil o zaman evet, uyarı dert eğer varsa. Gerçekte, her zaman neden uyarı aldığınızı düşünmelisiniz. Tamamen kontrol etmedim, ancak 'toplamanın' sonunda bir alt kümeniz olduğunu fark ettim. Bu gerekli mi? –

+2

Bir [çoğaltılabilir örnek] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-rprorecible-example) sağlamanız gerekir; aynı hata. Aksi halde, verilerinizin bu nesnelerin her birinde nasıl saklandığını veya plan tablosunda nasıl birleştirileceğini bilmenin hiçbir yolu yoktur. – MrFlick

+0

"coolBlueHotRed" paleti nereden geliyor ve uzunluğu nedir? Verilerinizi değil, örnek verileri eşleştirmek için yapılandırılmış olabilir. {[N: 1] gökkuşağı (n, son = 4/6, alfa = alfa) } (n, alfa = 1) işlevi - coolBlueHotRed <: Ama sana renk paleti temin edilebilir –

cevap

0

İçimde noktaları yok tüm harita üzerinde hücrelerin düşünüyorum. 30 30 harita ve yaklaşık 2700 puanınız var. Ortalamada hücre başına yaklaşık 3 puan. Yüksek olasılıkla bazı hücreler 3'ten fazla noktaya sahiptir ve bazı hücreler boştur.

R-blogger'lardaki yayındaki kod, tüm hücrelerin içinde noktalar olduğunda iyi çalışır.Bu bir

var <- 1 
var_unscaled <- aggregate(as.numeric(training[, var]), by = list(som_model$unit.classif), FUN = mean, simplify = TRUE)[, 2] 
plot(som_model, type = "property", property = var_unscaled, main = names(training)[var], palette.name = coolBlueHotRed) 

:

var <- 1 
var_unscaled <- aggregate(as.numeric(data.temp[, data.classes][, var]), 
          by = list(som_model$unit.classif), 
          FUN = mean, 
          simplify = T) 
v_u <- rep(0, max(var_unscaled$Group.1)) 
v_u[var_unscaled$Group.1] <- var_unscaled$x 
plot(som_model, 
    type = "property", 
    property = v_u, 
    main = colnames(data.temp[, data.classes])[var], 
    palette.name = coolBlueHotRed) 

Umarım yardımcı olur sizin verilere çalışmasını sağlamak için

bu kısmını değiştirmek deneyin.

0

Sadece komut dosyasına bu işlevleri ekleyin:

coolBlueHotRed <- function(n, alpha = 1) {rainbow(n, end=4/6, alpha=alpha)[n:1]} 

pretty_palette <- c("#1f77b4","#ff7f0e","#2ca02c", "#d62728","#9467bd","#8c564b","#e377c2")