【问题标题】:Association rules between many continuous variables许多连续变量之间的关联规则
【发布时间】:2018-04-21 01:27:03
【问题描述】:

我有一个大型数据集,我正在尝试挖掘变量之间的关联规则。

我的问题是我有 160 个变量,我必须在其中寻找关联规则,而且我有超过 1800 个项目集。

此外,我的变量是连续变量。在挖掘关联规则时,我通常使用先验算法,但众所周知,该算法需要使用分类变量。

有人对我在这种情况下可以使用哪种算法有任何建议吗?

我的数据集的一个受限示例如下:

ID_Order   Model     ordered quantity
A.1        typeX     20
A.1        typeZ     10
A.1        typeY     5
B.2        typeX     16
B.2        typeW     12
C.3        typeZ     1
D.4        typeX     8
D.4        typeG     4
...

我的目标是挖掘不同产品之间的关联规则和相关性,可能使用 R 中的神经网络算法。有人对如何解决这个问题有任何建议吗?

提前致谢

【问题讨论】:

标签: r algorithm machine-learning associations arules


【解决方案1】:

您可以像这样从数据集创建交易:

library(dplyr)

此函数用于获取每个ID_Order的交易

concat <- function(x) {
  return(list(as.character(x)))

}

dfID_Order 分组并连接。 pull() 在列表中返回串联的 Models。

a_list <- df %>% 
  group_by(ID_Order) %>% 
  summarise(concat = concat(Model)) %>%
  pull(concat)

设置名称为ID_Order

names(a_list) <- unique(df$ID_Order)

然后就可以使用包arules

获取transactions类的对象:

transactions <- as(a_list, "transactions")

提取规则。您可以在 suppconf 分别设置最低支持和最低置信度。

rules <- apriori(transactions, 
                 parameter = list(supp = 0.1, conf = 0.5, target = "rules"))

要检查规则,请使用:

inspect(rules)

这就是你得到的:

     lhs              rhs     support confidence lift      count
[1]  {}            => {typeZ} 0.50    0.50       1.0000000 2    
[2]  {}            => {typeX} 0.75    0.75       1.0000000 3    
[3]  {typeW}       => {typeX} 0.25    1.00       1.3333333 1    
[4]  {typeG}       => {typeX} 0.25    1.00       1.3333333 1    
[5]  {typeY}       => {typeZ} 0.25    1.00       2.0000000 1    
[6]  {typeZ}       => {typeY} 0.25    0.50       2.0000000 1    
[7]  {typeY}       => {typeX} 0.25    1.00       1.3333333 1    
[8]  {typeZ}       => {typeX} 0.25    0.50       0.6666667 1    
[9]  {typeY,typeZ} => {typeX} 0.25    1.00       1.3333333 1    
[10] {typeX,typeY} => {typeZ} 0.25    1.00       2.0000000 1    
[11] {typeX,typeZ} => {typeY} 0.25    1.00       4.0000000 1

【讨论】:

  • 嗨@clemens,感谢您的回答非常详细,但是当我尝试运行脚本时出现错误。当我运行这部分代码a_list &lt;- df %&gt;% group_by(ID_Order) %&gt;% summarise(concat = concat(Model)) %&gt;% pull(concat)我得到这个错误:Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘pull’ for signature ‘"tbl_df"’我看到这是由于包之间的冲突,可能是git2r和dplyr,但我无法解决问题,你是怎么得到它的?谢谢
  • 我无法重现您的错误,但您可以尝试明确使用dplyr::pull(concat) 而不是pull(concat)。我正在使用 R 3.4.1 和 dplyr 0.7.4
  • 谢谢!很有帮助!
【解决方案2】:

来自? transactions的示例部分:

## example 4: creating transactions from a data.frame with 
## transaction IDs and items (by converting it into a list of transactions first) 
a_df3 <- data.frame(
  TID = c(1,1,2,2,2,3), 
  item=c("a","b","a","b","c","b")
  )
a_df3
trans4 <- as(split(a_df3[,"item"], a_df3[,"TID"]), "transactions")
trans4
inspect(trans4)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 2017-11-25
    • 2019-02-04
    • 2013-08-31
    • 2021-06-09
    相关资源
    最近更新 更多