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)
您能否提供一個(小)可重現的示例? –
對不起,我是新來的stackoverflow,我不知道我該怎麼做?因爲對於每個變量,都有不同的命令需要花費時間來運行。哪部分代碼更適合在這裏上傳? –
dput(head(Table_Importance,20))會給我們Table_Importance的前20行。這就是Randomforest的內容。但首先檢查您是否未從預測函數中獲取任何錯誤,以及Table_Importance中的數據是否與您期望的一致。沒有NA,只有零等。 – phiver