2

以下を実行する場合:

library(RWeka) 
data(iris) 
res = J48(Species ~., data = iris)

resJ48から継承するクラスのリストになりますWeka_tree。印刷すれば

R> res
J48 pruned tree
------------------

Petal.Width <= 0.6: setosa (50.0)
Petal.Width > 0.6
|   Petal.Width <= 1.7
|   |   Petal.Length <= 4.9: versicolor (48.0/1.0)
|   |   Petal.Length > 4.9
|   |   |   Petal.Width <= 1.5: virginica (3.0)
|   |   |   Petal.Width > 1.5: versicolor (3.0/1.0)
|   Petal.Width > 1.7: virginica (46.0/1.0)

Number of Leaves  :     5

Size of the tree :  9

プロパティとその値を右から左の順序で取得したいと思います。したがって、この場合:

Petal.Width, Petal.Width, Petal.Length, Petal.Length.

res を要素に入力して、コマンドを実行しようとしました。

str_extract(paste0(x, collapse=""), perl("(?<=\\|)[A-Za-z]+(?=\\|)"))

成功しませんでした。左回りの文字は無視する必要があることを覚えておいてください。

4

2 に答える 2

1

ここで要点を見逃していないことを願っていますが、ツリーモデルのターミナルノードに基づいて、何らかの形でルールを作成して保存したいと考えています。個人的には、モデル ツリー構築パッケージ (RWeka、party、partykit、rpart) では、モデル構築後にユーザーが有用なルールのリストを作成できないことがわかりました。もちろん、変数と分割が少ない場合は、ツリー プロットを解釈できます。

これまでに見つけた (そして私自身も使用している) 唯一の簡単で堅牢な方法は、rpart パッケージのコマンド「path.rpart」です。本当に RWeka を使用したい場合、解決策は無関係に思えるかもしれませんが、試してみます。

library(rpart)

res = rpart(Species ~., data = iris)

res

# n= 150 
# 
# node), split, n, loss, yval, (yprob)
# * denotes terminal node
# 
# 1) root 150 100 setosa (0.33333333 0.33333333 0.33333333)  
# 2) Petal.Length< 2.45 50   0 setosa (1.00000000 0.00000000 0.00000000) *
#   3) Petal.Length>=2.45 100  50 versicolor (0.00000000 0.50000000 0.50000000)  
# 6) Petal.Width< 1.75 54   5 versicolor (0.00000000 0.90740741 0.09259259) *
#   7) Petal.Width>=1.75 46   1 virginica (0.00000000 0.02173913 0.97826087) *


# capture terminal nodes
terminal_nodes = rownames(res$frame)[res$frame$var =="<leaf>"]

# print rules for the terminal nodes
path.rpart(res ,nodes=terminal_nodes)

# node number: 2 
# root
# Petal.Length< 2.45
# 
# node number: 6 
# root
# Petal.Length>=2.45
# Petal.Width< 1.75
# 
# node number: 7 
# root
# Petal.Length>=2.45
# Petal.Width>=1.75


# print above rules as list
rules = path.rpart(res ,nodes=terminal_nodes)
listed_rules = unlist(rules)
sapply(rules,"[",-1)

# $`2`
# [1] "Petal.Length< 2.45"
# 
# $`6`
# [1] "Petal.Length>=2.45" "Petal.Width< 1.75" 
# 
# $`7`
# [1] "Petal.Length>=2.45" "Petal.Width>=1.75" 
于 2015-08-23T18:23:20.323 に答える