0

这是我遇到的一个具有挑战性但安静有趣的冲突......我希望我真的能做到这一点,希望有人能在这里帮助我

这是“R”

这是我正在运行的代码,用于从训练中获取 X1 的 R 平方

model=randomForest(X1~.,data=training,importance=TRUE,keep.forest=TRUE)
predicted=predict(model,newdata=testing[,-1])
actual=testing$X1
rsq=1-sum((actual-predicted)^2)/sum((actual-mean(actual))^2)
print(rsq)

这是培训负责人,让您知道它的样子

head(training)
        X1        X2        X3         X4        X5         X6
68   -3.556526  4.588409 -2.756521  -2.742035 11.542023 -18.405807
23   -1.915947 -0.179710 -0.240580  -0.278259 -0.284058   0.553627
129 -24.252174 -4.869564  4.800001 -14.608688  5.255074 -20.228981
5    -1.637680 -1.147827 -2.005795  -1.121750  0.101440  -1.608688
147 -68.289856 -0.626083 19.933334  -6.637680 15.379715 -11.515945

其中有多达 X77 个,其中行数为 73。

我的目标是制作一个循环

model=randomForest(X1~.,data=training,importance=TRUE,keep.forest=TRUE)
predicted=predict(model,newdata=testing[,-1])
actual=testing$X1
rsq=1-sum((actual-predicted)^2)/sum((actual-mean(actual))^2)
print(rsq)

高达 X77

直到

model=randomForest(X77~.,data=training,importance=TRUE,keep.forest=TRUE)
predicted=predict(model,newdata=testing[,-77])
actual=testing$X77
rsq=1-sum((actual-predicted)^2)/sum((actual-mean(actual))^2)
print(rsq)

所以我可以达到 77 的 r 平方

我的最终目标只是取那些 77 r-squared 的平均值


给 Maxim.K 和其他人

rsq=function(i){
model=randomForest(testing[,1]~.,data=training,importance=TRUE,keep.forest=TRUE)
predicted=predict(model,newdata=testing[,-i])
actual=testing[,i]
1-sum((actual-predicted)^2)/sum((actual-mean(actual))^2)
}

rsq=function(i){
model=randomForest(Xi~.,data=training,importance=TRUE,keep.forest=TRUE)
predicted=predict(model,newdata=testing[,-i])
actual=testing[,i]
1-sum((actual-predicted)^2)/sum((actual-mean(actual))^2)
}

我知道第二个在逻辑上没有意义,但这就是我需要的。所以 testing$X1 是 testing[,1],但它不起作用把 testing[,1] 我必须把它放在“X1”的形式

我该怎么做……?

4

1 回答 1

2

我认为 Maxim.K 已经暗示过这一点,但这样的事情会奏效

rsq = function(i) {
  n = colnames(testing)[i]
  model=randomForest(as.formula(paste(n,"~.")),data=training,importance=TRUE,keep.forest=TRUE)
  predicted=predict(model,newdata=testing[,-i])
  actual=testing[[n]]
  1-sum((actual-predicted)^2)/sum((actual-mean(actual))^2)
}
sapply(1:77, rsq)
于 2013-04-18T10:21:18.147 回答