0
我想看看在以下代碼中生成的最佳和最差執行模型的差異。據我所知,我把bc和oc的情況一樣(代碼是用簡單的字符串替換複製粘貼的)。然而,當我到達oc案例的最後幾行時,R說昏暗是錯誤的。 R是正確的,縮放列表不是oc中的列表,而是一個矩陣,而在bc集合中它們是一個列表。我在做什麼,導致bc和oc的縮放列表有不同的類型?據我所知,lda結果列表是相同的類型,當我手動訪問縮放時,它們在每種情況下似乎都是相同的類型,但是當我將相同的函數應用於lda結果列表時,作爲一個列表得到縮放我得到不同的類型?我在這兩種情況下做了什麼不同?
library("MASS")
all<-read.csv("~/Documents/All BC OC Data.csv")
filtered<-all[,apply(!is.na(all),2,all)]
bc.list.of.lists = list();
for(i in 1:500){
bcnorm.orig <- subset(filtered,filtered$set %in% c('bc','normal'))
c <- nrow(bcnorm.orig[bcnorm.orig$set == 'bc',])
c2 <- nrow(bcnorm.orig)
pis <- c(2+sample(c-2,(c-2)/3),c+sample(c2-c,(c2-c)/3))
bcnorm <- bcnorm.orig[-pis,]
sds <- sapply(bcnorm,sd)
bcnorm <- bcnorm[,sds!=0]
bcpredict <- bcnorm.orig[pis,sds!=0]
sds <- sapply(bcpredict,sd)
bcnorm <- bcnorm[,sds!=0]
bcpredict <- bcpredict[,sds!=0]
met.lda.bc <- lda(as.formula(paste("bcnorm$set ~ bcnorm$", paste(names(bcnorm)[-c(1,2)], collapse = " + bcnorm$"))))
bcnorm <- bcpredict
met.lda.bc.values.predicted <- predict(met.lda.bc, as.data.frame(scale(bcnorm[-c(1,2)])))
wrong <- length(which(met.lda.bc.values.predicted$class != bcnorm$set))
bc.list.of.lists[[i]] <- list(wrong=wrong, lda=met.lda.bc)
}
bc.errors<-sapply(bc.list.of.lists, "[[", "wrong")
bc.first<-bc.list.of.lists[order(bc.errors)][1:10]
bc.first.ldas<-sapply(bc.first, "[[", "lda")
bc.first.scalings<-apply(bc.first.ldas, 2,function(x)x$scaling)
bc.first.scalings<-lapply(bc.first.scalings,function(x)x[,1])
oc.list.of.lists = list();
for(i in 1:500){
ocnorm.orig <- subset(filtered,filtered$set %in% c('oc','normal'))
c <- nrow(ocnorm.orig[ocnorm.orig$set == 'oc',])
c2 <- nrow(ocnorm.orig)
pis <- c(2+sample(c-2,(c-2)/3),c+sample(c2-c,(c2-c)/3))
ocnorm <- ocnorm.orig[-pis,]
sds <- sapply(ocnorm,sd)
ocnorm <- ocnorm[,sds!=0]
ocpredict <- ocnorm.orig[pis,sds!=0]
sds <- sapply(ocpredict,sd)
ocnorm <- ocnorm[,sds!=0]
ocpredict <- ocpredict[,sds!=0]
met.lda.oc <- lda(as.formula(paste("ocnorm$set ~ ocnorm$", paste(names(ocnorm)[-c(1,2)], collapse = " + ocnorm$"))))
ocnorm <- ocpredict
met.lda.oc.values.predicted <- predict(met.lda.oc, as.data.frame(scale(ocnorm[-c(1,2)])))
wrong <- length(which(met.lda.oc.values.predicted$class != ocnorm$set))
oc.list.of.lists[[i]] <- list(wrong=wrong, lda=met.lda.oc)
}
oc.errors<-sapply(oc.list.of.lists, "[[", "wrong")
oc.first<-oc.list.of.lists[order(oc.errors)][1:10]
oc.first.ldas<-sapply(oc.first, "[[", "lda")
oc.first.scalings<-apply(oc.first.ldas, 2,function(x)x$scaling)
oc.first.scalings<-lapply(oc.first.scalings,function(x)x[,1])
你能把你的問題降到最低嗎?它是否可重複使用? –
儘管我可以得到它,但它是可重複的(每次運行都會發生),但我無法提供各種原因的數據。 –
模擬數據。 –