【问题标题】:Choosing support and confidence values with ml_fpgrowth in Sparklyr在 Sparklyr 中使用 ml_fpgrowth 选择支持和置信度值
【发布时间】:2020-01-01 11:45:11
【问题描述】:

我试图从Kaggle script 中获得一些灵感,作者使用 arules 在 R 中执行市场篮子分析。我对他们传递置信度和支持值向量的部分特别感兴趣,然后绘制生成的规则数量,以帮助选择要使用的最佳值,而不是生成大量规则。

我希望尝试相同的过程,但我在 R 中使用带有 fpgrowth 的 sparklyr/spark 并且我正在努力实现相同的输出,即每个置信度和支持值的规则计数。

从有限的示例和文档中,我相信我以我的信心和支持值将我的交易数据传递给 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 是否可行,以及实现我绘制为每个支持/信心配对生成的规则数量的目标的最佳前进方式是什么?

【问题讨论】:

    标签: r sparklyr fpgrowth


    【解决方案1】:

    在与 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)
    

    【讨论】:

      猜你喜欢
      • 2017-05-23
      • 2020-11-21
      • 2019-03-16
      • 2011-01-01
      • 2018-12-21
      • 2013-02-22
      • 1970-01-01
      • 2018-09-18
      • 2022-09-29
      相关资源
      最近更新 更多