在 Sparklyr 中使用 ml_fpgrowth 选择支持度和置信度值
Choosing support and confidence values with ml_fpgrowth in Sparklyr
我试图从这个 Kaggle script 中获得一些灵感,作者在其中使用规则在 R 中执行市场篮子分析。我对他们传递置信向量和支持值,然后绘制生成的规则数以帮助选择要使用的最佳值,而不是生成大量规则。
我想尝试相同的过程,但我在 R 中使用 sparklyr/spark 和 fpgrowth,我正在努力实现相同的输出,即每个置信度和支持值的规则数。
从有限的示例和文档中,我相信我将我的交易数据传递给了 ml_fpgrowth 我的信心和支持价值。然后此函数生成一个模型,然后需要将其传递给 ml_association_rules 以生成规则。
# CONVERT TABLE TO TRANSACTION FORMAT
trans <- medical_tbl %>%
group_by(alt_claim_id) %>%
summarise(items = collect_list(proc_cd))
# SUPPORT AND CONFIDENCE VALUES
supportLevels <- c(0.1, 0.05, 0.01, 0.005)
confidenceLevels <- c(0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1)
# EMPTY LISTS
model_sup10 <- vector("list", length = 9)
model_sup5 <- vector("list", length = 9)
model_sup1 <- vector("list", length = 9)
model_sup0.5 <- vector("list", length = 9)
# FP GROWTH ALGORITHM WITH A SUPPORT LEVEL OF 10%
for (i in 1:length(confidenceLevels)) {
model_sup10[i] <- ml_fpgrowth(trans,
min_support = supportLevels[1],
min_confidence = confidenceLevels[i],
items_col = "items",
uid = random_string("fpgrowth_"))}
我尝试检查上述模型之一的一些规则 model_sup101 但我无法提取任何规则。从下面的代码中我得到以下错误
rules <- ml_association_rules(model_sup10[[1]][1])
Error: $ operator is invalid for atomic vectors
任何人都可以帮助甚至解释 fpgrowth 是否可以做到这一点,以及实现我绘制每个 support/confidence 配对生成的规则数量的目标的最佳方法是什么?
在与 dplyr 和 sparklyr 进行了一些头脑碰撞之后,我设法将以下内容拼凑在一起。如果有人对我如何改进此代码有任何反馈,请随时发表评论。
# SUPPORT AND CONFIDENCE VALUES
supportLevels <- c(0.1, 0.05, 0.01, 0.005)
confidenceLevels <- c(0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1)
# CREATE FUNCTION TO LOOP THROUGH SUPPORT AND CONFIDENCE LEVELS AND RETURN NUMBER OF RULES GENERATED
testModelFunction <- function(i, j) {
ml_fpgrowth(trans,
min_support = as.numeric(i),
min_confidence = as.numeric(j),
items_col = "items",
uid = random_string("fpgrowth_")) %>%
ml_association_rules() %>%
count(name = "rules") %>%
pull()
}
# CREATE A LIST TO STORE THE OUTPUT FROM testModelFunction
l = list()
n = 1
for (i in supportLevels) {
for (j in confidenceLevels) {
message(paste(i, j))
tryCatch({
l[[n]] <- list(supportLevels = i, confidenceLevels = j, n_rules = testModelFunction(i, j))
},
error = function(e) {
l[[n]] <- list(supportLevels = i, confidenceLevels = j, error = e)
})
n <- n + 1
}
}
rbindlist(l, fill = T)
我试图从这个 Kaggle script 中获得一些灵感,作者在其中使用规则在 R 中执行市场篮子分析。我对他们传递置信向量和支持值,然后绘制生成的规则数以帮助选择要使用的最佳值,而不是生成大量规则。
我想尝试相同的过程,但我在 R 中使用 sparklyr/spark 和 fpgrowth,我正在努力实现相同的输出,即每个置信度和支持值的规则数。
从有限的示例和文档中,我相信我将我的交易数据传递给了 ml_fpgrowth 我的信心和支持价值。然后此函数生成一个模型,然后需要将其传递给 ml_association_rules 以生成规则。
# CONVERT TABLE TO TRANSACTION FORMAT
trans <- medical_tbl %>%
group_by(alt_claim_id) %>%
summarise(items = collect_list(proc_cd))
# SUPPORT AND CONFIDENCE VALUES
supportLevels <- c(0.1, 0.05, 0.01, 0.005)
confidenceLevels <- c(0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1)
# EMPTY LISTS
model_sup10 <- vector("list", length = 9)
model_sup5 <- vector("list", length = 9)
model_sup1 <- vector("list", length = 9)
model_sup0.5 <- vector("list", length = 9)
# FP GROWTH ALGORITHM WITH A SUPPORT LEVEL OF 10%
for (i in 1:length(confidenceLevels)) {
model_sup10[i] <- ml_fpgrowth(trans,
min_support = supportLevels[1],
min_confidence = confidenceLevels[i],
items_col = "items",
uid = random_string("fpgrowth_"))}
我尝试检查上述模型之一的一些规则 model_sup101 但我无法提取任何规则。从下面的代码中我得到以下错误
rules <- ml_association_rules(model_sup10[[1]][1])
Error: $ operator is invalid for atomic vectors
任何人都可以帮助甚至解释 fpgrowth 是否可以做到这一点,以及实现我绘制每个 support/confidence 配对生成的规则数量的目标的最佳方法是什么?
在与 dplyr 和 sparklyr 进行了一些头脑碰撞之后,我设法将以下内容拼凑在一起。如果有人对我如何改进此代码有任何反馈,请随时发表评论。
# SUPPORT AND CONFIDENCE VALUES
supportLevels <- c(0.1, 0.05, 0.01, 0.005)
confidenceLevels <- c(0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1)
# CREATE FUNCTION TO LOOP THROUGH SUPPORT AND CONFIDENCE LEVELS AND RETURN NUMBER OF RULES GENERATED
testModelFunction <- function(i, j) {
ml_fpgrowth(trans,
min_support = as.numeric(i),
min_confidence = as.numeric(j),
items_col = "items",
uid = random_string("fpgrowth_")) %>%
ml_association_rules() %>%
count(name = "rules") %>%
pull()
}
# CREATE A LIST TO STORE THE OUTPUT FROM testModelFunction
l = list()
n = 1
for (i in supportLevels) {
for (j in confidenceLevels) {
message(paste(i, j))
tryCatch({
l[[n]] <- list(supportLevels = i, confidenceLevels = j, n_rules = testModelFunction(i, j))
},
error = function(e) {
l[[n]] <- list(supportLevels = i, confidenceLevels = j, error = e)
})
n <- n + 1
}
}
rbindlist(l, fill = T)