我有一个数据集,可以使用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/