我使用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
内处理的。所有后续观察都应在训练前进行测试。
我的模型出现这个错误有什么问题?
答案 0 :(得分:0)
经过一番挖掘后,我发现了最初在MOA-users Google group上报告的错误。
该问题已作为issue I opened on the GitHub repository中所述的程序包作者在提交39665f9
中的错误进行了解决。
通过CRAN安装RMOA
导致版本1.0仍然包含此错误。要避免,请安装可从包GitHub repository或使用以下
install_github("jwijffels/RMOA", subdir="RMOA/pkg")