随机森林-结果好得令人难以置信

时间:2019-02-27 13:44:08

标签: tree random-forest prediction

我正在使用不平衡数据的随机森林,这个站点上已经在这里评论了一个问题,并针对该问题提供了几种解决方案,重点是过采样,欠采样和SMOTE。

我要研究的变量由数字0的75%和数字1的25%(或接近56.000 / 14.000)组成,这些变量将由其他18个变量回归。我不知道是否有必要在此处发布数据库,或者仅通过查看下面将发布的代码是否可以解决问题。

我最初使用80%的数据进行了训练,而使用20%的进行了测试,结果在MSE方面非常好,但考虑到预测1时,准确性,回想度和f1得分较差提示该模型的0偏差较大。

在另一篇文章中,建议strata中的sampsizerandomForest函数可以解决此问题,使我的代码看起来像这样(sinistros2是我的数据): / p>

    train_idx <- sample(1:nrow(sinistros2),56538,replace=FALSE)
    train6 <- sinistros2[train_idx,] # select all these rows
    teste6 <- sinistros2[-train_idx,]
rf.mdl <- randomForest( y=as.factor(train6[,1]), x=train6[,2:ncol(sinistros2)],
                        strata=as.factor(train6$ev), sampsize=c(50,50),
                        ntree=100)
    plot(rf.mdl)

Plot of tree-error curve

print(rf.mdl)

Call:
 randomForest(x = train6[, 2:ncol(sinistros2)], y = as.factor(train6[,      1]), ntree = 100, strata = as.factor(train6$ev), sampsize = c(50,      50)) 
               Type of random forest: classification
                     Number of trees: 100
No. of variables tried at each split: 4

        OOB estimate of  error rate: 0.23%
Confusion matrix:
      0     1 class.error
0 43465     0  0.00000000
1   131 12942  0.01002065

所以我对测试集进行了预测,并计算了测量,召回率和F1 socre的准确性

pred6<-predict(rf.mdl, newdata=teste6) #prediction
tab6<-table(pred6,teste6$ev)
tab6

pred6     0     1
    0 10725    42
    1     0  3233

    1-sum(diag(tab6))/sum(tab6)
[1] 0.003 
    p1<-tab6[1,1]/(tab6[1,1]+tab6[2,1]) #classe1 precision
[1] 1
    p2<-tab6[2,2]/(tab6[2,2]+tab6[1,2]) #classe 2 precision
[1] 0.9871756
    r1<-tab6[1,1]/(tab6[1,1]+tab6[1,2]) #classe 1 recall
[1] 0.9960992
    r2<-tab6[2,2]/(tab6[2,2]+tab6[2,1]) #classe 1 recall
[1] 1
    f1<-2*p1*r1/(p1+r1) #f1 score
[1] 0.9980458
    f2<-2*p2*r2/(p2+r2) #f1 score
[1] 0.9935464

如您所见,结果显然非常好,如果我没有弄错的话,这会让我很感兴趣。您能找到什么帮助吗?

在发布此问题之前,我在这里阅读了很多内容,但没有任何帮助。 This是一个与我的问题类似的问题,但是我的算法显示出很高的准确性,因此无法估算ROC曲线和AUC。

0 个答案:

没有答案