导致错误消息的

时间:2018-04-12 14:09:15

标签: r machine-learning classification

我使用RMOA在R中实施预先评​​估。

这对于这个问题来说并不重要,但基本上这会通过首先测试来评估流挖掘分类器的性能,然后训练每个观察的模型在溪流中。

我已经基本完成了,除了我在做出预测时遇到此错误消息:

  

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

我正在使用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 个答案:

答案 0 :(得分:0)

经过一番挖掘后,我发现了最初在MOA-users Google group上报告的错误。

该问题已作为issue I opened on the GitHub repository中所述的程序包作者在提交39665f9中的错误进行了解决。

通过CRAN安装RMOA导致版本1.0仍然包含此错误。要避免,请安装可从包GitHub repository或使用以下

获得的1.1版
install_github("jwijffels/RMOA", subdir="RMOA/pkg")