如何进一步提高森林覆盖预测的准确性

数据挖掘 机器学习 r 预测建模 随机森林
2022-03-08 13:11:59

在 Kaggle 上做Forest-Cover-Type-prediction

这是训练和测试数据

> dim(train)
[1] 15120    56
> dim(test)
[1] 565892     56

到目前为止,我已经这样做了:

结合这些数据comb <- rbind(train,test)

然后将 40 个互斥的 Soil_Type 列映射为一个,并将 4 个互斥的 Wilderness_Area 列映射为一个。

comb$Soil <- apply(comb[grep("Soil_Ty+",colnames(comb))], 1 , function(x){which(x == 1)})
comb$Wilderness <- apply(comb[grep("Wilderness_Are+",colnames(comb))], 1 , function(x){which(x == 1)})

删除这 44 列后,我将其减少到 14 列。

> dim(comb)
[1] 581012     14
> colnames(comb)
 [1] "Id"                                 "Elevation"                          "Aspect"                            
 [4] "Slope"                              "Horizontal_Distance_To_Hydrology"   "Vertical_Distance_To_Hydrology"    
 [7] "Horizontal_Distance_To_Roadways"    "Hillshade_9am"                      "Hillshade_Noon"                    
[10] "Hillshade_3pm"                      "Horizontal_Distance_To_Fire_Points" "Cover_Type"                        
[13] "Soil"                               "Wilderness"       

然后我将数据分开

train <- comb[1:15120,]
test <- comb[15121:581012,]

并在此数据上运行 randomForest

set.seed(415)
fit <- randomForest(Cover_Type ~ .,data=train[-1], importance=TRUE, ntree=2000, na.action = na.omit)
varImpPlot(fit)
predi <- predict(fit,test)

在 Kaggle 上获得了 0.70372 的准确度。现在我已经碰壁了。我尝试根据 Cover_Type(要预测的变量)绘制各种变量,但无法弄清楚如何处理这些变量。 在此处输入图像描述

如何从这里提高准确性?在这种情况下,一般方法是什么?

2个回答

几个建议:你的训练集比你的测试集小?应该反过来。

您还应该使用保留集或交叉验证来调整射频超表。人们在 RF 上调整的两个参数是 ntrees 和 mtry。

您可以尝试随机搜索或网格搜索以获得更好的准确性。您还可以使用可变重要性创建新模型。

http://machinelearningmastery.com/tune-machine-learning-algorithms-in-r