Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用GFC.GCCL方法解决R的frbs包中的错误?_R_Rule_Fuzzy - Fatal编程技术网

如何使用GFC.GCCL方法解决R的frbs包中的错误?

如何使用GFC.GCCL方法解决R的frbs包中的错误?,r,rule,fuzzy,R,Rule,Fuzzy,我在使用5倍分层交叉验证的数据集上使用frbspackage inR。我已经实现了分层简历。我对frbs使用GFS.GCCL方法。学习每个折叠中的函数,并使用测试数据预测结果。我收到此错误以及30条相同的警告消息: 错误:找不到对象“临时规则度” 警告:最大值(MF.temp[m,],na.rm=TRUE): 最大值没有未丢失的参数;返回-Inf 我的代码写在下面: library(frbs) data<-read.csv(file.address) data[,3

我在使用5倍分层交叉验证的数据集上使用
frbs
package in
R
。我已经实现了分层简历。我对
frbs使用GFS.GCCL方法。学习每个折叠中的
函数,并使用测试数据预测结果。我收到此错误以及30条相同的警告消息:

错误:找不到对象“临时规则度”

警告:最大值(MF.temp[m,],na.rm=TRUE): 最大值没有未丢失的参数;返回-Inf

我的代码写在下面:

    library(frbs)
    data<-read.csv(file.address)
    data[,30] <- unclass(data[,30]) #column 30 has the class of samples
    data <- data[,c(1,14,20,26,27, 30)] # I choose to have 5 attr. since
                                         #my data is high dimensional    

    k <- 5 # 5-fold 
    seed <- 1
    folds <- strf.cv(data, k, seed) #stratification function for CV


    range.data.inp <- matrix(apply(data[,-ncol(data)], 2, range), nrow=2)

    data<-norm.data(as.matrix(data[,-ncol(data)]),range.data.
            inp,min.scale = 0.1, max.scale = 1)

    ctrl <- list(popu.size = 30, num.class = 2, num.labels= 3,
            persen_cross = 0.9, max.gen = 200, persen_mutant = 0.3,
         name="sim-1")
    for(i in 1:k){

    str <- paste("fold",i)
    print(str)
    test.ind <- folds[[str]]
    test.data <- data[test.ind,]
    train.data <- data[-test.ind,]

    obj <- frbs.learn(train.data , method.type="GFS.GCCL",
                 range.data.inp , ctrl)


    pred <- predict(obj, test.data)
    print("Predicted classes:")
    print(pred)
    }
库(frbs)
数据我(和其他人)在尝试从iris示例数据开始复制从属学习时遇到了类似的问题。在能够使用人工数据运行此操作之前,我有2个格式项需要解决:

  • 我的数据帧导入给了我整数,其中
    学习
    至少需要
    数值
  • 我的标准分布并不平坦。当我将分布展平(3个值,因此每个值有n/3个样本)时,一切都很顺利
我只知道这些。
希望它能有所帮助。

除了@Pilip38的好建议外,我还有另外三个想法,它们在使用frbs包时为我修复了类似的错误

  • 最重要的是:确保输出变量永远不等于0。看起来您有一个二进制输出变量,所以我希望只向其中添加1,使其为1/2,而不是0/1
  • 尝试将range.data.inp矩阵设置为第一行的所有0和第二行的所有1。当然,范围越窄越好,但这可能会导致错误
  • 尝试将标签数减少到2

  • 这可能是一个脆弱的过程。

    我在运行SLAVE和GFS.GCCL时遇到了同样的问题。当我在看库的源代码时。我发现在frbs.learn()中,每个方法都有一个计算输入数据范围的实现。因此,我认为输入数据的范围可能有问题。例如,在GFS.GCCL中,在源代码中,设置参数时,如下所示:

    range.data.input <- range.data
    data.train.ori <- data.train
    popu.size <- control$popu.size
    persen_cross <- control$persen_cross
    persen_mutant <- control$persen_mutant
    max.gen <- control$max.gen
    name <- control$name
    n.labels <- control$num.labels
    n.class <- control$num.class
    
    num.labels <- matrix(rep(n.labels, ncol(range.data)), nrow = 1)
    num.labels <- cbind(num.labels, n.class)
    
    ## normalize range of data and data training
    range.data.norm <- range.data.input
    range.data.norm[1, ] <- 0
    range.data.norm[2, ] <- 1   
    range.data.input.ori <- range.data.input
    data.tra.norm <- norm.data(data.train[, 1 : ncol(data.train) - 1], range.data.input, min.scale = 0, max.scale = 1)
    data.train <- cbind(data.tra.norm, matrix(data.train[, ncol(data.train)], ncol = 1))
    
    range.data.input
    
    range.data <- rbind(dt.min, dt.max)
    
    range.data.norm <- range.data.input
    range.data.norm[1, ] <- 0
    range.data.norm[2, ] <- 1