【问题标题】:How do you access the model parameters in ml_decision_tree in the Sparklyr package?如何访问 Sparklyr 包中 ml_decision_tree 中的模型参数?
【发布时间】:2018-07-27 20:15:25
【问题描述】:

我有一些示例代码只能在一台机器上运行。经过一些测试,我发现工作的机器运行的是 R 3.4.2,而其他所有机器都运行的是 3.4.3。

经过一些工作,我发现访问 ml_decision_tree 参数的方式发生了某种变化。我正在尝试获取标签。这是旧的做法:

model_iris$model.parameters$labels

那已经不行了。如果您在脚本的其余部分的上下文中运行它,我会得到一个空值。我已经尝试实际查看列表对象以确定层次结构标签的存储位置并且我可以看到它们,但无论我做什么,我似乎都无法深入研究它们。

这是整个脚本的一个版本:

library(tidyverse)
library(sparklyr)
library(Rcpp)
sc <- spark_connect(master = "local")
iris_tbl <- copy_to(sc, iris)

partition_iris <- sdf_partition(import_iris, training=0.5, testing=0.5)

sdf_register(partition_iris, c("spark_iris_training", "spark_iris_test"))

tidy_iris <- tbl(sc, "spark_iris_training") %>%
  select(Species, Petal_Length, Petal_Width)

model_iris <- tidy_iris %>%
  ml_decision_tree(response="Species", features=c("Petal_Length", "Petal_Width"))

test_iris <- tbl(sc, "spark_iris_test")

pred_iris <- sdf_predict(model_iris, test_iris) %>%
  collect

library(ggplot2)

pred_iris %>%
  inner_join(data.frame(prediction=0:2, lab=model_iris$model.parameters$labels)) %>%
  ggplot(aes(Petal_Length, Petal_Width, col=lab)) + geom_point()

编辑:我正在运行的包的版本似乎有所不同。 工作代码运行 sparklyr 0.6.3。破解版本为0.7.0-9004。

【问题讨论】:

  • 我正在使用 sparklyr。这就是我标记问题的方式。让我换个问题,让它更清楚。

标签: r apache-spark sparklyr


【解决方案1】:

model_iris$model.parameters$labels 现在可以通过model_iris$.index_labels 访问。

您可以改为运行:

pred_iris %>%
  inner_join(data.frame(prediction=0:2, lab=model_iris$.index_labels)) %>%
  ggplot(aes(Petal_Length, Petal_Width, col=lab)) + geom_point()

但是,由于model_iris$.index_labels 是内部的,为了防止代码在未来被破坏,我们应该从原始数据集或预测数据帧中获取标签:

pred_iris %>%
  inner_join(data.frame(prediction=0:2, lab=unique(iris$Species))) %>%
  ggplot(aes(Petal_Length, Petal_Width, col=lab)) + geom_point()

或者,

pred_iris %>%
  inner_join(data.frame(prediction=0:2, lab=unique(pred_iris$predicted_label))) %>%
  ggplot(aes(Petal_Length, Petal_Width, col=lab)) + geom_point()

【讨论】:

    【解决方案2】:

    pred_iris 应该有一个 predicted_label 列,其中包含您需要的内容。您是否还有其他需要从模型对象中获取标签的用例?

    【讨论】:

    • 使用该方法让我获得了每条记录中的所有标签。 model_iris$.index_labels 每个标签只给我一个实例。
    • 这不就是你正在做的加入吗?相反,您可以写ggplot(pred_iris, aes(Petal_Length, Petal_Width, col=predicted_label)) + geom_point()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 2020-03-10
    • 2015-08-07
    • 2015-08-13
    • 1970-01-01
    相关资源
    最近更新 更多