R,DMwR-package,SMOTE-function不起作用

时间:2013-04-03 16:17:57

标签: r data-mining

我需要将smote算法应用于数据集,但无法使其工作。

示例:

x <- c(12,13,14,16,20,25,30,50,75,71)
y <- c(0,0,1,1,1,1,1,1,1,1)

frame <- data.frame(x,y)

library(DMwR)

smotedobs <- SMOTE(y~ ., frame, perc.over=300)

这会出现以下错误:

Error in scale.default(T, T[i, ], ranges) : subscript out of bounds
In addition: Warning messages:
1: In FUN(newX[, i], ...) :
  no non-missing arguments to max; returning -Inf
2: In FUN(newX[, i], ...) : no non-missing arguments to min; returning Inf

会提供任何帮助或提示。

3 个答案:

答案 0 :(得分:4)

我没有完整的答案。我可以提供另一条线索:

如果你转换了&#39; y&#39;对于一个因子,SMOTE将无错误地返回 - 但是合成的观测值具有x的NA值。

答案 1 :(得分:4)

SMOTE在OS Win7 32位中有一个错误, 它假设参数'form'中的目标变量是数据集中的最后一列,下面的代码将解释

library(DMwR)
data(iris)
# data <- iris[, c(1, 2, 5)]  # SMOTE work
data <- iris[, c(2, 5, 1)]  # SMOTE bug
data$Species <- factor(ifelse(data$Species == "setosa", "rare", "common"))
head(data)
table(data$Species)
newData <- SMOTE(Species ~., data, perc.over=600, perc.under=100)
table(newData$Species)

它将显示以下消息

  

colnames<-中的错误(*tmp*,值= c(“Sepal.Width”,“Species”,“Sepal.Length”:     'names'属性[3]的长度必须与vector [2]

的长度相同

在Win7 64bit中,订单问题不会发生!!

答案 2 :(得分:2)

SMOTE代码中存在错误。假设它被馈送的y函数已经是因子变量,目前它不处理非因子的边缘情况。确保在调用方法之前强制转换为一个因子。