我需要将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
会提供任何帮助或提示。
答案 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函数已经是因子变量,目前它不处理非因子的边缘情况。确保在调用方法之前强制转换为一个因子。