在栅格堆栈上对 h2o.deeplearning 模型使用预测函数时出错

问题描述 投票:0回答:1

我正在尝试使用

h2o.deeplearning
模型来预测栅格数据。它返回给我以下错误

错误:与请求的类型不兼容:[type=character;目标=双]。

这是一个最小的、可复制的、独立的示例

library(terra)
library(h2o)
library(tidyverse)

h2o.init()

# create a RasterStack or RasterBrick with with a set of predictor layers
logo <- rast(system.file("external/rlogo.grd", package="raster"))
names(logo)

# known presence and absence points
p <- matrix(c(48, 48, 48, 53, 50, 46, 54, 70, 84, 85, 74, 84, 95, 85,
              66, 42, 26, 4, 19, 17, 7, 14, 26, 29, 39, 45, 51, 56, 46, 38, 31,
              22, 34, 60, 70, 73, 63, 46, 43, 28), ncol=2)
a <- matrix(c(22, 33, 64, 85, 92, 94, 59, 27, 30, 64, 60, 33, 31, 9,
              99, 67, 15, 5, 4, 30, 8, 37, 42, 27, 19, 69, 60, 73, 3, 5, 21,
              37, 52, 70, 74, 9, 13, 4, 17, 47), ncol=2)

# extract values for points
xy <- rbind(cbind(1, p), cbind(0, a))
v <- data.frame(cbind(pa=xy[,1], terra::extract(logo, xy[,2:3]))) %>% 
  mutate(pa = as.factor(pa))

str(v) 

#### Import data to H2O cluster
df <- as.h2o(v)

#### Split data into train, validation and test dataset
splits <- h2o.splitFrame(df, c(0.70,0.15), seed=1234)
train  <- h2o.assign(splits[[1]], "train.hex")
valid  <- h2o.assign(splits[[2]], "valid.hex")
test   <- h2o.assign(splits[[3]], "test.hex")

#### Create response and features data sets
y <- "pa"
x <- setdiff(names(train), y)

### Deep Learning Model
dl_model <- h2o.deeplearning(training_frame=train,                      
  validation_frame=valid,                    
  x=x,                                       
  y=y,                                      
  standardize=TRUE,                          
  seed=125)

dnn_pred <- function(model, data, ...) {
  predict(model, newdata=as.h2o(data), ...)
}

p <- predict(logo, model=dl_model, fun=dnn_pred)
plot(p)
r h2o predict terra
1个回答
0
投票

它对我来说适用于

dnn_pred
的修改:

dnn_pred <- function(model, data, ...) {
   predict(model, newdata=as.h2o(data), ...) |> as.data.frame()
}

p <- predict(logo, model=dl_model, fun=dnn_pred)
plot(p)

© www.soinside.com 2019 - 2024. All rights reserved.