簡體   English   中英

從決策樹功能JRip訪問單個結果(RWeka庫)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM