【发布时间】:2015-01-11 13:52:24
【问题描述】:
小问题:是否可以在 caretSBF$score 函数中使用矩阵运算?
动机:在 R 中处理大矩阵时,本机以矩阵方式工作的操作 [e.g. rowMeans(X) ] 通常比一次一行的方法快得多 [例如。应用(X,1,平均值)]。下面是一个基准示例,使用一百万行和 100 列的矩阵:
rows = 1000000
cols = 100
X <- matrix(rnorm(rows*cols),nrow = rows)
ptm <- proc.time()
tt <- apply(X, 1, function(x) { t.test(x[1:50],x[51:100], var.equal = FALSE)$p.value })
proc.time() - ptm
# user system elapsed
# 312.420 0.685 313.633
library(genefilter)
ptm <- proc.time()
ftt <- rowFtests(X, fac = factor(c(rep(0,50), rep(1,50))), var.equal=FALSE)
proc.time() - ptm
# user system elapsed
# 21.400 1.336 23.257
详细信息:在 caret 包中,caretSBF 函数 score 和 filter 可用于选择用于交叉验证建模的特征。我想使用自定义评分函数代替 caretSBF$score (这部分我可以做),但我希望它是矩阵式的(就像上面一样——这部分我不能做)。当我第一次查看这些功能时,我看不出为什么它不起作用的明显原因。我想做这样的事情:
mySBF$score <- function(x, y) {
genefilter::rowFtests(x, fac = y)$p.value
}
代替默认值:
$score
function (x, y)
{
if (is.factor(y))
anovaScores(x, y)
else gamScores(x, y)
}
<environment: namespace:caret>
但我不能让它工作。 caretSBF 不支持矩阵运算吗?
【问题讨论】:
标签: r feature-selection r-caret