我知道svm
模型需要将分类变量转换为虚拟变量的预处理。但是,当我使用e1071
'ssvm
函数来拟合具有未转换数据的模型时(请参阅train
和test
),不会弹出错误。我假设该函数会自动转换它们。
但是,当我使用转换后的数据(参见train2
和test2
)来拟合 svm 模型时,这个函数给了我不同的结果(如所示,p1
并且p2
不一样)。
谁能告诉我未转换的数据发生了什么?该函数是否只是忽略了分类变量,还是发生了其他事情?
library(e1071)
library(dummies)
set.seed(0)
x = data.frame(matrix(rnorm(200, 10, 10), ncol = 5)) #fake numerical predictors
cate = factor(sample(LETTERS[1:5], 40, replace=TRUE)) #fake categorical variables
y = rnorm(40, 50, 10) #fake response
data = cbind(y,cate,x)
ind = sample(40, 30, replace=FALSE)
train = data[ind, ]
test = data[-ind, ]
#without dummy
data = cbind(y,cate,x)
svm.model = svm(y~., train)
p1 = predict(svm.model, test)
#with dummy
train2 = cbind(train[,-2], dummy(train[,2]))
colnames(train2) = c('y', paste0('X',1:5), LETTERS[1:4])
test2 = cbind(test[,-2], dummy(test[,2]))
colnames(test2) = c('y', paste0('X',1:5), LETTERS[1:4])
svm.model2 = svm(y~., train2)
p2 = predict(svm.model2, test2)