十八、Apriori算法介绍

1. 关联规则挖掘

关联规则挖掘定义
大多数关联规则挖掘算法通常采用的一种策略是,将关联规则挖掘任务分解为如下两个主要的子任务:

  • 频繁项集产生(Frequent Itemset Generation)
    其目标是发现满足最小支持度阈值的所有项集,这些项集称作频繁项集。
  • 规则的产生(Rule Generation)
    其目标是从上一步发现的频繁项集中提取所有高置信度的规则,这些规则称作强规则。
  • 关联分析的目标
    1. 发现频繁项集;
    2. 由频繁项集产生强关联规则,这些规则必须大于或等于最小支持度和最小置信度。

2 Apriori算法介绍

  • Apriori算法的原理
    1. 通过限制候选产生发现频发项集
    2. 由频繁项集产生关联规则
  • Apriori算法的重要性质
    1. 性质1:频繁项集的子集必为频繁项集
      如果{B,C}是频繁的,那么{B},{C}也一定是频繁的
    2. 性质2:非频繁项集的超集一定是非频繁的。
      如果{A, B}是非频繁的,那么{A, B, C},{A, B, C, D}也一定是频繁的
  • 使用Apriori算法发现频繁项集
    1. 扫描数据集,得到所有出现过的数据,作为候选1项集
    2. 挖掘频繁k项集
      扫描计算候选k项集的支持度
      剪枝去掉候选k项集中支持度低于最小支持度α的数据集,得到频繁k项集。如果频繁k项集为空,则返回频繁k-1项集的集合作为算法结果,算法结束。
      基于频繁k项集,连接生成候选k+1项集
    3. 利用步骤2,迭代得到k=k+1项集结果
  • **由频繁项集产生关联规则 **
    产生关规则的过程如下:
    1. 对于每个频繁项集I,产生I的所有非空子集
    2. 对于I的每个非空子集s,如果support(l)/support(s) ≥min_conf,则输出规则“s⇒(l-s)”。其中,min_conf是最小置信度阈值。
      在这里插入图片描述
  • Apriori算法的简单实例
    1. Apriori算法举例——发现频发项集
      在这里插入图片描述
    2. Apriori算法举例——产生关联规则
      对于频繁项集{B, C, E}, 它的非空子集有{B}, {C}, {E}, {B, C}, {B,E}, {C,E}.以下是据此获得的关联规则及其置信度
      在这里插入图片描述

2.1 代码实现

# *-* coding:utf-8 *-*

import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules

data_test = [['A', 'C', 'D'], ['B', 'C', 'E'], ['A', 'B', 'C', 'E'], ['B', 'E']]

def create_data():
    dataset = [['Milk', 'Onion', 'Nutmeg', 'Kidney Beans', 'Eggs', 'Yogurt'],
               ['Dill', 'Onion', 'Nutmeg', 'Kidney Beans', 'Eggs', 'Yogurt'],
               ['Milk', 'Apple', 'Kidney Beans', 'Eggs'],
               ['Milk', 'Unicorn', 'Corn', 'Kidney Beans', 'Yogurt'],
               ['Corn', 'Onion', 'Onion', 'Kidney Beans', 'Ice cream', 'Eggs']]
    return dataset

def main():
    dataset = create_data()
    te = TransactionEncoder()
    te_ary = te.fit(dataset).transform(dataset)
    df = pd.DataFrame(te_ary, columns=te.columns_)
    frequent_itemsets = apriori(df, min_support=0.7, use_colnames=True)

    print(frequent_itemsets)  # 频繁项集

    rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.7)  # 关联规则
    print(rules)

if __name__ == '__main__':
    main()

n_threshold=0.7) # 关联规则
print(rules)

if __name__ == '__main__':
    main()
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值