R apriori特定列的规则

时间:2016-04-17 07:18:42

标签: r data-mining rules apriori

我有以下数据集:

from | to | time_period
house | shop | evening
residential building | transportation | night
....
food | public building | morning

我使用Apriori算法:

rules = apriori(data, parameter=list(support=0.01, confidence=0.5));
inspect(head(sort(rules, by="lift"),10));

它产生了以下输出:    lhs rhs支持信心提升

1  {from=residential building,                                                              
    to=food}                   => {time_period=night}         0.01398601  0.5882353 2.285806
2  {from=entertainment}        => {time_period=evening}       0.02517483  0.5294118 2.188031
3  {to=entertainment}          => {time_period=evening}       0.01678322  0.5217391 2.156321
4  {to=food,                                                                                
    time_period=night}         => {from=residential building} 0.01398601  1.0000000 1.735437
5  {from=food,                                                                              
    to=food}                   => {time_period=daytime}       0.01538462  0.8461538 1.689944
6  {from=public building,                                                                   
    to=food}                   => {time_period=daytime}       0.01958042  0.8235294 1.644758
7  {to=residential building,                                                                
    time_period=night}         => {from=residential building} 0.19580420  0.9459459 1.641629
8  {time_period=night}         => {from=residential building} 0.24195804  0.9402174 1.631688
9  {from=education,                                                                         
    to=residential building}   => {time_period=daytime}       0.01538462  0.7857143 1.569234
10 {from=food,                                                                              
    to=residential building}   => {time_period=daytime}       0.02237762  0.7619048 1.521681

它生成各种规则,但这不是我想要的。我想只有

的规则
{from, time_period} => {to}

例如,{from=food, time_period=daytime} => {to=residential building}.我对{from, time_period} => {to}以外的任何其他规则不感兴趣,这意味着{from, to} => {time_period}{time_period} => {from}等规则或其他规则对我不感兴趣。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

只需过滤结果,并只保留您感兴趣的规则。

Apriori昂贵的部分是找到频繁的项目集,你不能在那里节省太多。您还需要没有to的项目集的频率。

之后生成实际规则很便宜;所以你也可以生成所有这些,然后只保留右边to的那些。

但是,鉴于您只有三列,一个是您想要的结果,您根本不需要关联规则挖掘

Apriori,当你有规则时这些是有益的,因为它们可以避免冗余计算。 Apriori最早开始变得有趣。

在这里,Apriori的效率不仅仅是枚举所有from -> totime_period -> tofrom + time_period -> to组合,并且每个组合都能计算出所需的质量。

答案 1 :(得分:0)

我遇到了同样的情况,我只需要查找两个属性之间的关系,而数据框总共有11个属性。使用apriori可以生成大约7000条规则。

尝试以下类似方法。它对我有用。

rules = apriori( select(data,c(“ from”,“ time_period”,“ to”)),parameter = list(support = 0.01,confidence = 0.5));

先验函数的输入仅是感兴趣的列。我使用 dplyr 包中的 select 提取了列。