R - SVM 训练后的奇怪错误/警告 (e1071)
Posted
技术标签:
【中文标题】R - SVM 训练后的奇怪错误/警告 (e1071)【英文标题】:R - weird error/warning after SVM training (e1071) 【发布时间】:2014-05-05 18:05:15 【问题描述】:我在训练 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]
【问题讨论】:
在训练和测试之前,您是否检查了自述文件以格式化特征数据? 【参考方案1】:在您的训练数据集中检查没有值的变量。一种方法是对所有列求和。
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])
【讨论】:
【参考方案2】:如果有些词很少出现,那么训练数据中的相应特征可能只有 0 的可能性不大。我相信这可能会导致此警告。
【讨论】:
这更像是一条评论——但是如何解决这个问题呢?他们是否需要减少列的数量(可能使用 PCA 或类似的东西?)以上是关于R - SVM 训练后的奇怪错误/警告 (e1071)的主要内容,如果未能解决你的问题,请参考以下文章