训练e1071 SVM后出现了一个奇怪的错误。它是一个大型(10000x1000)稀疏矩阵(DTM)上的文本文档多类分类。似乎功能(列)出了问题。
summary(svmModel)
有效。结果可能会更好(一如既往(;)。
然而,有些事情是错误的,这可能是结果不一致的原因。
> svmModel <- svm(labels ~., data= train[,-1], cross = 10, seed = 1234, kernel="linear")
Warning message:
In svm.default(x, y, scale = scale, ..., na.action = na.action) :
Variable(s) ‘abgebildet’ and
...
‘could’ and [... truncated]
答案 0 :(得分:3)
在训练数据集中检查没有值的变量。一种方法是通过获取所有列的总和。
colSums(train[,!colnames(train)=yvar])
如果我无法删除的自变量的值为0,我通常会将分层样本作为训练数据集。它通常用于取值为0和1的标志变量。
#stratified sampling
library(sampling)
Training<- strata(train, stratanames = "emptyvar", size = c(1000,500))
#this creates a sample of size 1000 and 500 for 0 and 1 each
strata.train<-getdata(train,Training)
#it creates additional 3 columns which you can remove
train<-strata.train[,!colnames(strata.train) %in% c("ID_unit","Prob","Stratum")]
另一方面,您还可以向scale=F
添加svm()
并预先缩放变量。这避免了svm函数缩放变量,导致z值为变量为空的NaN。但是,您需要扩展可以手动执行的变量。
cols<-c(1:5) #say you want to scale the first 5 variables
library(plyr)
standardize <- function(x) as.numeric((x - mean(x)) / sd(x))
train[cols] <- plyr::colwise(standardize)(train[cols])
答案 1 :(得分:2)
如果有很少出现的话,那么训练数据中的相应特征可能不会只有0。我相信这会引起这种警告。