首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于决策树的R中条件执行

基于决策树的R中条件执行
EN

Stack Overflow用户
提问于 2014-07-03 12:22:08
回答 1查看 107关注 0票数 0

我有一个CSV文件,包括血压(BP)、心率(HR)、体重、体表面积(BSA)、体重指数(BMI)、年龄和性别等预测变量。

对于这些变量,有一种基于决策树的算法,将这些患者分为高风险的是/否类。因此,HIGH_RISK是第一列CSV的最后一列,目前它是空的。现在,尽管我可以对单个主题( CSV文件中的各个行)使用算法来填充HIGH_RISK列,但是有太多行,手动这样做是不切实际的。

如果是简单的加法、减法、乘法等,我会在R甚至Excel中完成。但是,由于该算法涉及分叉决策树,所以我不知道如何实现。但我相信这是可能的,因为R是如此强大。有什么建议吗?

决策树类似于以下内容:http://www.scielo.br/img/revistas/sa/v70n6/a01fig04.jpg

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-03 17:00:53

您可以使用我为您编写的帮助函数:

代码语言:javascript
复制
decisionTree <- function(dataframe, lst) {
  if (!is.recursive(lst)) return(lst)
  values <- numeric(nrow(dataframe))
  indices <- eval(parse(text = names(lst)[1]), dataframe)
  values[indices] <- decisionTree(dataframe[indices, ], lst[[1]])
  values[!indices] <- decisionTree(dataframe[!indices, ], lst[[2]])
  values
}

一般格式是以如下格式传递一个data.frame作为第一个参数,一个嵌套列表表示决策树作为第二个参数:

代码语言:javascript
复制
 list("first_variable > 0.3" = 
         list("second_variable > 0.5" = 1,
              "second_variable <= 0.5" = list(
                 "third_variable > 0.3" = 0,
                 1) # naming the negated condition is optional
              ),
      "first_variable <= 0.3" = 0)

示例

代码语言:javascript
复制
iris$foo <- decisionTree(iris, list("Sepal.Length > 5" = list("Petal.Length > 1.3" = 1, 0), 0))
head(iris) # All entries with Sepal.Length > 5 and Petal.Length > 1.3 will contain a 1.
#      Sepal.Length Sepal.Width Petal.Length Petal.Width Species foo
#    1          5.1         3.5          1.4         0.2  setosa   1
#    2          4.9         3.0          1.4         0.2  setosa   0
#    3          4.7         3.2          1.3         0.2  setosa   0
#    4          4.6         3.1          1.5         0.2  setosa   0
#    5          5.0         3.6          1.4         0.2  setosa   0
#    6          5.4         3.9          1.7         0.4  setosa   1

对于您提供的图,第二个参数如下所示:

代码语言:javascript
复制
list("Ts_Armpit > 35.1" = 1,
  list("Ts_Breast <= 0.39" = list("Ts_Croup <= 28.9" = 1, 0),
    list("Ts_Groin <= 35.1" = 1, list("Ts_Armpit <= 33.7" = 1, 0))))

其中1表示不适,0表示舒适。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24553577

复制
相关文章

相似问题

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