首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取J48的属性值

获取J48的属性值
EN

Stack Overflow用户
提问于 2016-04-04 08:56:35
回答 1查看 74关注 0票数 0

my question之后,我想知道应该添加什么,以便获取节点的值并将其连接到节点的名称中。我有一个J48决策树:

代码语言:javascript
复制
library(RWeka) 
data(iris)
res = J48(Species ~., data = iris)
> 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

并因此获得以下字符串:

代码语言:javascript
复制
( Petal.Width ( ) Petal.Width ( Petal.Length ( ) Petal.Width ( ) ) )

我想得到以下内容(值的串联):

代码语言:javascript
复制
( Petal.Width0.6 ( ) Petal.Width1.7 ( Petal.Length4.9 ( ) Petal.Width1.5 ( ) ) )

下面是我使用的代码:

代码语言:javascript
复制
library("partykit")
pres <- as.party(res)
partykit:::.list.rules.party(pres)

nam <- names(pres$data)
tr <- as.list(pres$node)
str <- "("
update_str <- function(x) {
  if(is.null(x$kids)) {
    str <<- paste(str, ")")
  } else {
    str <<- paste(str, nam[x$split$varid], "(")
    for(i in x$kids) update_str(tr[[i]])
  }
}
update_str(tr[[1]])
   > str
[1] "( Petal.Width ( ) Petal.Width ( Petal.Length ( ) Petal.Width ( ) ) )"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-04 12:26:19

只需更改递归:

代码语言:javascript
复制
update_str <- function(x) {
  if(is.null(x$kids)) {
    str <<- paste(str, ")")
  } else {
    str <<- paste(str, nam[x$split$varid], x$split$breaks, "(")
    for(i in x$kids) update_str(tr[[i]])
  }
}

update_str(tr[[1]])

> str
[1] "( Petal.Width 0.6 ( ) Petal.Width 1.7 ( Petal.Length 4.9 ( ) Petal.Width 1.5 ( ) ) )"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36398316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档