在 randomForest 包中实现的 R 随机森林算法对数字类和整数类的变量的行为是否相同?
最佳答案
是的,randomForest 实现确实对待整数和数字( double )类似。在 RF 模型看来,特征值只能等于/高于或低于给定的断点,因此数字最初是整数还是 double 都没有关系。
- randomForest 确实有因子的异常(exception)(与 sklearn.randomForest 相反,后者甚至将因子视为数字)
引用自源代码:randomForest/R/randomForest.default.R -line 60
if (is.data.frame(x)) {
xlevels <- lapply(x, mylevels)
ncat <- sapply(xlevels, length)
## Treat ordered factors as numerics.
ncat <- ifelse(sapply(x, is.ordered), 1, ncat)
x <- data.matrix(x)
...
}
mylevels 在第 2 行中定义
## mylevels() returns levels if given a factor, otherwise 0.
mylevels <- function(x) if (is.factor(x)) levels(x) else 0
- 因此,如果 x 中的给定特征列是因子,则 xlevels 记录级别/类别,否则为 0。在低级 C++ 中,如果 xlevels 为 0,则特征列被视为数字,否则被视为因子。将 x 转换为 data.matrix 时,所有特征都将转换为数字。
引用第 194 行
storage.mode(x) <- "double"
这里x的存储方式设置为double
关于r - R randomForest 对数字类和整数类的变量的行为是否相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34725766/