我尝试过交叉验证,但没有响应,这是一个以实现为中心的技术问题。
我在R中使用ada::ada创建了一个基于决策树的增强模型。
它通常返回一个矩阵,其中包含与预期结果相比的预测结果的统计数据。
差不多是这样的:
FALSE TRUE
FALSE 11023 1023
TRUE 997 5673很酷很准确。
现在是预测新数据的时候了。所以我说:
predict(myadamodel, newdata=giveinputs())但我得到的不是一个简单的答案--对/错:
[1] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[25] TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE
[49] FALSE FALSE
Levels: FALSE TRUE我假设这个ada对象是一个诱捕器,我收到了每个分类器的答复。
但最终我需要一个直截了当的答案:对/错。如果这就是我所能得到的,我需要知道"ada“函数是如何计算用于构建统计数据的最终答案的。我会检查一下,但是"ada“函数是预编译的。
我怎样才能得到最终的真/FALS答案,以符合ada从学习阶段返回的统计数字?
我附了一个例子,你可以复制粘贴:
mydata = data.frame(a=numeric(0),b=double(0),r=logical(0))
for(i in -10:10)
for(j in 20:-4)
mydata[length(mydata[,1])+1,] = c(a=i,b=j, r= (j > i))
myada = ada(mydata[,c("a","b")], mydata[,"r"])
print(myada);
predict(myada, data.frame(a=4,b=7))请注意,由于某种原因,r列表示为"0“"1”。我不知道为什么,也不知道如何告诉data.frame不要将TRUE FALSE转换为0,1,但想法是一样的。
发布于 2014-07-25 21:56:28
好的。这个可复制的例子很有帮助。当您传递只有一行的新数据时,它似乎是predict工作方式中的一个怪癖。在本例中,您将从每个迭代中得到一个估计值(默认迭代次数为50)。请注意,只有在执行时才返回两个值。
predict(myada, data.frame(a=4:3,b=7:8))这主要是因为在预测函数中使用了sapply。我们可以自己制造没有这个问题的东西。
predict.ada <- ada:::predict.ada
body(predict.ada)[[12]] <- quote( tmp <- t(do.call(rbind,
lapply(1:iter, function(i) f(f = object$model$trees[[i]],
dat = newdata)))))然后我们就可以跑
predict.ada(myada, newdata=data.frame(a=4,b=7))
# [1] TRUE
# Levels: FALSE TRUE因此,这个新的值被预测为真。这在ada_2.0-3中进行了测试,并可能在其他版本中失效。
此外,在测试数据中,当您使用c()合并元素时,它们必须是所有相同的数据类型,否则它们将被转换为可以容纳所有值的最低公共分母数据类型。如果是混合类型,最好使用list()。例如
mydata[length(mydata[,1])+1,] = list(a=i,b=j, r= (j > i))https://stackoverflow.com/questions/24963616
复制相似问题