我在R语言方面是新手,请帮助我理解哪里出了问题。我试图预测一些数据,但predict函数返回的对象(这是一个奇怪的类(因子))包含的数据很少。测试集大小为5886个观测值,160个变量,而predict对象的长度是110… 我期望得到一个预测类别的向量或数据框。我理解错什么了吗?
library(MASS)library(e1071)set.seed(333)data <- read.csv(file="D:\\MaсhLearningAssign\\pml-training.csv", head=TRUE, sep=",")index <- 1:nrow(data)testindex <- sample(index, trunc(length(index)*30/100))train <- data[-testindex, ]test <- data[testindex, ]model <- svm(classe~., data = train, kernel="radial", gamma=0.001, cost=10)prediction <- predict(model, test)summary(prediction)Output: A B C D E 28 24 25 12 22
回答:
svm
无法处理缺失的观测值,而你的数据集中充满了NA值:
> dim(data[complete.cases(data), ])[1] 406 160
你可以尝试删除包含NA值的列,然后再训练svm
> data <- data[, which(colSums(apply(data, 2, is.na)) == 0)]> dim(data)[1] 19622 93
现在你可以尝试分割你的数据并拟合svm
。不过要小心。数据集仍然相当大,而svm
对资源消耗较大。
提示:我查看了你的数据,如果它是我认为的那样,请务必仔细阅读数据集描述。你有两种完全不同的行类型。这不仅能解释NA值的丰富性,还能提供一个有助于预测的想法,考虑到你的测试集。