数据挖掘关联算法代码实现
时间: 2023-09-18 07:16:00 浏览: 45
关联算法是数据挖掘中常用的算法之一,可以用于发现数据集中不同变量之间的关联关系。其中,Apriori算法是最经典的关联算法之一,下面是Python代码实现:
```python
# 导入相关库
import numpy as np
# 定义Apriori算法函数
def apriori(data, min_support=0.5):
"""
:param data: 输入的数据集
:param min_support: 最小支持度,默认为0.5
:return: 返回频繁项集列表和支持度字典
"""
# 获取数据集大小
num_items = len(data)
# 初始化空字典,用于存储每个项集的支持度
item_counts = {}
# 遍历每个数据项,统计每个项出现的次数
for transaction in data:
for item in transaction:
if item not in item_counts:
item_counts[item] = 0
item_counts[item] += 1
# 去除不满足最小支持度的项
item_counts = {key: val for key, val in item_counts.items() if (val/num_items) >= min_support}
# 获取频繁项集列表
frequent_items = list(item_counts.keys())
# 初始化空字典,用于存储每个项集的支持度
support_dict = {}
# 遍历每个项集,计算其支持度
for item in frequent_items:
support_dict[frozenset([item])] = item_counts[item]/num_items
# 对频繁项集按照长度排序
frequent_items = [frozenset([item]) for item in frequent_items]
k = 2
while len(frequent_items) > 0:
# 生成k项集
candidate_items = set([i.union(j) for i in frequent_items for j in frequent_items if len(i.union(j)) == k])
# 计算每个项集的支持度
item_counts = {}
for transaction in data:
for item in candidate_items:
if item.issubset(transaction):
if item not in item_counts:
item_counts[item] = 0
item_counts[item] += 1
# 去除不满足最小支持度的项
item_counts = {key: val for key, val in item_counts.items() if (val/num_items) >= min_support}
# 获取频繁项集列表
frequent_items = list(item_counts.keys())
# 更新支持度字典
for item in frequent_items:
support_dict[item] = item_counts[item]/num_items
# 更新k
k += 1
# 返回频繁项集列表和支持度字典
return frequent_items, support_dict
```
该函数输入一个数据集和最小支持度,返回频繁项集列表和支持度字典。其中,数据集是一个列表,每个元素又是一个列表,代表一个数据项。在函数中,首先计算每个项出现的次数,并去除不满足最小支持度的项。然后,按照长度排序,生成k项集,计算每个项集的支持度,去除不满足最小支持度的项,更新频繁项集列表和支持度字典,继续生成k+1项集,直到没有频繁项集为止。