![](/img/trans.png)
[英]How should I plot a multi-split (non binary split) decision tree run from RWeka J48() function?
[英]Accessing individual results from decision tree function JRip (RWeka library)
我正在使用library(RWeka)并在数据集上运行JRip函数。 有人知道以编程方式访问规则结果集的方法,以便我可以分别访问每个规则吗?
这是一个仅出于说明目的的示例:
> library(datasets)
> head(npk)
block N P K yield
1 1 0 1 1 49.5
2 1 1 1 0 62.8
3 1 0 0 0 46.8
4 1 1 0 1 57.0
5 2 1 0 0 59.8
6 2 1 1 1 58.5
> tree_rip <- JRip(block ~ ., data = npk)
> tree_rip
JRIP rules:
===========
(yield <= 48.8) => block=4 (5.0/2.0)
(yield <= 52) => block=5 (4.0/1.0)
=> block=3 (15.0/11.0)
Number of Rules : 3
我想以数据框/表的方式访问结果。 最接近的是通过以下方式检索单个Blob字符串:
> tree_rip$classifier
[1] "Java-Object{JRIP rules:\n===========\n\n(yield <= 48.8) => block=4 (5.0/2.0)\n(yield <= 52) => block=5 (4.0/1.0)\n => block=3 (15.0/11.0)\n\nNumber of Rules : 3\n}"
我需要一些可以让我分别获得每个结果的东西,就像我调用tree_rip
时显示的tree_rip
,所以我不仅可以获得找到的规则的长度,而且可以一一访问它们。
至少是这样的(但理想情况下,每行分别访问每个结果变量):
[1] (yield <= 48.8) => block=4 (5.0/2.0)
[2] (yield <= 52) => block=5 (4.0/1.0)
...
谢谢!
作为R的非用户与Java集成的用户,这对我来说证明是非常困难的。 在查看了这些结果之后,无论如何要努力找出REPL如何产生您所看到的结果:
str(tree_rip)
# omitting about 15 lines of output
# - attr(*, "class")= chr [1:3] "JRip" "Weka_rules" "Weka_classifier"
getAnywhere(print.JRIP)
# no object named ‘print.JRIP’ was found
getAnywhere(print.Weka_rules)
# no object named ‘print.Weka_rules’ was found
help(pack="RWeka")
getAnywhere(print.Weka_classifier)
# this did succeed ... so I though `.jcall` should also succeed
.jcall(tree_rip$classifier, "S", "toString")
# Error: could not find function ".jcall"
RWeka:::.jcall(tree_rip$classifier, "S", "toString")
# Error in get(name, envir = asNamespace(pkg), inherits = FALSE) :
# object '.jcall' not found
...我发现需要加载pkg:rJava才能访问.jcall function
。 显然,这是不加载支持库而仅附加支持库的情况之一。 (类似于仅在加载pkg:lattice时[错误地]假定grid.text
应该可用。)因此,这将为您提供所需的字符串集:
library(rJava)
as.matrix(scan(text=.jcall(tree_rip$classifier, "S", "toString") ,sep="\n", what="") )[
-c(1:2, 6), ,drop=FALSE]
#------------
[,1]
[1,] "(yield <= 48.8) => block=4 (5.0/2.0)"
[2,] "(yield <= 52) => block=5 (4.0/1.0)"
[3,] " => block=3 (15.0/11.0)"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.