首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ada::predict.ada是如何工作的?

ada::predict.ada是如何工作的?
EN

Stack Overflow用户
提问于 2014-07-25 20:01:51
回答 1查看 1.1K关注 0票数 0

我尝试过交叉验证,但没有响应,这是一个以实现为中心的技术问题。

我在R中使用ada::ada创建了一个基于决策树的增强模型。

它通常返回一个矩阵,其中包含与预期结果相比的预测结果的统计数据。

差不多是这样的:

代码语言:javascript
复制
       FALSE  TRUE
FALSE  11023  1023  
TRUE     997  5673

很酷很准确。

现在是预测新数据的时候了。所以我说:

代码语言:javascript
复制
predict(myadamodel, newdata=giveinputs())

但我得到的不是一个简单的答案--对/错:

代码语言:javascript
复制
[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从学习阶段返回的统计数字?

我附了一个例子,你可以复制粘贴:

代码语言:javascript
复制
 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,但想法是一样的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-25 21:56:28

好的。这个可复制的例子很有帮助。当您传递只有一行的新数据时,它似乎是predict工作方式中的一个怪癖。在本例中,您将从每个迭代中得到一个估计值(默认迭代次数为50)。请注意,只有在执行时才返回两个值。

代码语言:javascript
复制
predict(myada, data.frame(a=4:3,b=7:8))

这主要是因为在预测函数中使用了sapply。我们可以自己制造没有这个问题的东西。

代码语言:javascript
复制
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)))))

然后我们就可以跑

代码语言:javascript
复制
predict.ada(myada, newdata=data.frame(a=4,b=7))
# [1] TRUE
# Levels: FALSE TRUE

因此,这个新的值被预测为真。这在ada_2.0-3中进行了测试,并可能在其他版本中失效。

此外,在测试数据中,当您使用c()合并元素时,它们必须是所有相同的数据类型,否则它们将被转换为可以容纳所有值的最低公共分母数据类型。如果是混合类型,最好使用list()。例如

代码语言:javascript
复制
mydata[length(mydata[,1])+1,] = list(a=i,b=j, r= (j > i))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24963616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档