首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用()和predict()

使用()和predict()
EN

Stack Overflow用户
提问于 2010-01-13 06:01:26
回答 2查看 529关注 0票数 1

我试图在R.中的某些分类代码中使用外层函数和预测,为了方便起见,我们将在本文中假设我们有两个向量,分别为alphabeta,分别包含0和1。我正在寻找一种简单而有效的方法来传递所有alpha< code >E29和E 110betaE 211到E 112预测E 213的所有组合。

我构造了下面的代码来模仿海量库中的lda函数,所以我使用的不是"lda",而是“分类器”。需要注意的是,中的预测方法依赖于(alpha,β)对。

当然,我可以使用嵌套的for循环来完成这个任务,但是我试图避免这种方法。

以下是我理想中想做的事情:

代码语言:javascript
复制
alpha <- seq(0, 1)
beta <- seq(0, 1)
classifier.out <- classifier(training.data, labels)
outer(X=alpha, Y=beta, FUN="predict", classifier.out, validation.data)

这是一个问题,因为alpha和beta不是predict中的前两个参数。

所以,为了避开这个问题,我把最后一行改为

代码语言:javascript
复制
outer(X=alpha, Y=beta, FUN="predict", object=classifier.out, data=validation.data)

请注意,我的验证数据有40个观察,还有4对可能的alpha和beta。虽然我说错了

代码语言:javascript
复制
dims [product 4] do not match the length of object [40]

我尝试了一些其他的东西,其中一些是有效的,但远不是简单的。有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-13 16:25:27

问题是,外部期望它的函数被向量化(也就是说,它将用它想要执行的所有参数的向量调用一次预测)。因此,当调用一次predict时,返回其结果(碰巧长度为4),外部抱怨是因为它不等于预期的40。

解决这一问题的一种方法是使用Vectorize。未经测试的代码:

代码语言:javascript
复制
outer(X=alpha, Y=beta, FUN=Vectorize(predict, vectorize.args=c("alpha", "beta")), object=classifier.out, data=validation.data)
票数 3
EN

Stack Overflow用户

发布于 2010-01-13 06:24:31

我想出了一个不错的办法。下面是:

代码语言:javascript
复制
pairs <- expand.grid(alpha, beta)
names(pairs) <- c("alpha", "beta")
mapply(predict, pairs$alpha, pairs$beta, 
    MoreArgs=list(object=classifier.out, data=validation.data))

有人有更简单更高效的东西吗?我很想知道,因为我在这个问题上花了太长时间。:(

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2054772

复制
相关文章

相似问题

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