R:预测因子中超过52个级别,因打印输出而被截断

时间:2012-04-12 06:10:21

标签: r rpart cart-analysis

嗨,我是R编程语言的初学者。我使用rpart包为回归树编写了一个代码。在我的数据中,我的一些自变量有超过100个级别。运行rpart函数后 我收到以下警告信息“预测因子超过52个级别,因打印输出而被截断”&我的树以非常奇怪的方式展示。比方说,我的树按位置分割,有大约70个不同的等级,但当标签显示在树中时,它显示“ZZZZZZZZZZZZZZZZ ...........”,我没有任何位置名为“ZZZZZZZZ”

请帮帮我。

提前致谢。

1 个答案:

答案 0 :(得分:3)

R中的许多函数都限制了因子类型变量可以具有的级别数(即randomForest将因子的级别数限制为32)。

我看到它在数据挖掘竞赛中所处理的一种方式是:

1)确定给定函数允许的最大级别数(调用此X)。

2)使用table()确定每个因子水平的出现次数,并将它们从最大到最小排名。

3)对于因子的最高X - 1级别,将它们保持原样。

4)对于水平< X将所有内容更改为一个因素,以将其标识为低发生级别。

这是一个有点长但有希望帮助的例子:

# Generate 1000 random numbers between 0 and 100.
vars1 <- data.frame(values1=(round(runif(1000) * 100,0)))
# Changes values to factor variable.
vars1$values1 <- factor(vars1$values1)
# Show top 6 rows of data frame.
head(vars1)
# Show the number of unique factor levels
length(unique(vars1$values1 ))
# Create table showing frequency of each levels occurrence.
table1 <- data.frame(table(vars1 ))
# Orders the table in descending order of frequency.
table1 <- table1[order(-table1$Freq),]
head(table1)
# Assuming we want to use the CART we choose the top 51
# levels to leave unchanged
# Get values of top 51 occuring levels
noChange <- table1$vars1[1:51]
# we use '-1000' as factor to avoid overlap w/ other levels (ie if '52' was 
# actually one of the levels).
# ifelse() checks to see if the factor level is in the list of the top 51
# levels.  If present it uses it as is, if not it changes it to '-1000'
vars1$newFactor <- (ifelse(vars1$values1 %in% noChange, vars1$values1, "-1000")) 
# Show the number of levels of the new factor column.
length(unique(vars1$newFactor))

最后,您可能需要考虑在rpart中使用截断变量,因为当存在大量变量或者它们具有长名称时,树显示变得非常繁忙。