将决策树的输出保存到文本文件中

Posted

技术标签:

【中文标题】将决策树的输出保存到文本文件中【英文标题】:Saving decision tree's output into a text file 【发布时间】:2015-09-12 18:49:09 【问题描述】:

我正在寻找一种将决策树的输出保存在R 中的方法。这是R中的一个简单决策树代码:

library(rpart)
data(kyphosis)
fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)

这是fit的值:

1) root 81 17 absent (0.79012346 0.20987654)  
   2) Start>=8.5 62  6 absent (0.90322581 0.09677419)  
     4) Start>=14.5 29  0 absent (1.00000000 0.00000000) *
     5) Start< 14.5 33  6 absent (0.81818182 0.18181818)  
      10) Age< 55 12  0 absent (1.00000000 0.00000000) *
      11) Age>=55 21  6 absent (0.71428571 0.28571429)  
        22) Age>=111 14  2 absent (0.85714286 0.14285714) *
        23) Age< 111 7  3 present (0.42857143 0.57142857) *
   3) Start< 8.5 19  8 present (0.42105263 0.57894737) *

我尝试了savedumpdput,但它们不起作用并改变了树的格式。有什么方法可以将树保存到保留它的文本文件中? sink 不适合我。

【问题讨论】:

您究竟是如何尝试使用save 的?那应该行得通。它在我刚刚做的测试中起作用。 save(fit, "fit.rdata"),然后当您再次需要时,load("fit.rdata") 将树保存到文本文件中是否有效?我试过了,它看起来不起作用! 没有。 save() 不写入纯文本文件,它写入二进制文件。请注意,打印出来的不是fit 的值,而是print(fit) 的结果,它生成了对象的“漂亮”文本版本,而不是对象本身。该对象具有无法以纯文本格式保存的环境的功能。 【参考方案1】:

我使用了sink,它对我有用。

sink("clipboard")  # works in Windows, substitute "clipboard" for file name
print(fit)
sink()

从剪贴板粘贴,我得到了

n= 81 

node), split, n, loss, yval, (yprob)
      * denotes terminal node

 1) root 81 17 absent (0.79012346 0.20987654)  
   2) Start>=8.5 62  6 absent (0.90322581 0.09677419)  
     4) Start>=14.5 29  0 absent (1.00000000 0.00000000) *
     5) Start< 14.5 33  6 absent (0.81818182 0.18181818)  
      10) Age< 55 12  0 absent (1.00000000 0.00000000) *
      11) Age>=55 21  6 absent (0.71428571 0.28571429)  
        22) Age>=111 14  2 absent (0.85714286 0.14285714) *
        23) Age< 111 7  3 present (0.42857143 0.57142857) *
   3) Start< 8.5 19  8 present (0.42105263 0.57894737) *

已测试将"clipboard" 更改为文本文件名,并且与上述内容相同。

我想知道您关于 sink 对您不起作用的评论,问题/输出是什么?

【讨论】:

【参考方案2】:

如果您想保留 fit 以供将来使用,save()load() 应该可以工作。尝试类似

is.list(fit)                       # check it is there 
save(fit,file="thisexample.txt", ascii=TRUE)
rm(fit)                            # to remove fit object
is.list(fit)                       # check it is not there
load(file="thisexample.txt")
is.list(fit)                       # check it is there

您应该会看到[1] TRUE 然后是Error: object 'fit' not found 然后是[1] TRUE 并且您可以继续使用fit

我可能误解了您要保存的内容,在这种情况下,请改用 Ricky 的答案,并带有文件名

sink("exampletree.txt")
print(fit)
sink()

【讨论】:

感谢您的回答,但正如我所说,我想将其导出到文本文件而不是 R 文件中。当您保存到文本文件中时,所有内容都混在一起了。

以上是关于将决策树的输出保存到文本文件中的主要内容,如果未能解决你的问题,请参考以下文章

Spark 使用 Python:将 RDD 输出保存到文本文件中

如何将 telnet 输出日志保存到文本文件

如何将谷歌云构建步骤文本输出保存到文件

如何将此输出保存到 python 中的文本文件中?

将输出保存到文本文件而不覆盖和打印矩阵中的 N 个条目 [matlab]

将python程序的输出保存在文本文件中[重复]