我有一个数据集,我在其中使用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)如果不是,我如何对虚拟变量进行分组,以便rf知道它们在一起?
发布于 2012-02-14 03:25:38
这是可以的,如果你把这些因素作为因素,这就是幕后发生的事情。对于大多数机器学习而言,因子的不同级别是不同的特征。想一个像test outcome ~ school这样的随机例子:也许去A学校可以很好地预测你是否通过测试,但不能预测B学校或C学校。那么,A学校的功能将是有用的,但其他功能就没有用了。
这在caret vignette文档之一中有所介绍:http://cran.r-project.org/web/packages/caret/vignettes/caretMisc.pdf
此外,caret附带的cars数据集应该是一个有用的示例。它包含两个因素-“制造商”和“汽车类型”-这两个因素已被虚拟编码为一系列用于机器学习的数字特征。
data(cars, package='caret')
head(cars)https://stackoverflow.com/questions/9253168
复制相似问题