我有一个csv文件(298行和24列),我想创建一个决策树来预测列“薪水”。我已经下载了树包并通过库函数添加。
但是当我尝试创建决策树时:
model<-tree(salary~.,data)
我收到如下错误:
*Error in tree(salary ~ ., data) :
factor predictors must have at most 32 levels*
这有什么问题?数据如下:
Name bat hit homeruns runs
1 Alan Ashby 315 81 7 24
2 Alvin Davis 479 130 18 66
3 Andre Dawson 496 141 20 65
...
team position putout assists errors
1 Hou. C 632 43 10
2 Sea. 1B 880 82 14
3 Mon. RF 200 11 3
salary league87 team87
1 475 N Hou.
2 480 A Sea.
3 500 N Chi.
它的str(数据)的值:
'data.frame':263 obs。 24个变量: $名称:因子w / 263级别“Al Newman”,“Alan Ashby”,..:2 7 8 10 6 1 13 11 9 3 ...
$ bat:int 315 479 496 321 594 185 298 323 401 574 ...
$ hit:int 81 130 141 87 169 37 73 81 92 159 ...
$ homeruns:int 7 18 20 10 4 1 0 6 17 21 ...
$ runs:int 24 66 65 39 74 23 24 26 49 107 ...
$ runs.batted:int 38 72 78 42 51 8 24 32 66 75 ...
$ walking:int 39 76 37 30 35 21 7 8 65 59 ...
$ years.in.major.leagues:int 14 3 11 2 11 2 3 2 13 10 ...
$ bats.during.career:int 3449 1624 5628 396 4408 214 509 341 5206 4631 ...
$ hits.during.career:int 835 457 1575 101 1133 42 108 86 1332 1300 ...
$ homeruns.during.career:int 69 63 225 12 19 1 0 6 253 90 ...
$ runs.during.career:int 321 224 828 48 501 30 41 32 784 702 ...
$ runs.batted.during.career:int 414 266 838 46 336 9 37 34 890 504 ...
$ walks.during.career:int 375 263 354 33 194 24 12 8 866 488 ......
$ league:因子w / 2级别“A”,“N”:2 1 2 2 1 2 1 2 1 1 ...
$ division:因子w / 2级别“E”,“W”:2 2 1 1 2 1 2 2 1 1 ...
$ team:因子w / 24级别“Atl。”,“Bal。”,..:9 21 14 14 16 14 10 1 7 8 ...
$ position:因子w / 23级“1B”,“1O”,“23”,..:10 1 20 1 22 4 22 22 13 22 ...
$ putout:int 632 880 200 805 282 76 121 143 0 238 ...
$ assists:int 43 82 11 40 421 127 283 290 0 445 ...
$ errors:int 10 14 3 4 25 7 9 19 0 22 ...
$ salary:num 475 480 500 91.5 750 ...
$ league87:因子w / 2级别“A”,“N”:2 1 2 2 1 1 1 2 1 1 ...
$ team87:因子w / 24级别“Atl。”,“Bal。”,..:9 21 5 14 16 13 10 1 7 8 ...
答案 0 :(得分:4)
问题几乎可以肯定是你在模型中包含了name变量,因为它有太多的因子级别。我也会从方法论角度删除它,但这可能不是讨论的地方。尝试:
train <- data
train$Name <- NULL
model<-tree(salary~.,train)
答案 1 :(得分:2)
您的salary
似乎是因子向量,而您尝试执行回归,因此它应该是数字< / strong>矢量。只需将salary
转换为数字,它应该可以正常工作。有关详细信息,请阅读图书馆的帮助:
http://cran.r-project.org/web/packages/tree/tree.pdf
<强>用法强>
树(公式,数据,权重,子集,na.action = na.pass, control = tree.control(nobs,...),method =“recursive.partition”, split = c(“deviance”,“gini”),model = FALSE,x = FALSE,y = TRUE,wts = TRUE,......)
<强>参数强>
公式公式表达式。当a时,左侧(响应)应该是数值向量 当分类树时,回归树将被设置或一个因子 被生产。右侧应该是一系列数字或 因子变量用+分隔;应该没有互动条款。 两者。 - 允许:回归树可以有偏移项。 (...)
根据salary
变量中存储的确切内容,转换可能会更少或更棘手,但这通常会起作用:
salary = as.numeric(levels(salary))[salary]
修改强>
正如评论中所指出的,实际错误对应于data
变量,因此如果它是一个数值数据,它也可以转换为数字来解决问题,如果它必须是一个因素你需要另一个模型或减少级别数。您也可以手动将这些因子转换为数字格式(例如,通过定义与级别一样多的二进制特征),但这可能会导致输入空间呈指数级增长。
<强> EDIT2 强>
您似乎必须首先确定您要模拟的内容。你试图预测薪水,但基于什么?您的数据似乎由玩家的记录组成,然后他们的名字肯定是用于此预测的错误类型的数据(特别是 - 它可能导致32级错误)。您应该从data
变量中删除不应用于构建预测的所有列。我不知道这里的确切目标是什么(因为问题中没有关于它的信息),所以我只能猜测你是根据他/她的统计数据来预测这个人的工资,所以你应该从输入数据中移除:玩家的名字,玩家的团队和明显的工资(因为使用X预测X不是一个好主意;)。