2016-04-02 6 views
0

Sorunumun bu kadar uzun ve ayrıntılı açıklaması için şimdiden özür dilerim. Shuffle100my_List ve Final_lists (aşağıda) işlevlerini kullanarak bir ana listede sınıflandırma ağacı sınıfı olasılıklarından (gruplandırma faktörü: G8 ve V4) 10 iç içe geçmiş veri karesi ürettim. Bu basit soruyu sorduğum için üzgünüm ama anlayamadım. Bir çözüm bulursanız çok teşekkürler.Bir liste içinde sınıflandırma ağacı sınıf olasılıklarının iç içe geçmiş listelerinden karışıklık matrisleri oluşturmak için bir işlev uygulamak

Amaç 1

(1) Her alt-grup için

Fonksiyonlar shuffle100, my_list ve Final_lists

library(plyr) 
library(caret) 
library(e1071) 
library(rpart) 

set.seed(1235) 

shuffle100 <-lapply(seq(10), function(n){ #Select the production of 10 dataframes 
subset <- normalised_scores[sample(nrow(normalised_scores), 80),] #Shuffle rows 
subset_idx <- sample(1:nrow(subset), replace = FALSE) 
subset <- subset[subset_idx, ] #training subset 
subset1<-subset[-subset_idx, ] #test subset 
subset_resampled_idx <- createDataPartition(subset_idx, times = 1, p = 0.7, list = FALSE) #70 % training set  
subset_resampled <- subset[subset_resampled_idx, ] 
ct_mod<-rpart(Matriline~., data=subset_resampled, method="class", control=rpart.control(cp=0.005)) #10 ct 
ct_pred<-predict(ct_mod, newdata=subset[, 2:13]) 
ct_dataframe=as.data.frame(ct_pred)#create new data frame 
confusionMatrix(ct_dataframe, normalised_scores$Family) 
} 

    Error in sort.list(y) : 'x' must be atomic for 'sort.list' 
    Have you called 'sort' on a list? 

1: lapply(seq(10), function(n) { 
subset <- normalised_scores[sample(nrow(normalised_scores 
2: FUN(X[[i]], ...) 
3: confusionMatrix(ct_dataframe, normalised_scores$Family) 
4: confusionMatrix.default(ct_dataframe, normalised_scores$Family) 
5: factor(data) 
6: sort.list(y) 

#Produce three columns: Predicted, Actual and Binary 
my_list <- lapply(shuffle100, function(df){#Create two new columns Predicted and Actual 
        if (nrow(df) > 0) 
       cbind(df, Predicted = c(""), Actual = c(""), Binary = c("")) 
     else 
       bind(df, Predicted = character(), Actual = c(""), Binary = c ("")) 
       }) 

#Fill the empty columns with NA's 
Final_lists <- lapply(my_list, function(x) mutate(x, Predicted = NA, Actual = NA, Binary = NA)) 

#Create a dataframe from the column normalised_scores$Family to fill the Actual column 

Actual_scores<-Final_normalised3$Family 
Final_scores<-as.data.frame(Actual_scores) 

#Fill in the Predicted, Actual and Binary columns 

Predicted_Lists <- Final_lists %>% 
mutate(Predicted=ifelse(G8 > V4, G8, V4)) %>% # assuming if G8 > V4 then Predicted=G8 
mutate(Actual=Final_scores) %>% # your definition of Actual is not clear 
mutate(Binary=ifelse(Predicted==Actual, 1, 0)) 

#Error messages 

Error in ifelse(G8 > V4, G8, V4) : object 'G8' not found 
10 karışıklık matrisleri üretmek üzere işlev shuffle100 içine caret package fonksiyonunu confusionMatrix() eklemek istiyoruz

Amaç 2

V4 veya G8 sütunları için satırlardaki olasılıkların, birbirinden büyük veya küçük olması koşuluyla, her alt küme için Predicted, Actual ve Binary sütunlarını doldurmak üzere bir işlev veya döngü yazmak için. Ancak, ben fonksiyonlar için doğru sözdizimi ile karıştırılmamalıdır ve döngüler am sütunları doldurulur bu biçimde olmalıdır

for(i in 1:length(Final_lists)){ #i loops through each dataframe in the list 
    for(j in 2:nrow(Final_lists[[i]])){ #j loops through each row of each dataframe in the list 
    if(Final_lists[[i]][j, "G8"] > Final_lists[[i]][j, "V4"]) { #if the probability of G8 > V4 in each row of each dataframe in each list 
     Final_lists[[i]][j, [j["Predicted" == "NA"]] ="G8" #G8 will be filled into the same row in the `Predicted' column 
     } 
    else { 
    Final_lists[[i]][j, [Predicted == "NA"]] ="V4" #V4 will be filled into the same row in the `Predicted' column 
    } 
print(i) 
    } 
    } 

Her alt kümesi çalışmıyor

A for loop:

   G8  V4 Predicted Actual Binary 
     0.1764706 0.8235294  V4  V4  1 
     0.7692308 0.2307692  G8  V4  0 
     0.7692308 0.2307692  G8  V4  0 
     0.7692308 0.2307692  G8  V4  0 
     0.7692308 0.2307692  G8  V4  0 
     0.1764706 0.8235294  V4  V4  1 

Dolum Predicted column

G8> V4 olasılığı varsa, boş Predicted satırına G8 atanır. Ancak, V4> G8 ise, boş "Öngörülen" satırına V4 atanacaktır.

Actual sütun

Dolum Bu data_frame içerdiği her bir alt-grup için sınıflandırma ağacı modelleri, gerçek tahmin sınıf olasılığı tahminler olan `Binary sütun

içinde

doldurulması normalised_scores Predicted ve Actual satırları aynı sonuca sahipse (örneğin G8 ve G8), Binary satırına 1 değeri atanır. Ancak, Predicted vesatırlarısütunları farklıdır (ör. G8 ve V4), sonra Binary satır 0

Bu çalışma kodunu kullanarak bu hedefleri başardım, ancak, bu kodun ana listede alt kümelere nasıl uygulanacağı konusunda emin değilim.

    G8  V4 Predicted Actual Binary 
      0.1764706 0.8235294  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.7692308 0.2307692  NA  NA  NA 
      0.1764706 0.8235294  NA  NA  NA 

tekrarlanabilir kukla veri

usta-listeden tek alt kümesi için
 set.seed(1235) 

    # Randomly permute the data before subsetting 
     mydat_idx <- sample(1:nrow(Final_normalised_scores), replace = FALSE) 
     mydat <- Final_normalised3[mydat_idx, ] 

     mydat_resampled_idx <- createDataPartition(mydat_idx, times = 1, p = 0.7, list = FALSE) 
     mydat_resampled <- mydat[mydat_resampled_idx, ] # Training portion of the data 
     mydat_resampled1 <- mydat[-mydat_resampled_idx, ] 

     #Classification tree 

     ct_mod <- train(x = mydat_resampled[, 2:13], y = as.factor(mydat_resampled[, 1]), 
      method = "rpart", trControl = trainControl(method = "repeatedcv", number=10, repeats=100, classProbs = TRUE)) 

     #Model predictions 
     ct_pred <- predict(ct_mod, newdata = mydat[ , 2:13], type = "prob") 
     Final_Predicted<-as.data.frame(ct_pred) 

     #Produce three empty columns: Predicted, Actual and Binary 

     Final_Predicted$Predicted<-NA 
     Final_Predicted$Actual<-NA 
     Final_Predicted$Binary<-NA 

     #Fill in the Predicted column 

     for (i in 1:length(Final_Predicted$G8)){ 
     if(Final_Predicted$G8[i]>Final_Predicted$V4[i]) { 
      Final_Predicted$Predicted[i]<-"G8" 
      } 
     else { 
      Final_Predicted$Predicted[i]<-"V4" 
      } 
      print(i) 
      } 

     #Fill in the Actual column using the actual predictions from the dataframe normalised_scores 

     Final_Predicted$Actual<-normalised_scores$Family 

     #Fill in the Binary column 

     for (i in 1:length(Final_Predicted$Binary)){ 
      if(Final_Predicted$Predicted[i]==Final_Predicted$Actual[i]) { 
       Final_Predicted$Binary[i]<-1 
       } 
     else { 
       Final_Predicted$Binary[i]<-0 
       } 
       print(i) 
       } 

Altkümeyi kodunu Çalışma

SummarySE (Rmisc package) to produce a barplot with error bars (ggplot2)

+1

Eğer bu sorunu çözerseniz daha iyi şansınız olabilir. Anladığım kadarıyla, veri çerçevelerinin bir listesi (ya da veri şemalarının bir listesi) üzerinden yürümeyi ve veri çerçevesindeki diğer sütunlardan ya da bir arkadaşı olan bir takım veri kümesinden gelen verileri kullanarak sütunları doldurmak istersiniz. iç içe geçmiş listeyle bire bir yazışma). Bunun yerine, iç içe geçmiş liste yapısının bir alt kümesini ve listenin bir öğesi için görevinizi nasıl gerçekleştireceğinize ilişkin bazı örnek kodlar gönderir misiniz? Ayrıca bana neden Final_normalised' dahil ettiğini açık değil. – mikeck

+0

Merhaba mikeck, Tavsiyeniz için teşekkür ederiz. Soruyu bir alt küme için çalışma kodu eklemenin yanı sıra iki alt kısma böldüm. Umarım bu format daha iyidir. Teşekkür ederim. En iyisi ve dikkat edin –

cevap

1

sorunun Açıklamanız biraz uzun, ama olası bir dplyr çözümü şöyle görünecekti:

Final_Predicted$Actual <- ... # fill actual values 
Final_Predicted <- Final_Predicted %>% 
       mutate(Predicted=ifelse(G8 > V4, G8, V4)) %>% # assuming if G8==V4 then Predicted=V4 
       mutate(Binary=ifelse(Predicted==Actual, 1, 0)) 

Aslında bu çözüm çalıştırmak vermedi, ancak bu doğrultuda kısa ve basit bir şey olmalıdır. Bu yardımcı olur umarım.

+0

Merhaba J Faleiro, sorumu cevapladığınız için çok teşekkür ederim ve çok takdir edildi. Sağladığınız kodu çalıştırdım ve "G8" bulunamadığını (yukarıda eklenmiş) belirten bir hata mesajı verdi. Actual'ın daha açık bir tanımını yapmak için yukarıdaki bazı kodları ve metinleri düzenledim. –

+0

"Gerçek" sütunu, normalleştirilmiş_skolar olarak adlandırılan verilerden (G8 veya V4 - normalised_scores $ Family) gruplama faktöründen gerçek sınıf olasılık tahminlerini göstermelidir (yeniden üretilebilir verinin bağlantısı bu sayfanın en altındadır). Başka bir yardımda bulunursanız, kelimeler şükranlarımı ifade edemez. Şimdiden çok teşekkürler. –

+0

Yeni kodunuzu takip etmek üzere düzenlenmiş –

İlgili konular