Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 随机数据生成导致对随机标签的良好预测_R_Random_Cross Validation_Supervised Learning_Data Generation - Fatal编程技术网

R 随机数据生成导致对随机标签的良好预测

R 随机数据生成导致对随机标签的良好预测,r,random,cross-validation,supervised-learning,data-generation,R,Random,Cross Validation,Supervised Learning,Data Generation,我一直在尝试在R中实现CV,但在LOOCV的折叠中遇到了一个奇怪的返回值问题 首先,我将随机生成数据和标签,然后我将在应该只是噪声的基础上拟合一个随机森林。从返回的循环中,我不仅得到了良好的AUC,而且通过t检验得到了显著的p值。我不明白这在理论上是如何发生的,所以我很好奇我尝试生成数据/标签的方法是否最好 下面是一个代码片段,显示了我的问题 library(randomForest) library(pROC) n=30 p=900 set.seed(3) XX=matrix(rnorm(n

我一直在尝试在R中实现CV,但在LOOCV的折叠中遇到了一个奇怪的返回值问题

首先,我将随机生成数据和标签,然后我将在应该只是噪声的基础上拟合一个随机森林。从返回的循环中,我不仅得到了良好的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


因为randomForest正在这个场景中寻找相关的预测因子,这让我相信数据可能不是真正随机的。是否有更好的方法生成数据或生成随机标签?这可能是R的问题吗

这是部分答案:我修改了roc函数调用,以确保AUC值的分布在0和1之间。然后我运行了20次。平均AUC和p值分别为0.73和0.12。改进了,但仍然比随机的好

library(ROCR)
library(randomForest)
library(pROC)
n=30
p=900

pvs=vector()
aucs=vector()
for (j in seq(20)){
    XX=matrix(rnorm(n*p, 0, 1) , nrow=n)
    YY=as.factor(sample(c('C', 'P'), 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
    }  
    pvs[j]=t.test(resp~YY)$p.value
    aucs[j]=roc(YY, resp, direction='>')$auc
}
库(ROCR)
图书馆(森林)
图书馆(pROC)
n=30
p=900
pvs=向量()
aucs=向量()
(见下文(20)中的j){
XX=矩阵(rnorm(n*p,0,1),nrow=n)
YY=换算系数(样本(c('c','P'),n,替换=T))
resp=向量()
for(1:n中的i){
拟合=随机森林(XX[-i,],YY[-i])
pred=预测(拟合,XX[i,],type=“prob”)[2]

resp[i]这是一个部分答案:我修改了您的roc函数调用,以确保AUC值的分布在0和1之间。然后我运行了20次。平均AUC和p值分别为0.73和0.12。有所改进,但仍优于随机

library(ROCR)
library(randomForest)
library(pROC)
n=30
p=900

pvs=vector()
aucs=vector()
for (j in seq(20)){
    XX=matrix(rnorm(n*p, 0, 1) , nrow=n)
    YY=as.factor(sample(c('C', 'P'), 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
    }  
    pvs[j]=t.test(resp~YY)$p.value
    aucs[j]=roc(YY, resp, direction='>')$auc
}
库(ROCR)
图书馆(森林)
图书馆(pROC)
n=30
p=900
pvs=向量()
aucs=向量()
(见下文(20)中的j){
XX=矩阵(rnorm(n*p,0,1),nrow=n)
YY=换算系数(样本(c('c','P'),n,替换=T))
resp=向量()
for(1:n中的i){
拟合=随机森林(XX[-i,],YY[-i])
pred=预测(拟合,XX[i,],type=“prob”)[2]

resp[i]@ChiPak与
set.seed(1)
p值约为0.68,但与
set.seed(3)相比
我得到了~0.00095的p值。
roc
来自
pROC
,我将编辑我的帖子,将其包含在编码器中我真的不知道R,所以可能我完全不知道,但是尺寸对于创建好的随机数非常重要。直线上的随机数与球体上的随机数不同。随机样本位置也不仅仅是Random数字。也许你至少需要分层抽样?你的样本量小可能会有问题。尝试一个更大的
n
,比如500。在玩了更多的游戏后,当你增加
n
或者当你将其从LOOCV改为K倍时,问题似乎消失了(用K!=
n
)@useR在这个例子中,我可以增加
n
,但是如果我要分析真实的高维小观测计数数据,这个问题仍然会困扰着梅斯马拉样本。众所周知,梅斯马拉样本的行为是这样的。它是完全随机的,是预期的。@ChiPak with
set.seed(1)
I得到的p值约为0.68,但是
set.seed(3)
我得到了~0.00095的p值。
roc
来自
pROC
,我将编辑我的帖子,将其包含在编码器中我真的不知道R,所以可能我完全不知道,但是尺寸对于创建好的随机数非常重要。直线上的随机数与球体上的随机数不同。随机样本位置也不仅仅是Random数字。也许你至少需要分层抽样?你的样本量小可能会有问题。尝试一个更大的
n
,比如500。在玩了更多的游戏后,当你增加
n
或者当你将其从LOOCV改为K倍时,问题似乎消失了(用K!=
n
)@useR在这个例子中,我可以增加
n
,但如果我要分析真实的高维小观测计数数据,这个问题仍然会困扰着已知的梅斯马拉样本。它完全是随机和预期的。
library(ROCR)
library(randomForest)
library(pROC)
n=30
p=900

pvs=vector()
aucs=vector()
for (j in seq(20)){
    XX=matrix(rnorm(n*p, 0, 1) , nrow=n)
    YY=as.factor(sample(c('C', 'P'), 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
    }  
    pvs[j]=t.test(resp~YY)$p.value
    aucs[j]=roc(YY, resp, direction='>')$auc
}