2016-01-05 73 views
0

我实现了随机森林,然后使用10个变量开始预测森林中的叶面积指数。但是当预测停止时,预测的输出是一个空值的空值图。我很感激,如果有人帮助我。我在这里添加我正在运行的代码。Randomforest模型的预测

这里第一步,我给栅格中的NA值赋零。

tex37$glcm_variance_ENVI[is.na(tex37$glcm_variance_ENVI)] <- 0 
tex37$glcm_entropy[is.na(tex37$glcm_entropy)] <- 0 
RVI_raster3$glcm_mean_ENVI[is.na(RVI_raster3$glcm_mean_ENVI)] <- 0 
RVI_raster3$glcm_mean[is.na(RVI_raster3$glcm_mean)] <- 0 
RVI_raster3$glcm_variance[is.na(RVI_raster3$glcm_variance)] <- 0 
RVI_raster5$glcm_mean_ENVI[is.na(RVI_raster5$glcm_mean_ENVI)] <- 0 
RVI_raster5$glcm_variance[is.na(RVI_raster5$glcm_variance)] <- 0 
RVI_raster5$glcm_mean[is.na(RVI_raster5$glcm_mean)] <- 0 
RVI_raster7$glcm_mean_ENVI[is.na(RVI_raster7$glcm_mean_ENVI)] <- 0 
RVIrededge[is.na(RVIrededge)] <- 0 

在这里,我将所有10个栅格图层堆叠在一个栅格中。

image_stack_imp = stack(tex37$glcm_variance_ENVI, 
        tex37$glcm_entropy, 
        RVI_raster3$glcm_mean_ENVI, 
        RVI_raster3$glcm_mean, 
        RVI_raster3$glcm_variance, 
        RVI_raster5$glcm_mean_ENVI, 
        RVI_raster5$glcm_variance, 
        RVI_raster5$glcm_mean, 
        RVI_raster7$glcm_mean_ENVI, 
        RVIrededge) 

我从我的功能做了一个表,再加上叶面积指数作为标签。

Table_Importance = data.frame(LAI=d$LAI, 
          tex37.glcm_variance_ENVI=LAI37$glcm_variance_ENVI, 
          tex37.glcm_entropy=LAI37$glcm_entropy, 
          RVI_raster3.glcm_mean_ENVI=RVI3$glcm_mean_ENVI, 
          RVI_raster3.glcm_variance=RVI3$glcm_variance, 
          RVI_raster3.glcm_mean=RVI3$glcm_mean, 
          RVI_raster5.glcm_variance=RVI5$glcm_variance, 
          RVI_raster5.glcm_mean_ENVI=RVI5$glcm_mean_ENVI, 
          RVI_raster5.glcm_mean=RVI5$glcm_mean, 
          RVI_raster7.glcm_mean_ENVI=RVI7$glcm_mean_ENVI, 
          RVIrededge_values) 

最后运行随机森林:

set.seed(104) 
ind <- sample(2, nrow(Table_Importance), replace = 1, prob=c(0.66,0.33)) 
rf_imp<- randomForest(LAI ~ ., data=Table_Importance[ind ==  1,],importance=TRUE, ntree=1000, mtry=3) 
pred_imp <- predict(rf_imp, Table_Importance[ind == 2,]) 
rmse(Table_Importance[ind==2, "LAI"], pred_imp) 
###############################predicting######################## 
Map_LAI = predict(image_stack_imp, rf_imp,na.rm = TRUE, progress='window', type ='response') 
plot(Map_LAI) 

这里是小样本:

(head(Table_Importance, 20) 
+0

您能否提供一个(小)可重现的示例? –

+0

对不起,我是新来的stackoverflow,我不知道我该怎么做?因为对于每个变量,都有不同的命令需要花费时间来运行。哪部分代码更适合在这里上传? –

+0

dput(head(Table_Importance,20))会给我们Table_Importance的前20行。这就是Randomforest的内容。但首先检查您是否未从预测函数中获取任何错误,以及Table_Importance中的数据是否与您期望的一致。没有NA,只有零等。 – phiver

回答

0

找到自己的问题,:d 答案是唯一的,该表的名称属性应该与培训表的名称相同。在我的情况下,属性名称如下:

Table_Importance = data.frame(LAI=d$LAI, 
          glcm_variance_ENVI=LAI37$glcm_variance_ENVI, 
          glcm_entropy=LAI37$glcm_entropy, 
          glcm_mean_ENVI.1=RVI3$glcm_mean_ENVI, 
          glcm_variance.1=RVI3$glcm_variance, 
          glcm_mean.1=RVI3$glcm_mean, 
          glcm_variance.2=RVI5$glcm_variance, 
          glcm_mean_ENVI.2=RVI5$glcm_mean_ENVI, 
          glcm_mean.2=RVI5$glcm_mean, 
          glcm_mean_ENVI.3=RVI7$glcm_mean_ENVI, 
          layer=RVIrededge_values)