1
我一直在玩R在R中執行CV,但遇到了LOOCV中摺疊返回值的奇怪問題。隨機數據生成導致隨機標籤上的良好預測
首先,我會隨機生成數據以及標籤,然後我將適合randomForest應該只是噪音。從返回的循環中,我不僅獲得了良好的AUC,而且獲得了來自t檢驗的顯着p值。我不明白這是如何在理論上發生的,所以我很好奇,如果我試圖生成數據/標籤的方式是最好的?
這是顯示我的問題的代碼片段。
library(randomForest)
library(pROC)
n=30
p=900
set.seed(3)
XX=matrix(rnorm(n*p, 0, 1) , nrow=n)
YY=as.factor(sample(c('P', 'C'), n, replace=T))
resp = vector()
for(i in 1:n){
fit = randomForest(XX[-i,], YY[-i])
pred = predict(fit, XX[i,], type = "prob")[2]
resp[i] <- pred
}
t.test(resp~YY)$p.value
roc(YY, resp)$auc
我試圖產生所有這些數據有多種方法導致同樣的事情
XX=matrix(runif(n*p), nrow=n)
XX=matrix(rnorm(n*p, 0, 1) , nrow=n)
和
random_data=matrix(0, n, p)
for(i in 1:n){
random_data[i,]=jitter(runif(p), factor = 1, amount = 10)
}
XX=as.matrix(random_data)
由於隨機森林在這種情況下,導致我發現相關預測相信數據可能不是真正的隨機數據。有沒有更好的方法可以生成數據或生成隨機標籤?這可能是R的問題嗎?
@ChiPak用'set.seed(1)'我得到的〜0.68的p值,但與'set.seed(3)'我得到一個P-值爲〜0.00095。 'roc'來自'pROC',我將編輯我的帖子,將其包含在代碼中 – TCulos
我真的不知道R,所以也許我完全不在,但尺寸對創建好的隨機數很重要。一行上的隨機數與球體上的不一樣。隨機樣本的位置也不只是隨機數。也許您至少需要分層抽樣? – starmole
您的小樣本量可能是一個問題。嘗試一個更大的「n」,比如500. – useR