关联规则apriori算法代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关联规则apriori算法代码
Apriori算法是数据挖掘中的一种常用算法,用于挖掘数据集中的频繁项集以及关联规则。
它是由Rakesh Agrawal和Ramakrishnan Srikant在其1994年发表的论文“Fast Algorithms for Mining Association Rules”中提出的。
Apriori Algorithm的思想非常简单,基本思路是:如果一个项集是频繁项集,那么其所有的子集一定都是频繁项集。
关联规则表示属性之间的依赖与关系,可以用来进行业务决策和推荐系统服务。
下面给出Apriori算法的Python实现代码。
1. 实现项集的生成
项集(itemset)是指一个或多个项(item)组成的集合。
一个项集中的项可以是物品、服务、事件、属性、特征等等。
在关联规则中,一个项集一般表示一种物品的集合,例如购买“牛奶”、“面包”、“可乐”等等。
为了实现Apriori算法,首先需要实现项集的生成。
项集的生成就是将大小为k-1的频繁项集合并成大小为k的候选项集。
具体实现如下:
```
def apriori_gen(freq_itemsets, k):
# 合并大小为k-1的频繁项集
candidates = []
n = len(freq_itemsets)
for i in range(n):
for j in range(i+1, n):
# 取出前k-2个项,检查是否相同,如果相同则合并
L1 = list(freq_itemsets[i])[:k-2]
L2 = list(freq_itemsets[j])[:k-2]
L1.sort()
L2.sort()
if L1 == L2:
candidates.append(freq_itemsets[i] | freq_itemsets[j])
return candidates
```
频繁项集(frequent itemset)是指支持度达到阈值的项集。
支持度指某个项集出现的次数与总项集数的比例,即$support(X)=\dfrac{count(X)}{N}$,其中$X$表示一个项集,$count(X)$表示该项集出现的次数,$N$表示总项集数。
Apriori算法的核心思想是:对于一个包含k个项的候选项集,先检查它是否是频繁的。
如果它是频繁的,那么它的所有子集也都是频繁的。
因此,可以从小的项集开始,不断生成更大的候选项集,并检查它们是否频繁。
Python中的实现如下:
```
def apriori(data, min_support):
# 构建事务集C1
C1 = []
for transaction in data:
for item in transaction:
if [item] not in C1:
C1.append([item])
C1.sort()
k += 1
给定一个频繁项集,可以通过它生成所有可能的关联规则。
在关联规则中,一个项集可以被看作是先验条件(antecedent),另一个项集可以被看作是后验条件(consequent)。
例如,频繁项集{A, B, C}可以生成如下的关联规则:
- A → B, C
- B → A, C
- C → A, B
- A, B → C
- A, C → B
- B, C → A
根据支持度和置信度,可以过滤掉一些不满足要求的规则。
支持度表示包含某个项集
的事务数与总事务数之比,置信度表示包含某个项集的事务中同时包含另一个项集的概率。
具体实现如下:
return rules
# 输出关联规则
print(subsets[i], '->', freq_set-subsets[i], ' [support: ', round(support, 4), ', confidence: ', round(confidence, 4), ']')
通过以上代码实现,可以实现Apriori算法生成频繁项集并生成关联规则的功能。
需
要传入的数据为一个包含若干个列表的列表,每个列表代表一个事务。
示例数据如下:
```
transactions = [
['牛奶', '啤酒', '尿布'],
['牛奶', '尿布', '洋葱'],
['牛奶', '啤酒', '尿布', '洋葱'],
['啤酒', '洋葱']
]
```
可以调用`apriori(transactions, 0.5)`函数生成频繁项集,其中`min_support`为支持度阈值。
可以调用`generate_rules(freq_itemsets, min_support, min_confidence)`
函数生成关联规则,其中`min_confidence`为置信度阈值。