我将RMOA
包用于R
,以实现具有保持评估的Hoeffding Tree流分类器。
一切都在正确地进行训练,除非当我尝试从保持的测试流中评估模型时,遇到以下错误消息:
UseMethod(“ predict”)中的错误:
没有适用于“预测”的适用方法,适用于类“ c('HoeffdingTree','MOA_classifier','MOA_model')”的对象
检查了this question的答案后,问题可能出在predict()
和stats
包中都存在RMOA
方法这一事实。我尝试使用::
表示法来指定哪个程序包,但似乎无法指向RMOA predict()
。我也尝试完全卸载stats
,但是并没有帮助。
有谁知道如何直接指向RMOA
的predict()
,还是我的问题完全是由其他原因引起的?
我的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/