特定列的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 -> to
、time_period -> to
和 from + time_period -> to
组合并分别计算所需质量更有效。
我遇到了同样的情况,我只需要找到两个属性的关系,而数据框总共有 11 个属性。使用 apriori 生成大约 7000 条规则。
试试下面的方法。它对我有用。
rules = apriori(select(data,c("from","time_period","to")),参数=列表(支持=0.01,置信度=0.5));
先验函数的输入只是感兴趣的列。我在 dplyr 包中使用 select 提取列。
我有以下数据集:
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 -> to
、time_period -> to
和 from + time_period -> to
组合并分别计算所需质量更有效。
我遇到了同样的情况,我只需要找到两个属性的关系,而数据框总共有 11 个属性。使用 apriori 生成大约 7000 条规则。
试试下面的方法。它对我有用。
rules = apriori(select(data,c("from","time_period","to")),参数=列表(支持=0.01,置信度=0.5));
先验函数的输入只是感兴趣的列。我在 dplyr 包中使用 select 提取列。