如何在R语言决策树中正确处理字符串类型的音乐流派特征
解决方案
1. 查看因子与原字符串的对应关系
直接用以下代码查看映射:
# 查看所有因子水平(原字符串) levels(MGSHelp2$Genre) # 查看每条数据的因子编码数值 as.numeric(MGSHelp2$Genre) # 统计各流派的样本数量 table(MGSHelp2$Genre)
2. 让决策树显示流派原名
针对tree包
tree包默认会缩写长因子名,通过text()函数的pretty=0参数强制显示原名:
library(tree) # 构建决策树 tree_model <- tree(Pref2 ~ ., data = MGSHelp2) # 查看完整树结构(包含原名分裂规则) summary(tree_model) # 绘图并显示原名标签 plot(tree_model) text(tree_model, pretty = 0)
针对rpart包
rpart对因子的支持更直观,默认显示原名:
library(rpart) # 构建决策树 rpart_model <- rpart(Pref2 ~ ., data = MGSHelp2) # 打印树结构 print(rpart_model) # 绘图并添加标签 plot(rpart_model) text(rpart_model, use.n = TRUE)
3. 正确使用factor()处理流派列
如果要自定义因子水平,需确保包含数据中所有出现的流派,避免生成NA:
# 自动获取数据中所有唯一流派作为水平 MGSHelp2$Genre <- factor(MGSHelp2$Genre, levels = unique(MGSHelp2$Genre)) # 或者使用你预设的完整流派列表(确保数据中的流派都在列表内) MGSHelp2$Genre <- factor(MGSHelp2$Genre, levels = c("aussietronica", "bath indie", "big room", "boy band", "brostep", "chillwave", "classic anime", "classical", "contemporary r&b", "country", "covertronica", "disco", "edm", "funk carioca", "hip hop", "pop", "rap", "reggae fusion", "rock"))
4. 避免错误使用as.numeric()
流派是分类特征,没有数值大小关系,用as.numeric()会把因子转换成编码数值,导致决策树生成不合理的数值分裂节点,因此不要用这种方式处理。
内容的提问来源于stack exchange,提问作者Me Me
相关产品推荐
相关产品推荐

