R 规则:如何从 lhs/rhs 中删除某些项集
R Arules: how to remove certain itemsets from lhs/rhs
我已经在 R 中加载了一个文件作为事务:
path = "my_file.csv"
t = read.transactions(path,format="single", sep=';',cols=c("ID","Products"))
#get the rules:
rules = apriori(t,parameter = list(supp=0.01, conf=0.33, minlen=2, maxlen=4))
#sort by confidence:
rules = sort(rules, by="confidence", decreasing=TRUE)
#inspect the first 10 rules:
inspect(rules[1:10])
哪个输出是:
lhs rhs support confidence lift
[1] {e,b} => {a} 0.01 0.97 some_value
[2] {a} => {f} 0.04 0.92 some_value
[3] {t,f} => {a} 0.12 0.91 some_value
[4] {b,j} => {a} 0.09 0.82 some_value
[5] {e} => {a} 0.25 0.77 some_value
[6] {g,h} => {a} 0.05 0.56 some_value
[7] {p} => {a} 0.31 0.54 some_value
[8] {q,n} => {h} 0.18 0.49 some_value
[9] {s} => {a} 0.07 0.46 some_value
[10] {s,d} => {a} 0.20 0.42 some_value
现在我的问题是项目集 {a} 太频繁了,我想以项目 {a} 或我不想考虑的任何其他项目的方式设置先验规则生成器,不会出现在生成的规则中。
我知道一个简单的方法是从上传的交易文件中删除项目 {a};无论如何,即使简单,它也不聪明和优雅,而且也很长,因为我正在处理数百个不同的交易文件。
在网上搜索我发现了这种指定lhs和rhs的设置方式:
rules = apriori(t,parameter = list(supp=0.01, conf=0.33, minlen=2, maxlen=4), appearance=list(default="lhs", rhs="b"))
检查的输出现在是:
lhs rhs support confidence lift
[1] {a,b} => {b} other_value other_value other_value
[2] {a} => {b} other_value other_value other_value
[3] {a,f} => {b} other_value other_value other_value
[4] {b,j} => {b} other_value other_value other_value
[5] {a} => {b} other_value other_value other_value
[6] {a,h} => {b} other_value other_value other_value
[7] {a} => {b} other_value other_value other_value
[8] {q,a} => {b} other_value other_value other_value
[9] {a} => {b} other_value other_value other_value
[10] {a,d} => {b} other_value other_value other_value
因此可以告诉 Apriori 我们想要 rhs(或 lhs)中的哪个项目;但是不可能告诉 Apriori 我们不想要哪个项目。或者不可能以这种方式告诉我已经尝试过(我不想要{a}):
rules = apriori(t,parameter = list(supp=0.01, conf=0.33, minlen=2, maxlen=4), appearance=list(default="lhs", rhs!="a"))
这会出错。
有什么建议吗?谢谢
看看? APappearance
第一个示例展示了如何从项目集中排除单个项目。挖矿规则也可以这样做:
data("Adult")
## find only frequent itemsets which do not contain small or large income
is <- apriori(Adult, parameter = list(support= 0.1, target="frequent"),
appearance = list(none = c("income=small", "income=large"),
default="both"))
我已经在 R 中加载了一个文件作为事务:
path = "my_file.csv"
t = read.transactions(path,format="single", sep=';',cols=c("ID","Products"))
#get the rules:
rules = apriori(t,parameter = list(supp=0.01, conf=0.33, minlen=2, maxlen=4))
#sort by confidence:
rules = sort(rules, by="confidence", decreasing=TRUE)
#inspect the first 10 rules:
inspect(rules[1:10])
哪个输出是:
lhs rhs support confidence lift
[1] {e,b} => {a} 0.01 0.97 some_value
[2] {a} => {f} 0.04 0.92 some_value
[3] {t,f} => {a} 0.12 0.91 some_value
[4] {b,j} => {a} 0.09 0.82 some_value
[5] {e} => {a} 0.25 0.77 some_value
[6] {g,h} => {a} 0.05 0.56 some_value
[7] {p} => {a} 0.31 0.54 some_value
[8] {q,n} => {h} 0.18 0.49 some_value
[9] {s} => {a} 0.07 0.46 some_value
[10] {s,d} => {a} 0.20 0.42 some_value
现在我的问题是项目集 {a} 太频繁了,我想以项目 {a} 或我不想考虑的任何其他项目的方式设置先验规则生成器,不会出现在生成的规则中。 我知道一个简单的方法是从上传的交易文件中删除项目 {a};无论如何,即使简单,它也不聪明和优雅,而且也很长,因为我正在处理数百个不同的交易文件。
在网上搜索我发现了这种指定lhs和rhs的设置方式:
rules = apriori(t,parameter = list(supp=0.01, conf=0.33, minlen=2, maxlen=4), appearance=list(default="lhs", rhs="b"))
检查的输出现在是:
lhs rhs support confidence lift
[1] {a,b} => {b} other_value other_value other_value
[2] {a} => {b} other_value other_value other_value
[3] {a,f} => {b} other_value other_value other_value
[4] {b,j} => {b} other_value other_value other_value
[5] {a} => {b} other_value other_value other_value
[6] {a,h} => {b} other_value other_value other_value
[7] {a} => {b} other_value other_value other_value
[8] {q,a} => {b} other_value other_value other_value
[9] {a} => {b} other_value other_value other_value
[10] {a,d} => {b} other_value other_value other_value
因此可以告诉 Apriori 我们想要 rhs(或 lhs)中的哪个项目;但是不可能告诉 Apriori 我们不想要哪个项目。或者不可能以这种方式告诉我已经尝试过(我不想要{a}):
rules = apriori(t,parameter = list(supp=0.01, conf=0.33, minlen=2, maxlen=4), appearance=list(default="lhs", rhs!="a"))
这会出错。
有什么建议吗?谢谢
看看? APappearance
第一个示例展示了如何从项目集中排除单个项目。挖矿规则也可以这样做:
data("Adult")
## find only frequent itemsets which do not contain small or large income
is <- apriori(Adult, parameter = list(support= 0.1, target="frequent"),
appearance = list(none = c("income=small", "income=large"),
default="both"))