我有以下数据集:
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}
等规则或其他规则对我不感兴趣。
我该怎么做?
答案 0 :(得分:1)
只需过滤结果,并只保留您感兴趣的规则。
Apriori昂贵的部分是找到频繁的项目集,你不能在那里节省太多。您还需要没有to
的项目集的频率。
之后生成实际规则很便宜;所以你也可以生成所有这些,然后只保留右边to
的那些。
但是,鉴于您只有三列,一个是您想要的结果,您根本不需要关联规则挖掘。
Apriori,当你有长规则时这些是有益的,因为它们可以避免冗余计算。 Apriori最早开始变得有趣。
在这里,Apriori的效率不仅仅是枚举所有from -> to
,time_period -> to
和from + 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 提取了列。