我将RMOA包用于R,以实现具有保持评估的Hoeffding Tree流分类器。

一切都在正确地进行训练,除非当我尝试从保持的测试流中评估模型时,遇到以下错误消息:


  UseMethod(“ predict”)中的错误:
    没有适用于“预测”的适用方法,适用于类“ c('HoeffdingTree','MOA_classifier','MOA_model')”的对象


检查了this question的答案后,问题可能出在predict()stats包中都存在RMOA方法这一事实。我尝试使用::表示法来指定哪个程序包,但似乎无法指向RMOA predict()。我也尝试完全卸载stats,但是并没有帮助。

有谁知道如何直接指向RMOApredict(),还是我的问题完全是由其他原因引起的?

我的R代码如下。我现在只是流式传输虹膜数据集,并提取前30个流项以用于保持评估。

holdout<-function(){
    require("RMOA")

    #Initialise streams
    stream<-datastream_dataframe(iris)
    test<-stream$get_points(n=30)
    test<-datastream_dataframe(test)

    #Specify model
    mymodel<-HoeffdingTree(numericEstimator = "GaussianNumericAttributeClassObserver")

    #Record execution time for training
    start_time<-Sys.time()
    while(!stream$finished)
    {
        mymodel <<- trainMOA(model=mymodel, formula = Species ~ Sepal.Length+Sepal.Width+Petal.Length+Petal.Width, data=stream)
    }
    end_time<-Sys.time()
    time_taken <- end_time - start_time
    cat("Finished training. Elapsed time: ", time_taken)
    #Empty vector to store individual accuracy results of holdout stream elements
    accuracies<-c()

    #Record the execution time of holdout evaluation
    start_time<-Sys.time()
    while(!test$finished)
    {
        samp<-test$get_points(n=1)
        pred <- predict(mymodel, samp, type="response")
    }
    end_time<-Sys.time()
    time_taken <- end_time - start_time
    cat("Finished training. Elapsed time: ", time_taken)
}

最佳答案

RMOA包中的predict方法是一个内部变量,您可以这样调用它:

RMOA:::predict.MOA_trainedmodel


完整的例子:

library(RMOA)
data(iris)
stream <- datastream_dataframe(iris)
test <- stream$get_points(n = 30)
test <- datastream_dataframe(test)

mymodel <- HoeffdingTree(numericEstimator = "GaussianNumericAttributeClassObserver")
mymodel <- trainMOA(model = mymodel, formula = Species ~ Sepal.Length+Sepal.Width+Petal.Length+Petal.Width, data = stream)


在我的情况下,预测函数未屏蔽(如果未导出,这很奇怪):

pred1 <- predict(mymodel, iris, type = "response")


但如果是这样,我可以使用:

pred2 <- RMOA:::predict.MOA_trainedmodel(mymodel, iris, type = "response")


结果将是相同的:

all.equal(pred1, pred2)
#output
TRUE


我检查了RMOA的NAMESPACE并预测函数已导出,但由于某些原因

RMOA::predict.MOA_trainedmodel

结果是


  错误:“ predict.MOA_trainedmodel”不是从中导出的对象
  '命名空间:RMOA'




RMOA:::predict.MOA_trainedmodel


才不是

关于r - 具有保持评估的RMOA Hoeffding树,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48870181/

10-12 19:39