无法在 R 中创建决策树

Posted

技术标签:

【中文标题】无法在 R 中创建决策树【英文标题】:Unable to create a decision tree in R 【发布时间】:2014-12-11 09:54:48 【问题描述】:

当我尝试构建决策树时,我无法理解以下错误。什么是预测因子?因子预测变量的水平数是指预测变量可能具有的值的数量吗?

> training_data
     SCHOOL_TYPE URBAN_RURAL NRC_CLASS
1743           G           U      FAIL
2779           U           R         1
1009           G           U      FAIL
4188           G           R      PASS
2264           A           R      PASS
6798           G           R      PASS
2734           A           R      PASS
1004           U           U         2
747            U           U      FAIL
1999           A           U         2
> tree_model = tree(NRC_CLASS~., training_data)
Error in tree(NRC_CLASS ~ ., training_data) : 
  factor predictors must have at most 32 levels
> str(training_data)
'data.frame':   10 obs. of  3 variables:
 $ SCHOOL_TYPE: Factor w/ 154 levels ""," ,01K,31E,61H,81K,83K,85K\nAN,AN03,AN0195,A,U,20120844515,5/17/1996 0:00,INDU P                           ,MANJULA,PARTHIBAN,1,"| __truncated__,..: 62 147 62 62 24 62 24 147 147 24
 $ URBAN_RURAL: Factor w/ 153 levels ""," ",",01K,31E,61H,81E,83E,85E\nGG,GG01,GG0378,G,R,20120471621,5/19/1996 0:00,KIRAN N,PUSHPA,VISHWANATHA BELCHADA,4,B,K,N,004GG,78,P,"| __truncated__,..: 149 115 149 115 115 115 115 149 149 149
 $ NRC_CLASS  : Factor w/ 117 levels "","01K"," ,01K,31E,61H,81E,83E,85E\nRR,RR01,RR0235,G,R,20120149169,6/25/1995 0:00,BASAVARAJ                        ,NINGAMMA,YANKAPPA,4,"| __truncated__,..: 51 14 51 93 93 93 93 16 51 16

training_data 是我通过修剪行和列从更大的数据集构建的。

【问题讨论】:

可以添加table(training_data) 或str(training_data) 的输出 @ArtemFedosov,完成。 table(training_data) 太大而无法打印。我添加了 str(training_data) 您可能需要清理数据和/或合并变量的定义,以便每个变量最多有 32 个唯一值。 是的,因子级别的数量就是唯一值的数量。 因子有可能保持其水平。修剪后对这些变量运行x <- factor(x),并检查它们之后有多少唯一值。 【参考方案1】:

问题在于您的factor 变量。他们在修剪后保留了原始级别(这些级别有 0 个实例)。您可以将它们重新转换为因子,这将删除所有未使用的级别:

# define function that reruns factor() for the right columns
rerun_factor <- function(x) 
  if (is.factor(x)) return(factor(x))
  return(x)


# run on all columns of your data
training_data <- as.data.frame(lapply(training_data, rerun_factor))

一个警告:由于这似乎是训练数据,请确保因子变量与测试数据具有相同的水平。您可以通过传递一个明确的级别向量来确保这一点:factor(x, levels=...)

总体而言,最好推迟将字符数据转换为因子,直到您完成清理它们。您可以将stringsAsFactors = FALSE 传递给您的read.xxx 函数以阻止其自动转换。

【讨论】:

以上是关于无法在 R 中创建决策树的主要内容,如果未能解决你的问题,请参考以下文章

如何在 R 中为决策树模型创建增益图?

R Weka J48决策树无法处理数字类

如何在 R 中绘制/可视化 C50 决策树?

使用决策树从现有特征创建新特征

R语言基于树的方法:决策树,随机森林,套袋Bagging,增强树

决策树算法