我将一个随机森林模型与R中测试点的表格数据相匹配,现在希望使用与模型中相同预测值(例如坡度、海拔、pH)对应的光栅数据生成一个光栅,显示预测概率值。
RF模型用于使用不同的环境和地球物理数据预测0/1二元变量SITE\u NONSITE。
#random forest model
set.seed(321)
rf1 <- randomForest(formula=SITE_NONSITE ~., data=dcc.s.dummy, ntree=500, mtry=10)
dcc。s、 假人包括以下数据:
str(dcc.s.dummy)
'data.frame': 7899 obs. of 25 variables:
$ COST_DIST_ECOTONE : num -0.232 0.176 -0.443 -0.478 -0.305 ...
$ COST_DIST_HEA : num -0.233 -0.659 -1.055 -0.999 -0.455 ...
$ COST_DIST_MEDSTR : num 0.74388 0.63933 0.55964 0.50768 0.00993 ...
$ COST_DIST_RIV_COAST : num 0.59 0.63 0.621 0.639 0.617 ...
$ DEM30_ASP_RE_2 : num 0 0 0 0 1 0 0 0 0 0 ...
$ DEM30_ASP_RE_3 : num 0 1 0 0 0 0 0 0 1 0 ...
$ DEM30_ASP_RE_4 : num 1 0 0 0 0 0 0 1 0 0 ...
$ DEM30_ASP_RE_5 : num 0 0 1 1 0 1 1 0 0 1 ...
$ DEM30_M : num 0.916 0.72 0.499 0.54 1.114 ...
$ DEM30_SLOPE : num 0.2063 0.4631 -0.6445 -0.0512 -0.8235 ...
$ LOC_REL_RE : num -0.489 -0.476 -0.476 -0.459 -0.661 ...
$ LOC_SD_SLOPE : num -0.118 -0.135 -0.316 -0.367 -0.57 ...
$ SSURGO_ESRI_DRAINAGE_RE_2: num 0 0 0 0 0 0 0 0 0 0 ...
$ SSURGO_ESRI_DRAINAGE_RE_3: num 1 1 1 1 1 1 1 1 1 1 ...
$ SSURGO_ESRI_DRAINAGE_RE_4: num 0 0 0 0 0 0 0 0 0 0 ...
$ SSURGO_ESRI_DRAINAGE_RE_5: num 0 0 0 0 0 0 0 0 0 0 ...
$ SSURGO_ESRI_DRAINAGE_RE_6: num 0 0 0 0 0 0 0 0 0 0 ...
$ SSURGO_ESRI_EROSION_RE_2 : num 0 0 0 0 0 1 1 0 0 1 ...
$ SSURGO_ESRI_EROSION_RE_3 : num 1 1 1 0 1 0 0 1 1 0 ...
$ SSURGO_ESRI_EROSION_RE_4 : num 0 0 0 0 0 0 0 0 0 0 ...
$ SSURGO_ESRI_LOC_DIV : num -0.328 -0.188 -0.157 -0.213 -0.652 ...
$ SSURGO_ESRI_NATIVEVEG_2 : num 1 1 1 0 1 0 0 1 1 1 ...
$ SSURGO_ESRI_NATIVEVEG_3 : num 0 0 0 0 0 1 1 0 0 0 ...
$ SSURGO_PH : num 0.813 0.059 1.529 2.32 -1.298 ...
$ SITE_NONSITE : Factor w/ 2 levels "0","1": 2 2 2 2 2 1 1 2 2 2
然后,我在整个研究区域内获取与这些相同预测值对应的光栅,并将它们组合成光栅堆栈:
#plot model predictions
COST_DIST_ECOTONE <- raster("cost_dist_ecotone_s.tif.tif")
COST_DIST_HEA <- raster("cost_dist_hea_s.tif.tif")
COST_DIST_MEDSTR <- raster("cost_dist_medstr_s.tif.tif")
COST_DIST_RIV_COAST <- raster("cost_dist_riv_coast_s.tif.tif")
DEM30_ASP_RE_2 <- raster("dem30_asp_rel_2.tif.tif")
DEM30_ASP_RE_3 <- raster("dem30_asp_rel_3.tif.tif")
DEM30_ASP_RE_4 <- raster("dem30_asp_rel_4.tif.tif")
DEM30_ASP_RE_5 <- raster("dem30_asp_rel_5.tif.tif")
DEM30_M <- raster("dem30_m_s.tif.tif")
DEM30_SLOPE <- raster("dem30_slope_s.tif.tif")
LOC_REL_RE <- raster("loc_rel_re_s.tif.tif")
LOC_SD_SLOPE <- raster("loc_sd_slope_s.tif.tif")
SSURGO_ESRI_DRAINAGE_RE_2 <- raster("SSURGO_ESRI_drainage_reclass_nulfill_2.tif.tif")
SSURGO_ESRI_DRAINAGE_RE_3 <- raster("SSURGO_ESRI_drainage_reclass_nulfill_3.tif.tif")
SSURGO_ESRI_DRAINAGE_RE_4 <- raster("SSURGO_ESRI_drainage_reclass_nulfill_4.tif.tif")
SSURGO_ESRI_DRAINAGE_RE_5 <- raster("SSURGO_ESRI_drainage_reclass_nulfill_5.tif.tif")
SSURGO_ESRI_DRAINAGE_RE_6 <- raster("SSURGO_ESRI_drainage_reclass_nulfill_6.tif.tif")
SSURGO_ESRI_EROSION_RE_2 <- raster("SSURGO_ESRI_erosion_reclass_nulfilll_2.tif.tif")
SSURGO_ESRI_EROSION_RE_3 <- raster("SSURGO_ESRI_erosion_reclass_nulfilll_3.tif.tif")
SSURGO_ESRI_EROSION_RE_4 <- raster("SSURGO_ESRI_erosion_reclass_nulfilll_4.tif.tif")
SSURGO_ESRI_LOC_DIV <- raster("SSURGO_ESRI_loc_div_s.tif.tif")
SSURGO_ESRI_NATIVEVEG_2 <- raster("SSURGO_ESRI_nativeveg_nullfill_2.tif.tif")
SSURGO_ESRI_NATIVEVEG_3 <- raster("SSURGO_ESRI_nativeveg_nullfill_3.tif.tif")
SSURGO_PH <- raster("SSURGO_pH_nullfill_s.tif.tif")
ApPl_stack <- stack(COST_DIST_ECOTONE, COST_DIST_HEA, COST_DIST_MEDSTR, COST_DIST_RIV_COAST, DEM30_ASP_RE_2, DEM30_ASP_RE_3, DEM30_ASP_RE_4, DEM30_ASP_RE_5, DEM30_M, DEM30_SLOPE, LOC_REL_RE, LOC_SD_SLOPE, SSURGO_ESRI_DRAINAGE_RE_2, SSURGO_ESRI_DRAINAGE_RE_3, SSURGO_ESRI_DRAINAGE_RE_4, SSURGO_ESRI_DRAINAGE_RE_5, SSURGO_ESRI_DRAINAGE_RE_6, SSURGO_ESRI_EROSION_RE_2, SSURGO_ESRI_EROSION_RE_3, SSURGO_ESRI_EROSION_RE_4, SSURGO_ESRI_LOC_DIV, SSURGO_ESRI_NATIVEVEG_2, SSURGO_ESRI_NATIVEVEG_3, SSURGO_PH)
但是,尝试在光栅::predict()中使用此光栅堆栈将失败,并出现以下错误:
ApPl_prob <- raster::predict(rf1, newdata=ApPl_stack, type="prob")
as中出错。数据框架默认值(x[[i]],可选值=TRUE):无法将类的结构(“RasterLayer”,package=“raster”)”强制为数据。框架
转换为数据帧并使用该帧会产生以下错误:
ApPl_df <- as.data.frame(ApPl_stack, xy=TRUE)
ApPl_prob <- raster::predict(rf1, newdata=ApPl_df, type="prob")
模型错误。框架默认值(Terms,newdata,na.action=na.omit):
对象不是矩阵。此外:警告消息:“newdata”有658242行,但找到的变量有754行
我的每个预测光栅中都有658242个单元格和754行,这不是巧合。我错过了什么?我觉得其中一个函数需要的是它没有得到的数据类型。
在更仔细地检查了上述代码生成的所有对象的结构之后,我发现了问题。无论出于何种原因,stack()
正在将光栅图层的名称更改回其原始文件名,而不是我指定的对象名称。起初,我没有注意到这个问题,因为plot(ApPl\u stack)
显示了我期望的名称,尽管它们实际上没有反映在光栅堆栈的结构中。因此,提供给光栅::predict()的堆栈中的光栅名称与随机林模型中的名称不匹配。
添加一个额外的步骤来分配匹配的名称解决了问题:
names(ApPl_stack) <- c("COST_DIST_ECOTONE", "COST_DIST_HEA", "COST_DIST_MEDSTR", "COST_DIST_RIV_COAST", "DEM30_ASP_RE_2", "DEM30_ASP_RE_3", "DEM30_ASP_RE_4", "DEM30_ASP_RE_5", "DEM30_M", "DEM30_SLOPE", "LOC_REL_RE", "LOC_SD_SLOPE", "SSURGO_ESRI_DRAINAGE_RE_2", "SSURGO_ESRI_DRAINAGE_RE_3", "SSURGO_ESRI_DRAINAGE_RE_4", "SSURGO_ESRI_DRAINAGE_RE_5", "SSURGO_ESRI_DRAINAGE_RE_6", "SSURGO_ESRI_EROSION_RE_2", "SSURGO_ESRI_EROSION_RE_3", "SSURGO_ESRI_EROSION_RE_4", "SSURGO_ESRI_LOC_DIV", "SSURGO_ESRI_NATIVEVEG_2", "SSURGO_ESRI_NATIVEVEG_3", "SSURGO_PH")
然后我能够使用以下代码生成和绘制预测,没有问题:
#plot predictions and save raster to file
ApPl_prob <- 1- raster::predict(model=rf1, object=ApPl_stack, type="prob")
palette <- matlab.like(20)
plot(ApPl_prob, col=palette)
writeRaster(ApPl_prob, "ApPl_prob", format='GTiff')
“对象名称”与层名称无关,因此您需要设置这些名称以匹配用于适应模型的data.frame中的名称。在大多数工作流程中,您会执行以下操作
f <- c("cost_dist_ecotone_s.tif.tif", "cost_dist_hea_s.tif.tif", "cost_dist_medstr_s.tif.tif")
s <- stack(f)
names(s) <- gsub(".tif.tif", "", f)
然后从RasterStack中提取值以适应您的模型——在这种情况下,名称已经匹配。
但你犯的主要错误是在这里
ApPl_prob <- raster::predict(rf1, newdata=ApPl_stack, type="prob")
第一个参数应该是RasterStack:
ApPl_prob <- raster::predict(ApPl_stack, rf1, type="prob")
或者像回答中那样使用命名参数
raster::predict(model=rf1, object=ApPl_stack, type="prob")
蜂窝利用 目前,我们已经知道了如何在头单元上运行代码,前提是你能用USB设备(劫持)来连接汽车或访问车内的Wi-Fi(利用D-BUS漏洞/功能)。最大的问题是,这些入侵方法都要么需要接触到汽车,要么就需要攻击者加入到车上的Wi-Fi热点。 如果能加入到车内的Wi-Fi热点并进行漏洞利用是非常让人激动的,因为这就说明我们已经远程入侵了一辆原装汽车,但是,对我们来说,这其中的前提和限制还是太多了。首先
本文向大家介绍js利用appendChild对 标签进行排序的实现方法,包括了js利用appendChild对 标签进行排序的实现方法的使用技巧和注意事项,需要的朋友参考一下 按照从大到小排序 appendChild: 假设父级a中已经有子节点b,那么a.appendChild(b)的作用是:1.先将子节点b从父级a中删除;2.再将子节点b添加到a中,放在最末尾。 以上就是小编为大家带来的js利用
是否可以同时利用GraphQL和Mongoose? 到目前为止,我已经能够集成GraphQL和Mongoose来处理填充数据库,但是我很难理解这如何工作来检索数据,特别是具有嵌套引用的数据。 考虑这个模式: Bar模式本质上是相同的,只有一个“名称”字段。 是否可以运行GraphQL查询,用“bar”中的引用填充数据? 目前,我们正在使用GraphQL工具创建TypeDef、突变和查询,如下所示:
谁能解释一下这两种方法的真正区别 vm。GetTotalizationofCPU(CloudSim.clock()); 和 cloudlet.get利用OfCpu(CloudSim.clock()); 提前感谢
现在我们已经学会了如何访问目标机器。在本节中,我们将学习在获得计算机访问权限后可以完成的许多事情。无论我们如何获得对目标计算机的访问权限,我们都会关注它们。 在上一节中,当我们从目标获得反向Meterpreter会话时,我们总是停下来。但在本节中,我们将从Meterpreter会话开始。我们将学习,获得访问后我们可以做些什么。我们将讨论如何保持对目标计算机的访问,即使目标重新启动计算机或用户卸载易
问题内容: 在Linux中是否有命令或任何其他方式来获取当前或平均 CPU使用率 (对于多处理器环境)? 我在小型系统中使用嵌入式Linux。基本上,我需要确定CPU利用率,以便在CPU利用率很高的情况下,可以将新进程转移到系统中的另一个控制器,而不是在可能忙于执行更重要进程的主处理器上执行。 这个问题不仅仅在于对进程进行优先级排序,另一个控制器可以充分处理新进程,只是当主处理器不忙时,我希望它来