使用数据库中的数据(不同的表)定义mlr3任务?

使用数据库中的数据(不同的表)定义mlr3任务?,r,mlr3,R,Mlr3,这是一个新手问题。 如何定义使用(sqlite)数据库数据的(分类)tsk?似乎先从内存中写入数据。在我的例子中,数据已经在数据库中。更大的问题可能是,目标数据和特征位于不同的表中 我尝试的是: con <- DBI::dbConnect(RSQLite::SQLite(), dbname = "my_data.db") my_features <- dplyr::tbl(con, "my_features") my_target <-

这是一个新手问题。 如何定义使用(sqlite)数据库数据的(分类)
tsk
?似乎先从内存中写入数据。在我的例子中,数据已经在数据库中。更大的问题可能是,目标数据和特征位于不同的表中

我尝试的是:

con <- DBI::dbConnect(RSQLite::SQLite(), dbname = "my_data.db")
my_features <- dplyr::tbl(con, "my_features")
my_target <- dplyr::tbl(con, "my_targets")
task <- mlr3::TaskClassif$new("my_task", backend=my_features, target="???")

con可以将数据拆分为(1)多个表或(2)多个数据库。在您的例子中,看起来数据被拆分成多个表,但是您可以使用相同的DBI连接来访问它们

您所需要的只是一个键列来连接这两个表。在下面的示例中,我使用了一个简单的整数键列和一个
internal\u join()
将两个表合并到一个新表中,但这多少取决于您的数据库方案

library(mlr3)
library(mlr3db)

# base data set
data = iris
data$row_id = 1:nrow(data)

# create data base with two tables, split data into features and target and
# keep key column `row_id` in both tables
path = tempfile()
con = DBI::dbConnect(RSQLite::SQLite(), dbname = path)
DBI::dbWriteTable(con, "features", subset(data, select = - Species))
DBI::dbWriteTable(con, "target", subset(data, select = c(row_id, Species)))
DBI::dbDisconnect(con)

# re-open table
con = DBI::dbConnect(RSQLite::SQLite(), dbname = path)

# access tables with dplyr
tbl_features = dplyr::tbl(con, "features")
tbl_target = dplyr::tbl(con, "target")

# join tables with an inner_join
tbl_joined = dplyr::inner_join(tbl_features, tbl_target, by = "row_id")

# convert to a backend and create the task
backend = as_data_backend(tbl_joined, primary_key = "row_id")
mlr3::TaskClassif$new("my_task", backend, target = "Species")

如果此处未提供解决方案,请随时在打开问题。