特定列的R先验规则

R apriori rules of specific columns

我有以下数据集:

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} 或任何其他规则不感兴趣我.

我该怎么做?

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

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

的项集的频率

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

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

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

在这里,Apriori 不会比仅枚举所有 from -> totime_period -> tofrom + time_period -> to 组合并分别计算所需质量更有效。

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

试试下面的方法。它对我有用。

rules = apriori(select(data,c("from","time_period","to")),参数=列表(支持=0.01,置信度=0.5));

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