繁体   English   中英

R - SVM训练后的奇怪错误/警告(e1071)

[英]R - weird error/warning after SVM training (e1071)

训练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]

在训练数据集中检查没有值的变量。 一种方法是通过获取所有列的总和。

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])

如果存在很少出现的单词,那么训练数据中的相应特征可能不仅仅具有0。 我相信这会引起这种警告。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM