Aprior算法–菜单支持度与置信度
刚开始学习数据挖掘,有很多不明白的地方,还希望各位大佬指点迷津。最近我们学到了挖掘建模里的关联规则,老师布置了一个题目用Apriori算法计算菜单的支持度与置信度,从而推出各个菜品之间的关联规则。
Apriori算法实现过程
菜单的简洁数据如下:
过程一:找最大k项频繁集
1)算法简单的扫描所有的事务,事务中的每一项都是候选1项集的集合C1的成员,计算每一项的支持度。
2)对C1中各项集的支持度与预先设定的最小支持度阈值进行比较(这里我设置的是support=0.2),保留大于或者等于该阈值的项,得1项频繁集L1.
3)扫描所有事务,由L1连接得到候选集C2,然后计算两项之间的支持度,根据最小支持度选出频繁项集L2。
4)扫描所有事务,由L1和L2连接得到候选集C3,计算三项之间的支持度,根据最小支持度选出频繁项集L3。
5)由L3与L1连接得候选集C4为空集,则可以得到最大3项频繁集是{a,b,c},{a,c,e}。
由此过程得到的L1和L2都是频繁集,L3是最大频繁集。
A.C1候选项集每个事务计算后的支持度
项集 | support |
---|---|
{a} | 0.7 |
{b} | 0.8 |
{c} | 0.7 |
{d} | 0.2 |
{e} | 0.3 |
B.根据最小支持度选出的1项频繁项集L1
项集 | support |
---|---|
{a} | 0.7 |
{b} | 0.8 |
{c} | 0.7 |
{d} | 0.2 |
{e} | 0.3 |
C.由L1得到的候选项集C2并计算支持度
项集 | support |
---|---|
{a,b} | 0.5 |
{a,c} | 0.5 |
{a,d} | 0.1 |
{a,e} | 0.3 |
{b,c} | 0.5 |
{b,d} | 0.2 |
{b,e} | 0.1 |
{c,d} | 0.1 |
{c,e} | 0.3 |
{d,e} | 0 |
根据最小支持度选出的频繁项集L2
项集 | support |
---|---|
{a,b} | 0.5 |
{a,c} | 0.5 |
{a,e} | 0.3 |
{b,c} | 0.5 |
{b,d} | 0.2 |
{c,e} | 0.3 |
由L1与L2连接得到候选集C3
项集 | support |
---|---|
{a,b,c} | 0.3 |
{a,c,e} | 0.3 |
根据最小支持度得出的频繁项集L3
项集 | support |
---|---|
{a,b,c} | 0.3 |
{a,c,e} | 0.3 |
过程二:有频繁集产生关联规则
置信度的计算公式就是概率论里的知道A事件已发生的前提下求B发生的概率
下面是我在PyCharm里面运行的结果
Apriori.py
apriori.py是需要自己编的算法实现代码,然后通过包引入到同类文件下的实现代码cal_apriori.py
# -*- coding: utf-8 -*-
from __future__ import print_function
#引入pandas包
import pandas as pd
# 自定义连接函数,用于实现L_{k-1}到C_k的连接
def connect_string(x, ms):
#进行排序后的ms和x放到一个列表里赋值给x
x = list(map(lambda i: sorted(i.split(ms)), x))
#把x列表的第一个元素长度赋值给l
l = len(x