代码之家  ›  专栏  ›  技术社区  ›  Scott

R中的顺序求值导致错误消息

  •  3
  • Scott  · 技术社区  · 6 年前

    我正在R中使用 RMOA

    这对于这个问题来说并不太重要,但基本上,这通过以下方式评估流挖掘分类器的性能 首次测试 然后培训 流中每次观测的模型。

    我已经基本完成了,只是在进行预测时遇到了以下错误消息:

    要更换的项目数不是更换长度的倍数

    我正在使用Iris数据集,奇怪的是,它预测了前50次观察的类别标签和训练,正如我所预期的那样。然而,对于剩下的100个,它会产生上述错误。数据集的默认顺序为:

    Label        Number
    
    Setosa       50
    Versicolor   50
    Virginica    50
    

    这意味着无论出于何种原因,该模型正在对所有Setosa观测值进行预测,然后对其他两个类别标签产生此错误。如果我随机化这些行,我会遇到同样的问题;一旦遇到第二类标签,就会产生错误。

    我读到过关于这个错误的类似问题,例如 this .现有的问题似乎都没有在分类的背景下解决这个问题。

    相关R代码:

    require(RMOA)
    require(stream)
    
    #data<-iris[sample(nrow(iris)),] #use this for randomising the iris dataset
    df = datastream_dataframe(as.data.frame(iris))
    
    opts<-MOAoptions(model="HoeffdingTree")
    tree<-HoeffdingTree(control = opts)
    mymodel <- NULL
    
    i<- 1
    #Iterate over the stream until the stream is empty
    repeat
    {
        element <- df$get_points(1)
    
        #Check to see if stream is empty - not elegant but it works just now
        if(is.null(element$Species)){
            break
        }
    
        #Prequential evaluation
        tryCatch(
        {
            #First test
            pred <- RMOA:::predict.MOA_trainedmodel(mymodel, element, type="response")
            cat("Tested element ", i, "Pred: ",pred, ". Label: ", element$Species,"\n")
    
            #Then train
            #If first element in stream, the model is initially trained in the error block below
            if(!i==1){
                mymodel <<- trainMOA(model = mymodel$model, 
                    formula = Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, 
                    data = datastream_dataframe(element))
                cat("Trained model using element ", i,"\n")
            }
        },
    
        error = function(err){
            cat("Error processing element ", i,"\n")
            if(i==1){
                cat("The model was initially untrained.\n")
                mymodel <<- trainMOA(model = tree, Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, data = datastream_dataframe(element))
            }
            else{
                message(err)
            }
        })#end try-catch block
    
        i<<- i+ 1
    }#end while
    

    请注意,最初模型设置为 null .对于第一次观察,由于模型未经训练,尝试的预测将产生错误。这是在 try-catch .所有后续观察结果应在培训前进行测试。

    我的模型有什么问题导致了这个错误?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Scott    6 年前

    经过一番挖掘,我发现了 MOA-users Google group

    该问题已作为提交中的一个bug解决 39665f9 由文件包作者在 issue I opened on the GitHub repository

    正在安装 RMOA via CRAN生成的1.0版仍然包含此错误。要避免这种情况,请安装软件包中提供的版本1.1 GitHub repository 或使用以下方法

    install_github("jwijffels/RMOA", subdir="RMOA/pkg")