我有一个数据集,可以使用model.matrix()函数将因子变量转换为虚拟变量。我的数据有10个这样的列,每个列具有3个级别(2,3,4),并且我一直在分别为它们创建虚拟变量。

xFormData <- function(dataset){
    mm0 <- model.matrix(~ factor(dataset$type) , data=dataset)
    mm1 <- model.matrix(~ factor(dataset$type_last1), data = dataset)
    mm2 <- model.matrix(~ factor(dataset$type_last2), data = dataset)
    mm3 <- model.matrix(~ factor(dataset$type_last3), data = dataset)
    mm4 <- model.matrix(~ factor(dataset$type_last4), data = dataset)
    mm5 <- model.matrix(~ factor(dataset$type_last5), data = dataset)
    mm6 <- model.matrix(~ factor(dataset$type_last6), data = dataset)
    mm7 <- model.matrix(~ factor(dataset$type_last7), data = dataset)
    mm8 <- model.matrix(~ factor(dataset$type_last8), data = dataset)
    mm9 <- model.matrix(~ factor(dataset$type_last9), data = dataset)
    mm10 <- model.matrix(~ factor(dataset$type_last10), data = dataset)

    dataset <- cbind(dataset, mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7, mm8, mm9, mm10)

dataset
}

我想知道这是否是错误的过程,因为在数据上运行了randomForest并绘制了变量的重要性之后,它分别显示了不同的虚拟变量列。因此,说列61-63是列10的3个虚拟变量,randomForest本身将列62视为重要的预测变量。

我有两个问题:

1)这样可以吗?

2)如果没有,我如何对虚拟变量进行分组,以便射频知道它们在一起?

最佳答案

没关系,如果您将这些因素留为因素,无论如何都是幕后发生的事情。对于大多数机器学习目的而言,因子的不同级别是不同的功能。想一想像test outcome ~ school这样的随机示例:也许去A学校对您是否通过测试很有预测性,但对B学校或C学校不是很成功。那么,A学校功能将非常有用,而其他功能则无济于事。

这在caret插图文件之一中涉及:http://cran.r-project.org/web/packages/caret/vignettes/caretMisc.pdf

同样,cars包含的caret数据集应该是一个有用的示例。它包含2个因子-“制造商”和“汽车类型”-已被虚拟编码为一系列用于机器学习目的的数字特征。

data(cars, package='caret')
head(cars)

关于R模型。矩阵设置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9253168/

10-16 06:52