当丢弃一个预测类时,randomForest包的异常行为

时间:2018-08-28 04:13:25

标签: r machine-learning classification random-forest

我正在运行一个随机森林模型,该模型所产生的结果从统计角度来看对我来说绝对是毫无意义的,因此我坚信必须在randomForest上出现代码错误包。

至少在模型的此迭代中,预测的/左侧变量是具有3个可能结果的政党ID:民主党,独立,共和党。我运行模型,得到结果,很好。在这一点上,我并不是很在意结果本身,而是在我进行小的修改时会发生什么。

然后我尝试运行它(不包括独立版),那时候事情以我发现神秘的方式出现问题。具体来说,它几乎失去了预测任何的所有功能,并将几乎所有的观察结果标记为属于同一类(民主人士)。

“好的,独立意见中包含的信息对预测很重要。”这是我的第一个想法,尽管我无法为自己的生活弄清楚为什么会如此,因为该模型非常难以识别独立人士。

奇怪的是,对该假设进行了简单的检验,证明它是正确的。如果我删除一个方ID为Independent(独立)的观察值(样本数量略多于4000个观察值,因此1个观察值是舍入误差),则模型运行良好。因此,即使从“独立”结果类别中出于所有意图和目的完全不了解任何内容,该模型仍会按预期运行。只有真正删除了“独立”类别之后,事情才出现问题。

此外,只是想避开一个潜在的建议:它似乎并非某种程度上是创建新的LHS变量的结果。如果我改为在删除独立变量之后使用party_id_3_cat降低级别,并使用相同的LHS变量,则会得到相同的结果。

据我所料,“没有独立”版本(以下称为“ two_cat”)和“只有一个独立”版本(以下称为“ leave_one”)的结果应几乎相同,因为它们具有几乎相同的数据。但是,这两个模型产生的实际结果完全不同。我已经绞尽脑汁,无法想象为什么会这样。有谁知道关于randomForest包的信息(或一般来说,关于随机森林模型的信息,尽管可能性似乎较小),可以解释这种现象?如果重要的话,LHS和RHS变量都是因子变量。

谢谢!

代码:

load("three_cat.Rda")
two_cat<-subset(three_cat,party_id_3_cat!="2. Independents")
leave_one_in<-subset(three_cat,party_id_3_cat!="2.     Independents"|case_id=="30")
two_cat$party_id_2_cat<-as.factor(ifelse(two_cat$party_id_3_cat=="1. Democrats (including leaners)","Dem","Rep"))

rf_three_cat  <-        randomForest(party_id_3_cat~[RHS VARS},
                        data=three_cat,
                        ntree=200,mtry=4,
                        type="classification",
                        importance=TRUE,confusion=TRUE)
rf_leave_one  <-randomForest(party_id_3_cat~[RHS VARS],
                         data=leave_one_in,
                         ntree=200,mtry=4,
                         type="classification",
                         importance=TRUE,confusion=TRUE)
rf_two_cat    <-randomForest(party_id_2_cat~[RHS VARS],
                         data=two_cat,
                         ntree=200,mtry=4,
                         type="classification",
                         importance=TRUE,confusion=TRUE)

rf_three_cat$confusion
rf_leave_one$confusion
rf_two_cat$confusion

结果:

> rf_three_cat$confusion
                                   1. Democrats (including leaners) 2. Independents 3. Republicans (including leaners) class.error
1. Democrats (including leaners)                               1150               3                                668   0.3684789
2. Independents                                                 296               4                                231   0.9924670
3. Republicans (including leaners)                              600               9                               1055   0.3773234

> rf_leave_one$confusion
                                   1. Democrats (including leaners) 2. Independents 3. Republicans (including leaners) class.error
1. Democrats (including leaners)                               1080               0                                741   0.4069193
2. Independents                                                   0               0                                  1   1.0000000
3. Republicans (including leaners)                              517               0                               1097   0.3203222

> rf_two_cat$confusion
     Dem Rep class.error
Dem 1776  45   0.0247117
Rep 1581  33   0.9795539

0 个答案:

没有答案