在插入符号包 - R 中使用 dummyVars 后,分类列被删除
Classification column is removed after using dummyVars in caret package - R
我正在研究 caret 包并遇到了这个问题。
我正在使用 dummyVars
将我的分类列拆分为单独的虚拟变量。似乎 dummyVars
代码删除了输入数据集中的分类列。例如:
library(earth)
data(etitanic)
dummies <- dummyVars(survived ~ ., data = etitanic, levelsOnly = FALSE)
et<-as.data.frame(predict(dummies, newdata = etitanic))
names(et)
[1] "pclass.1st" "pclass.2nd" "pclass.3rd" "sex.female" "sex.male" "age"
[7] "sibsp" "parch"
因此,当我尝试拆分数据时,出现错误。
train = createDataPartition(et$survived, p=.75, list=FALSE)
Error in createDataPartition(et$survived, p = 0.75, list = FALSE) :
y must have at least 2 data points
任何人都可以告诉我这是否是插入符号的 dummyVars 的预期行为。我可以使用 say
轻松地将幸存列添加到数据集中
et$survived<-etitanic$survived
然后训练模型。但我认为必须有更好的方法,否则插入符号包不会删除分类列。我在这里错过了什么吗?有人可以对此进行更多说明吗?
谢谢
据我所知,没有办法保留 classification 列(或者至少不是一个因素;那是因为输出是一个矩阵,因此它总是数字) .这是因为 dummyVars
函数的目的是为因子预测变量创建虚拟变量。它还旨在为基础 R 函数 model.matrix
提供替代方案,后者提供更多选择(model.matrix
也不保留 classification 列)。
此外,也许更重要的是,要求 classification 列是因子 class 且仅是因子 class 的函数提供了一种方法来提供因子作为一个单独的参数(如 e1071
包中的 svm
函数)或明确要求它作为一个单独的参数(如 FNN
包中的 knn
函数)。在这两种情况下,您都不需要在 data.frame 中包含该因素。您只需在要使用的函数中将其作为单独的向量提供。
但是,对于不需要 classification 列为因子类型的情况,还有一种替代方法,在这种情况下,您可以简单地执行以下操作:
library(earth)
data(etitanic)
etitanic2 <- etitanic
#convert the classification colunn to numeric
etitanic2$survived <- as.numeric(etitanic2$survived)
#use formula without specifying the response variable
dummies <- dummyVars( ~ ., data = etitanic, levelsOnly = FALSE)
et<-as.data.frame(predict(dummies, newdata = etitanic))
names(et)
> names(et)
[1] "pclass.1st" "pclass.2nd" "pclass.3rd" "survived" "sex.female" "sex.male" "age"
[8] "sibsp" "parch"
通过将 classification 列转换为数字并且不在公式中指定响应变量,survived
列保留在输出 data.frame 中,但从数字 class.
我正在研究 caret 包并遇到了这个问题。
我正在使用 dummyVars
将我的分类列拆分为单独的虚拟变量。似乎 dummyVars
代码删除了输入数据集中的分类列。例如:
library(earth)
data(etitanic)
dummies <- dummyVars(survived ~ ., data = etitanic, levelsOnly = FALSE)
et<-as.data.frame(predict(dummies, newdata = etitanic))
names(et)
[1] "pclass.1st" "pclass.2nd" "pclass.3rd" "sex.female" "sex.male" "age"
[7] "sibsp" "parch"
因此,当我尝试拆分数据时,出现错误。
train = createDataPartition(et$survived, p=.75, list=FALSE)
Error in createDataPartition(et$survived, p = 0.75, list = FALSE) :
y must have at least 2 data points
任何人都可以告诉我这是否是插入符号的 dummyVars 的预期行为。我可以使用 say
轻松地将幸存列添加到数据集中et$survived<-etitanic$survived
然后训练模型。但我认为必须有更好的方法,否则插入符号包不会删除分类列。我在这里错过了什么吗?有人可以对此进行更多说明吗?
谢谢
据我所知,没有办法保留 classification 列(或者至少不是一个因素;那是因为输出是一个矩阵,因此它总是数字) .这是因为 dummyVars
函数的目的是为因子预测变量创建虚拟变量。它还旨在为基础 R 函数 model.matrix
提供替代方案,后者提供更多选择(model.matrix
也不保留 classification 列)。
此外,也许更重要的是,要求 classification 列是因子 class 且仅是因子 class 的函数提供了一种方法来提供因子作为一个单独的参数(如 e1071
包中的 svm
函数)或明确要求它作为一个单独的参数(如 FNN
包中的 knn
函数)。在这两种情况下,您都不需要在 data.frame 中包含该因素。您只需在要使用的函数中将其作为单独的向量提供。
但是,对于不需要 classification 列为因子类型的情况,还有一种替代方法,在这种情况下,您可以简单地执行以下操作:
library(earth)
data(etitanic)
etitanic2 <- etitanic
#convert the classification colunn to numeric
etitanic2$survived <- as.numeric(etitanic2$survived)
#use formula without specifying the response variable
dummies <- dummyVars( ~ ., data = etitanic, levelsOnly = FALSE)
et<-as.data.frame(predict(dummies, newdata = etitanic))
names(et)
> names(et)
[1] "pclass.1st" "pclass.2nd" "pclass.3rd" "survived" "sex.female" "sex.male" "age"
[8] "sibsp" "parch"
通过将 classification 列转换为数字并且不在公式中指定响应变量,survived
列保留在输出 data.frame 中,但从数字 class.