【问题标题】:R, DMwR-package, SMOTE-function won't workR、DMwR 包、SMOTE 功能不起作用
【发布时间】:2013-03-30 16:02:14
【问题描述】:

我需要将 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

愿意提供任何帮助或提示。

【问题讨论】:

    标签: r data-mining


    【解决方案1】:

    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&lt;-(*tmp*, value = c("Sepal.Width", "Species", "Sepal.Length" 中的错误: 'names' 属性 [3] 必须与向量 [2] 长度相同

    在Win7 64bit下,不会出现顺序问题!!

    【讨论】:

      【解决方案2】:

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

      如果您将 'y' 转换为因子,SMOTE 将返回而不会出错 - 但合成的观测值具有 x 的 NA 值。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 这解决了我的问题。谢谢!
        猜你喜欢
        • 2015-02-26
        • 2018-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-29
        相关资源
        最近更新 更多