在Windows 8上,R模型转换为PMML是否有大小限制?

在Windows 8上,R模型转换为PMML是否有大小限制?,r,windows-8,random-forest,pmml,platform-specific,R,Windows 8,Random Forest,Pmml,Platform Specific,我多次尝试将包pmml中的pmml函数应用于包randomForest创建的随机林模型(“model.rf”): > library(randomForest) > dim(data) [1] 32000 76 > model.rf <- randomForest(x=data[,2:76],y=data[,1],type='regression',ntree=150) > library(pmml) > model.rf.pmml<-pmml(mod

我多次尝试将包pmml中的pmml函数应用于包randomForest创建的随机林模型(“model.rf”):

> library(randomForest)
> dim(data)
[1]  32000 76
> model.rf <- randomForest(x=data[,2:76],y=data[,1],type='regression',ntree=150)
> library(pmml)
> model.rf.pmml<-pmml(model.rf)
崩溃是因为内存不足吗?我意识到R进程在崩溃之前几乎占用了所有可用内存。如果是这样,将我的模型转换为pmml需要什么系统

同样从iris示例来看,磁盘上的大小似乎增加了15倍,因为XML不是压缩格式,而不是R数据文件:

> library(randomForest)
> iris.rf <- randomForest(Species ~ ., data=iris, ntree=20)
> save(iris.rf,file='iris.rf.RData')
> iris.rf.pmml<-pmml(iris.rf)
> saveXML(iris.rf.pmml,file='iris.rf.xml')
>库(随机林)
>iris.rf保存(iris.rf,file='iris.rf.RData')
>iris.rf.pmml保存xml(iris.rf.pmml,file='iris.rf.xml')
iris.rf.RData-->4kb iris.rf.xml-->59kb


这个因子是常数吗?我的型号的pmml版本在磁盘上的容量大约为150mb吗?

不幸的是,R pmml软件包确实有内存和速度限制。当我发布当前版本时,我没有意识到“大数据”有多大!我应该补充一点,Windows在内存效率方面不是很好。有许多型号我无法在Windows计算机上输出……但我能够更快地生产出完全相同的型号,并且在linux或mac计算机上更好地使用内存。在下一个版本中,我一直在对这两个模型进行改进,但目前,基于对一个包含500棵树的RF模型的实验,该模型应用于一个包含50个变量和50000行(约18Mb)的数据集,创建pmml模型所需的时间为5小时(linux机器)。树中的平均节点数为4000。一般的经验法则是,用于保存pmml对象的内存大约是R对象的2.5倍……正如您所发现的。仅用于将对象保存为xml文件的内存是一个主要因素。
在包装的当前状态下(尚未发布),花费的时间不是5小时,而是1小时15分钟。上面的数字是针对linux机器的……我预计对于windows机器来说,它们会增加一倍以上。请考虑使用非Windows机器来分析大型数据集;我相信这适用于大多数R软件包…不仅仅是PMML

不幸的是,R pmml包确实有内存和速度限制。当我发布当前版本时,我没有意识到“大数据”有多大!我应该补充一点,Windows在内存效率方面不是很好。有许多型号我无法在Windows计算机上输出……但我能够更快地生产出完全相同的型号,并且在linux或mac计算机上更好地使用内存。在下一个版本中,我一直在对这两个模型进行改进,但目前,基于对一个包含500棵树的RF模型的实验,该模型应用于一个包含50个变量和50000行(约18Mb)的数据集,创建pmml模型所需的时间为5小时(linux机器)。树中的平均节点数为4000。一般的经验法则是,用于保存pmml对象的内存大约是R对象的2.5倍……正如您所发现的。仅用于将对象保存为xml文件的内存是一个主要因素。 在包装的当前状态下(尚未发布),花费的时间不是5小时,而是1小时15分钟。上面的数字是针对linux机器的……我预计对于windows机器来说,它们会增加一倍以上。请考虑使用非Windows机器来分析大型数据集;我相信这适用于大多数R软件包…不仅仅是PMML

在处理大型随机林模型时,可以使用。这个包依赖于JavaPMML类模型和XML库。因此,它比标准的
pmml
包快一千倍。无论在Windows还是*NIX上使用,性能都是相同的。考虑到所有因素,您的模型应该可以在几秒钟内导出

我使用
r2pmml
库在笔记本电脑上大约一分钟内导出了一个5gb的随机林PMML文件。诀窍是为JVM提供足够的堆大小,这样它就不需要进行太多的垃圾收集:

options(java.parameters = c("-Xms8G", "-Xmx16G"))

library("r2pmml")

model.rf <-randomForest(x = data[,2:76], y = data[,1], type = 'regression', ntree = 150)

r2pmml(model.rf, "/tmp/rf.pmml")
选项(java.parameters=c(“-Xms8G”,“-Xmx16G”)) 库(“r2pmml”) model.rf在处理大型随机林模型时,可以使用。这个包依赖于JavaPMML类模型和XML库。因此,它比标准的
pmml
包快一千倍。无论在Windows还是*NIX上使用,性能都是相同的。考虑到所有因素,您的模型应该可以在几秒钟内导出

我使用
r2pmml
库在笔记本电脑上大约一分钟内导出了一个5gb的随机林PMML文件。诀窍是为JVM提供足够的堆大小,这样它就不需要进行太多的垃圾收集:

options(java.parameters = c("-Xms8G", "-Xmx16G"))

library("r2pmml")

model.rf <-randomForest(x = data[,2:76], y = data[,1], type = 'regression', ntree = 150)

r2pmml(model.rf, "/tmp/rf.pmml")
选项(java.parameters=c(“-Xms8G”,“-Xmx16G”)) 库(“r2pmml”)
model.rf Tridi,您是否可以在使用rf导出功能时添加一些进度信息?例如,“导出500个树中的1个”、“导出500个树中的2个”等简单日志消息将非常有用。我在Solaris上得到了一个segfault(11),它在Windows上对一个大型(150个变量和350万行)随机林模型运行得很好。有什么解决办法吗?我明白了,无论我使用saveXML(…)还是sink(…)print(pmml(…)Tridi,您是否可以在RF导出功能中添加一些进度信息?例如,“导出500个树中的1个”、“导出500个树中的2个”等简单日志消息将非常有用。我在Solaris上得到了一个segfault(11),它在Windows上对一个大型(150个变量和350万行)随机林模型运行得很好。有什么解决办法吗?无论是使用saveXML(…)还是sink(…)print(pmml(…)我都能理解