打卡第六周
使用Apriori算法进行关联与分析
一、priori原理:1、一个项集是非频繁的,那么它的所有超集也是非频繁的
2、一个项集是频繁的,那么它的所有子集也是频繁的
二、支持度(support)-使用apriori发现频繁项集
对于数据集(包含M个项集)
1、求单个元素组成项集的集合C1(无重复)
2、利用minsupport(最小支持度或非频繁)过滤掉非频繁的单元素项集,得L1
3、单个元素两两组合成2元素的项集的集合C2
4、利用minsupport(最小支持度或非频繁)过滤掉非频繁的2元素项集,得L2
5、利用2元素项集两两组合得3元素项集C3
6、利用minsupport(最小支持度或非频繁)过滤掉非频繁的3元素项集,得L3
7、重复上述过程
求支持度(过滤支持度)低的项集就是这样一个过程:
C1->L1->C2->L2->C3->L3->…->Ck->Lk
注:apriori的应用:
一个项集是非频繁的,那么它的所有超集也是非频繁的
要获得项集合并(每种可能集合)的支持度就需要多次重复上述过程
三、置信度(confidence)-从频繁项集挖掘关联规则
如果某条规则并不能满足最小可信度要求,那么该规则的所有子集也不会满足最小可信度要求。
生成关联规则_function():
【遍历L:
计算规则右部只有单个元素的置信度(并过滤掉不满足最低置信度阈值的规则)
如果频繁项集中的元素个数有3个或更多
计算右部有2个、3个…len(freqSet)-1个元素的规则置信度】
注意:
1、遍历L时从至少有2个元素的项集开始,只有一个元素,就不存在关联规则了
2、对每一个频繁项集freqSet,求只有单个元素的项集组成的列表H1,用H1作为规则右部
3、频繁项集元素个数有3个或3个以上时,用len(H1[0]) + 1作为递归变量,累加右部元素个数
4、apriori的应用:先求右部为单个元素的规则置信度,将不满足最低置信度阈值的0, 1, 2–>3剔除,这样,左部为{0, 1, 2}的所有子集的规则也直接被剔除不再计算。
代码部分:
# !/usr/bin/env python
# -*- coding: utf-8 -*-
def loadData():
return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5, ], [2, 5]]
def createC1(dataSet):
"""
构建大小为1的所有候选项集的集合
:param dataSet:
:return:
"""
C1 = []
for transaction in dataSet:
for item in transaction:
if not [item] in C1:
C1.append([item])
C1.sort()
return list(map(frozenset, C1))
def scanD(D, Ck, minSupport)