我有一个包含预测变量的CSV文件,如血压(BP),心率(HR),体重,体表面积(BSA),体重指数(BMI),年龄和性别。
对于这些变量,存在基于决策树的算法,将这些患者划分为高风险是/否类别。所以HIGH_RISK是CSV的最后一列,目前是空的。现在,即使我可以将算法用于单个主题(CSV文件中的各个行)来填充HIGH_RISK列,但是有很多行手动执行此操作将是不切实际的。
如果它是一个简单的加法,减法,乘法等,我会在R中甚至在Excel中完成它。但由于该算法涉及一个分叉决策树,我不知道该怎么做。但我确信这是可能的,因为R是如此强大。有什么建议吗?
决策树与此类似:http://www.scielo.br/img/revistas/sa/v70n6/a01fig04.jpg
答案 0 :(得分:0)
你可以使用我为你写的这个辅助函数:
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
作为第一个参数传递,并将表示决策树的嵌套列表作为第二个参数传递,格式如下:
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)
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
对于您提供的图表,第二个参数如下:
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
表示舒适。