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

4

在训练 e1071 SVM 后,我遇到了一个奇怪的错误。这是一个文本多类分类问题,输入数据是一个非常大的稀疏矩阵(DTM),大小为 10000x1000。看起来特征(列)出了问题。

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]

在训练和测试之前,您是否查看了自述文件中的格式设置功能数据? - kAmol
2个回答

4

检查您的训练数据集中是否存在没有值的变量。一种方法是将所有列的总和相加。

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

另一方面,你也可以在 svm() 中添加 scale=F 并预先缩放变量。这样可以避免 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])

2

如果有一些词很少出现,那么在训练数据中对应的特征可能只有0。我认为这可能会导致此警告。


这更像是一条评论 - 但是如何解决呢?他们需要减少列数吗(也许使用PCA或等效方法)? - rj2700

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接