分类关联规则示例:
读入数据
import Orange
data = Orange.data.Table('zoo')
data
转换
X, mapping = OneHot.encode(data, include_class=True)
itemsets = dict(frequent_itemsets(X, .4))#40%支持度
len(itemsets)
class_items = {item
for item, var, _ in OneHot.decode(mapping, data, mapping)
if var is data.domain.class_var}
sorted(class_items)
data.domain.class_var.values#查看分类
产生规则
rules = [(P, Q, supp, conf)
for P, Q, supp, conf in association_rules(itemsets, .8)
if len(Q) == 1 and Q & class_items]
len(rules)
得到如下规则:
[(frozenset({2, 7, 17, 19, 20}), frozenset({41}), 41, 1.0), (frozenset({2, 7, 17, 19}), frozenset({41}), 41, 1.0), (frozenset({2, 7, 17, 20}), frozenset({41}), 41, 1.0), (frozenset({2, 7, 19, 20}), frozenset({41}), 41, 1.0), (frozenset({2, 17, 19, 20}), frozenset({41}), 41, 0.8723404255319149), (frozenset({7, 17, 19, 20}), frozenset({41}), 41, 1.0), (frozenset({2, 7, 17}), frozenset({41}), 41, 1.0), (frozenset({2, 7, 19}), frozenset({41}), 41, 1.0), (frozenset({2, 17, 19}), frozenset({41}), 41, 0.8367346938775511), (frozenset({7, 17, 19}), frozenset({41}), 41, 1.0), (frozenset({2, 7, 20}), frozenset({41}), 41, 1.0), (frozenset({7, 17, 20}), frozenset({41}), 41, 1.0), (frozenset({7, 19, 20}), frozenset({41}), 41, 1.0), (frozenset({2, 7}), frozenset({41}), 41, 1.0), (frozenset({7, 17}), frozenset({41}), 41, 1.0), (frozenset({7, 19}), frozenset({41}), 41, 1.0), (frozenset({7, 20}), frozenset({41}), 41, 1.0), (frozenset({7}), frozenset({41}), 41, 1.0)]
查看详细内容
names = {item: '{}={}'.format(var.name, val)
for item, var, val in OneHot.decode(mapping, data, mapping)}
for ante, cons, supp, conf in rules[:5]:
print(', '.join(names[i] for i in ante), '-->',
names[next(iter(cons))],
'(supp: {}, conf: {})'.format(supp, conf))
结果如下:
feathers=0, milk=1, backbone=1, breathes=1, venomous=0 --> type=mammal (supp: 41, conf: 1.0) backbone=1, feathers=0, breathes=1, milk=1 --> type=mammal (supp: 41, conf: 1.0) backbone=1, feathers=0, venomous=0, milk=1 --> type=mammal (supp: 41, conf: 1.0) feathers=0, breathes=1, venomous=0, milk=1 --> type=mammal (supp: 41, conf: 1.0) backbone=1, feathers=0, breathes=1, venomous=0 --> type=mammal (supp: 41, conf: 0.8723404255319149)