如何访问 Sparklyr 包中 ml_decision_tree 中的模型参数?
How do you access the model parameters in ml_decision_tree in the Sparklyr package?
我有一些示例代码只能在一台机器上运行。经过一些测试,我发现工作的机器是 运行ning R 3.4.2,而其他一切都是 运行ning 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()
编辑:我运行宁的软件包版本似乎有所不同。
工作代码 运行s sparklyr 0.6.3。坏掉的版本是0.7.0-9004.
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()
pred_iris
应该有一个包含您需要的内容的 predicted_label
列。您还有其他需要从模型对象获取标签的用例吗?
我有一些示例代码只能在一台机器上运行。经过一些测试,我发现工作的机器是 运行ning R 3.4.2,而其他一切都是 运行ning 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()
编辑:我运行宁的软件包版本似乎有所不同。 工作代码 运行s sparklyr 0.6.3。坏掉的版本是0.7.0-9004.
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()
pred_iris
应该有一个包含您需要的内容的 predicted_label
列。您还有其他需要从模型对象获取标签的用例吗?