0

kknn在 R 中使用mlr包和交叉验证时,是否可以从模型中检索距离矩阵?

library("mlr")

data(iris)

task = makeClassifTask(data = iris, target = "Species")

lnr = makeLearner(
  cl = "classif.kknn",
  predict.type = "prob",
  k = 5,
  kernel = "gaussian",
  scale = TRUE
)

cv = crossval(
  learner = lnr,
  task = task,
  iters = 4,
  stratify = TRUE,
  measures = acc,
  show.info = FALSE,
  model = TRUE
)

str(cv$models[1])

cv$models我在or中看不到任何相关内容cv$pred

4

1 回答 1

1

的返回值为crossvala ResampleResult,其中包含在成员中的各个迭代中拟合的模型$models(请注意,这是一个列表)。模型是底层学习器返回的对象,因此在每个模型中都应该有一个$D$包含距离矩阵的成员。

有关更多信息,请参阅教程

编辑:在这种特殊情况下,您不会在通常的地方获得学习者模型,因为kknn它是一个(无模型)聚类器,并且该kknn函数实际上不会被调用,mlr直到您predict. 返回的“模型”train只是训练数据(带有一些额外的位)。

predict函数只返回预测而不是模型,因此不幸的是,在这种特殊情况下,您无法直接获取距离矩阵。但是,您可以从中获取学习器模型mlr并调用kknn它来获取距离矩阵:

 kknn(getTaskFormula(cv$models[[1]]$task.desc),
  train = cv$models[[1]]$learner.model$data,
  test = iris)$D
于 2017-08-06T16:11:46.210 回答