我在 R 中使用 randomForest。
我在一组包含因子变量的数据上进行训练。此变量具有以下级别:
[1] "Economics" "Engineering" "Medicine"
[4] "Accounting" "Biology" "Computer Science"
[7] "Physics" "Law" "Chemistry"
我的评估集包含这些级别的子集:
[1] "Law" "Medicine"
randomForest 包要求级别相同,所以我尝试了:
levels(evaluationSet$course) <- levels(trainingSet$course)
但是当我检查评估集中的行时,值发生了变化:
evaluationSet[1:3,c('course')]
# Gives "[1] Economics Engineering Economics", should give "[1] Law Medicine Law"
我是 R 新手,但我认为这里发生的事情是因素是一个枚举集。在评估集中,“法律”和“医学”在因子中以数字表示(分别为 1 和 2)。当我应用新级别时,它会更改这些索引映射到的值。
我在 SO 上找到了一些类似的主题并尝试了他们的建议,但没有运气:
evaluationSet <- droplevels(evaluationSet)
levels(evaluationSet$course) <- levels(trainingSet$course)
evaluationSet$course <- factor(evaluationSet$course)
如何在保留数据值的同时将级别设置为与训练集相同?
编辑:在levels(evaluationSet$course) <-levels(trainingSet$course)之前和之后添加head(evaluationSet)的结果:
timestamp score age takenBefore course
1 1374910975 0.87 18 0 law
2 1374910975 0.81 21 0 medicine
3 1374910975 0.88 21 0 law
4 1374910975 0.88 21 0 law
5 1374910975 0.74 22 0 law
6 1374910975 0.76 23 1 medicine
timestamp score age takenBefore course
1 1374910975 0.87 18 0 economics
2 1374910975 0.81 21 0 engineering
3 1374910975 0.88 21 0 economics
4 1374910975 0.88 21 0 economics
5 1374910975 0.74 22 0 economics
6 1374910975 0.76 23 1 engineering