无法在 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 中创建决策树的主要内容,如果未能解决你的问题,请参考以下文章