我正在尝试使用R中的SVM为一个类分类构建模型。我已使用is.na(x)
验证我的所有对象都没有NA
值。尽管有很多关于这个主题的帖子,我仍然会收到我无法找到解决方案的错误。
d<-read.xlsx("deals.xlsx", sheetIndex=1, rowIndex=NULL,
startRow=2, endRow=200, colIndex=(1:5),
as.data.frame=T, header=T, colClasses=NA,
keepFormulas=FALSE, encoding="unknown")
d<-subset(d, res=="yes")
x <- subset(d, select = -res) #make x variables
y <- (d$res) #make y variable(dependent)
model <- svm(x,y,type='one-classification')
答案 0 :(得分:3)
遇到类似的问题,this thread很有帮助。简而言之,我的错误与类Date
的两个预测变量以及类factor
的两个预测变量有关。我正在使用{caret}
并为SVM调用{kernlab}
模型。你可以删除这些变量,但是如果你想保留它们(或者从它们派生的变量):
链接线程包含一个建议,用于从Date
变量中创建数字变量,以保持类似日期的建模功能。
对于存储为因子的预测变量,您可以尝试类似下面的函数。该函数将采用当前factor
变量名称,然后添加后缀_LEVEL
,其中LEVEL
是factor
级别的名称。但是,原始功能仍然保留,因此您需要在建模之前或建模步骤中删除这些功能(例如,在公式参考中,将这些列排除在x = df[, -c(1:2)]
之外)。
功能:
for (i in colnames(df[, sapply(df, is.factor)])){
for (level in unique(df[, i])){
df[paste(i, level, sep = "_")] =
as.integer(ifelse(df[, i] == level, 1, -1))
}
}
将df
替换为data.frame
的名称,你应该好好去。
迈克尔
答案 1 :(得分:0)
我有一个类似的问题,我发现我的x数据框包含一个标有值的列。我通过执行以下操作删除了该列:
x<- x[,-1] #where 1 is the number of the column
如果您按照此示例(One-class classification with SVM in R)并输出数据集,您将看到初始数据集df包含标记值,然后x数据框不包含,y仅包含标记变量。