R 中的分类树限制为 32 个级别

Posted

技术标签:

【中文标题】R 中的分类树限制为 32 个级别【英文标题】:Classification tree in R limit to 32 levels 【发布时间】:2016-10-07 07:12:30 【问题描述】:

我正在尝试使用包树在 R 中创建分类树。

这是我正在使用的数据集的摘录(包括标题):

CENTRO_EXAMEN,NOMBRE_AUTOESCUELA,MES,TIPO_EXAMEN,NOMBRE_PERMISO,PROB
Alcal· de Henares,17APTOV,5,PRUEBA DESTREZA,A2 ,0
Alcal· de Henares,17APTOV,5,PRUEBA CONDUCCION Y CIRCULACION,B  ,0.8
Alcal· de Henares,17APTOV,5,PRUEBA TEORICA,B  ,0.333333333
Alcal· de Henares,2000,5,PRUEBA TEORICA,B  ,0

这是我向 R 发出的命令:

madrid=read.csv("madrid.csv",header=T,na.strings="?")
#madrid=na.omit(madrid)
names(madrid)
dim(madrid)
fix(madrid)
library(tree)
attach(madrid)

#costruisce albero
High=ifelse(PROB<=0.5,"No","Yes")
madrid=data.frame(madrid,High)
tree.madrid=tree(High~CENTRO_EXAMEN+NOMBRE_AUTOESCUELA+MES+TIPO_EXAMEN+NOMBRE_PERMISO,madrid)
summary(tree.madrid)
plot(tree.madrid)
text(tree.madrid,pretty=0)
tree.madrid

R在发出tree.madrid后返回如下错误

Error in tree(High ~ CENTRO_EXAMEN + NOMBRE_AUTOESCUELA + MES + TIPO_EXAMEN +  : 
  factor predictors must have at most 32 levels

知道为什么吗?

【问题讨论】:

会不会是文本中的重音有问题? 【参考方案1】:

基本上,在数据中创建如此多的拆分在计算上会变得很昂贵,因为您要从所有 2^32(大约)个可能的拆分中选择最佳拆分。

如果您能够使用随机森林,Ben 的评论 here 建议 randomForest 现在可以处理多达 53 个级别。如果您出于某种原因无法使用随机森林,则可以考虑折叠分类预测器的级别。

【讨论】:

我可以使用 randomForest 并且我尝试过,显然我的数据产生了超过 53 个分类预测变量。在您看来,为什么会这样?是因为每个变量可以有多少不同的值吗? @user3161330 没错。当您有一个分类变量时,一个级别是一个唯一值。如果您执行length(levels(data$factor_variable)),它将返回变量中有多少级别。但是,这仅适用于因素,如果您想要不同字符值的数量,您可以这样做length(unique(data$character_variable)) 现在我明白了...知道我能做什么吗?我知道您对数据集一无所知,但是有什么通用技术可以……减少值的数量吗?只是摆脱具有太多值的变量? 这很棘手。一种方法是应用变量的一些知识来减少级别的数量(例如,如果您有地理数据,则将其分组为更大的地理区域)。您还可以筛选变量以查看是否有很大的预测能力(也许适合单变量逻辑回归并衡量变量是否有用,如果没有,则可能将其删除)。 您还可以尝试通过执行称为证据权重编码的方法将分类数据转换为数字数据。你可以找到更多关于它的信息here。这不是一个完美的方法,但它可能是一个有用的选择

以上是关于R 中的分类树限制为 32 个级别的主要内容,如果未能解决你的问题,请参考以下文章

R中的分类树多次

R中的分类树

R中的J48树 - 训练和测试分类

机器学习:R语言实现随机森林

文档分类的决策树

R语言基于R语言的数据挖掘之决策树