Sorunumun bu kadar uzun ve ayrıntılı açıklaması için şimdiden özür dilerim. Shuffle100
my_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)
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
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 –