r语言关联规则为啥只产生了1条规则

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了r语言关联规则为啥只产生了1条规则相关的知识,希望对你有一定的参考价值。

参考技术A 写的很清楚啊,列的类型不对,不是逻辑值或是factor(因子、因素)。 你的那些列不会是数值型的吧,不适用apriori的。

R:Apriori 算法没有找到任何关联规则

【中文标题】R:Apriori 算法没有找到任何关联规则【英文标题】:R: Apriori Algorithm does not find any association rules 【发布时间】:2020-08-13 08:57:32 【问题描述】:

我生成了一个包含两个不同列的数据集:一个与客户关联的 ID 列和与他/她的活跃产品关联的另一列:

head(df_itemList)

      ID      PRD_LISTE
1     1       A,B,C
3     2       C,D
4     3       A,B
5     4       A,B,C,D,E
7     5       B,A,D
8     6       A,C,D

我只选择了拥有不止一种产品的客户。我总共有 589.454 行,有 16 种不同的产品。

接下来,我将 data.frame 写入 csv 文件,如下所示:

df_itemList$ID <- NULL
colnames(df_itemList) <- c("itemList")
write.csv(df_itemList, "Basket_List_13-08-2020.csv", row.names = TRUE)

然后,我将 csv 文件转换为篮子格式,以便应用 arules-package 中实现的先验算法。

library(arules)  
txn <- read.transactions(file="Basket_List_13-08-2020.csv", 
                         rm.duplicates= TRUE, format="basket",sep=",",cols=1)
txn@itemInfo$labels <- gsub("\"","",txn@itemInfo$labels)

summary-function 产生以下输出:

summary(txn)
transactions as itemMatrix in sparse format with
 589455 rows (elements/itemsets/transactions) and
 1737 columns (items) and a density of 0.0005757052 

most frequent items:
                   A,C                    A,B                     C,F                     C,D
                  57894                   32150                   31367                   29434 
                  A,B,C                 (Other) 
                  29035                  409575 

element (itemset/transaction) length distribution:
sizes
     1 
589455 

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      1       1       1       1       1       1 

includes extended item information - examples:
                                                                             labels
1 G,H,I,A,B,C,D,F,J
2 G,H,I,A,B,C,F
3 G,H,I,A,B,K,D

includes extended transaction information - examples:
  transactionID
1              
2             1
3             3

现在,我尝试运行先验算法:

basket_rules <- apriori(txn, parameter = list(sup = 1e-15, 
                                              conf = 1e-15, minlen = 2, target="rules"))

这是输出:

   Apriori

Parameter specification:
 confidence minval smax arem  aval originalSupport maxtime support minlen maxlen target  ext
       0.01    0.1    1 none FALSE            TRUE       5   1e-15      2     10  rules TRUE

Algorithmic control:
 filter tree heap memopt load sort verbose
    0.1 TRUE TRUE  FALSE TRUE    2    TRUE

Absolute minimum support count: 0 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[1737 item(s), 589455 transaction(s)] done [0.20s].
sorting and recoding items ... [1737 item(s)] done [0.00s].
creating transaction tree ... done [0.16s].
checking subsets of size 1 done [0.00s].
writing ... [0 rule(s)] done [0.00s].
creating S4 object  ... done [0.04s].

即使支持度和信心低得离谱,也不会生成任何规则...

summary(basket_rules)
set of 0 rules

这真的是因为我的数据集吗?还是我的代码有错误?

【问题讨论】:

【参考方案1】:

您的摘要显示数据未正确读入:

most frequent items:
                   A,C                    A,B                     C,F                     C,D
                  57894                   32150                   31367                   29434 
                  A,B,C                 (Other) 
                  29035                  409575 

看起来“A,C”被读取为一个项目,但它应该是两个项目“A”和“C”。分隔符不起作用。我认为这可能是因为文件中的引号。确保Basket_List_13-08-2020.csv 看起来正确。此外,您需要在阅读交易时使用skip = 1 跳过第一行(标题)。

【讨论】:

【参考方案2】:

@Michael 我现在非常肯定我正在阅读的 .csv 文件有问题。由于其他人遇到过类似的问题,我的猜测是这是错误的常见原因。您能否描述一下 .csv 文件在读入时的样子?

输入data &lt;- read.csv("file.csv", header = TRUE, sep = ",") 时,我得到以下data.frame:

X     Prd
1     A
2     A,B
3     B,A
4     B
5     C

如果客户 X 有多个产品 - 这些产品都写在一个列中,这是否正确?还是应该分栏写?

此外,在编写txn &lt;- read.transactions(file="Versicherungen2_ItemList_Short.csv", rm.duplicates= TRUE, format="basket",sep=",",cols=1, skip=1)summary(txn) 时,我看到以下问题:

most frequent items:
A             B            C           A,B            B,A
1256          1235         456         235            125

(数字随机选择)

所以 read.transaction 函数区分 A,B 和 B,A...所以我猜 .csv 文件有问题。

【讨论】:

我想就是这样。 .csv 需要在不同的列中包含不同的项目。

以上是关于r语言关联规则为啥只产生了1条规则的主要内容,如果未能解决你的问题,请参考以下文章

R语言Apriori算法关联规则挖掘:使用interestMeasure函数评估挖掘到的规则(包括覆盖率(coverage)和FishersExactTest)置信度最高的五条规则(top five

多维关联规则挖掘算法r语言能实现吗

R语言apriori算法进行关联规则挖掘(限制规则的左侧或者右侧的内容进行具体规则挖掘)使用subset函数进一步筛选生成的规则去除左侧规则中的冗余信息获取更独特的有新意的关联规则

R语言使用apriori算法进行关联规则挖掘实战:关联规则概念频繁项集支持度(support)置信度(confidence)提升度(lift)apriori算法

Apriori 算法 理论

R中的关联规则:如何根据项目选择规则?