from itertools import combinations
from copy import deepcopy # 导入数据,并剔除支持度计数小于min_support的1项集
def load_data(data):
I_dict = {}
for i in data:
for j in i:
I_dict[j] = I_dict.get(j, 0) + 1
F_dict = deepcopy(I_dict)
for k in I_dict.keys():
if F_dict.get(k) < min_support:
del F_dict[k]
return F_dict # 判断频繁项集是否大于min_support
def get_support_set(p_set):
item_supp_set = []
for item in p_set:
count = 0
for ds in data_set:
if item.issubset(ds):
count += 1
if count >= min_support:
item_supp_set.append([item, count])
return item_supp_set # 找出所有频繁项集
# 以二项集为初始集
def get_all_items(two_set, k=3):
all_frequent = []
flag = True
while flag:
mid_set = []
temp = []
t_ = [ks[0] for ks in two_set]
for kk in t_:
for tt in kk:
if tt not in temp:
temp.append(tt)
k_ = [set(t) for t in combinations(temp, k)]
for ff in k_:
count_k = 0
for d in t_:
if ff.issuperset(d):
count_k += 1
if count_k == k:
mid_set.append(ff)
frequent_mid_set = get_support_set(mid_set)
if mid_set:
k += 1
two_set = frequent_mid_set
all_frequent.extend(frequent_mid_set)
else:
flag = False
return all_frequent if __name__ == '__main__':
data = [['I1', 'I2', 'I5'],
['I2', 'I4'],
['I2', 'I3'],
['I1', 'I2', 'I4'],
['I1', 'I3'],
['I2', 'I3'],
['I1', 'I3'],
['I1', 'I2', 'I3', 'I5'],
['I1', 'I2', 'I3']]
data_set = [set(d) for d in data]
min_support = 1
one = [[{lk}, lv] for lk, lv in load_data(data).items()]
two = [set(t) for t in combinations(list(load_data(data).keys()), 2)]
two_f_set = get_support_set(two)
all_frequent_set = one + two_f_set + get_all_items(two_f_set)
for afs in all_frequent_set:
print(afs)

输出结果:

python实现简单关联规则Apriori算法的更多相关文章

  1. Python两步实现关联规则Apriori算法,参考机器学习实战,包括频繁项集的构建以及关联规则的挖掘

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  2. 一步步教你轻松学关联规则Apriori算法

    一步步教你轻松学关联规则Apriori算法 (白宁超 2018年10月22日09:51:05) 摘要:先验算法(Apriori Algorithm)是关联规则学习的经典算法之一,常常应用在商业等诸多领 ...

  3. 详细介绍关联规则Apriori算法及实现

    看了很多博客,关于关联规则的介绍想做一个详细的汇总:  一.概念                                                                     ...

  4. 关联规则&Apriori算法

    2017-12-02 14:27:18 一.术语 Items:项,简记I Transaction:所有项的一个非空子集,简记T Dataset:Transaction的一个集合,简记D 关联规则: 一 ...

  5. Python 实现简单的感知机算法

    感知机 随机生成一些点和一条原始直线,然后用感知机算法来生成一条直线进行分类,比较差别 导入包并设定画图尺寸 import numpy as np import matplotlib.pyplot a ...

  6. python 实现简单的KNN算法

    from numpy import * import operator def createDataSet(): group = array([[3,104],[2,100],[1,81],[101, ...

  7. python实现简单分类knn算法

    原理:计算当前点(无label,一般为测试集)和其他每个点(有label,一般为训练集)的距离并升序排序,选取k个最小距离的点,根据这k个点对应的类别进行投票,票数最多的类别的即为该点所对应的类别.代 ...

  8. 数据挖掘:关联规则的apriori算法在weka的源码分析

    相对于机器学习,关联规则的apriori算法更偏向于数据挖掘. 1) 测试文档中调用weka的关联规则apriori算法,如下 try { File file = new File("F:\ ...

  9. Apriori算法第一篇

    摘要: Apriori算法是产生k项高频项目组的一般手段.算法概要:首先产生k项高频项目集合Lk,自身链接形成k+1项的项目结合C(k+1),然后剪枝(去掉以前去掉的不满足支持度的高频),生成K=1项 ...

随机推荐

  1. Homemade Script Language: RED

    Made by C, named after RED(RecovEr from SaDness) 欢迎批评 :)

  2. Day5下

    T1 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> ...

  3. 三、gridView增删改查

    1. 新增或修改一条数据 1.1 添加 新增或修改按钮 <div style="width: 120px; float: right; padding-top: 3px"&g ...

  4. c#ArrayList 对象集合 按某字段(属性)排序

    主程序代码 newsCompare newsCompare = new ItemManage.newsCompare(); newsList.Sort(newsCompare); 自定义类代码(按照C ...

  5. python反爬之网页局部刷新1

    # ajax动态加载网页 # 怎样判断一个网页是不是动态加载的呢? # 查看网页源代码,如果源码中没有你要的数据,尝试访问下一页,当你点击下一页的时候,整个页面没有刷新, 只是局部刷新了,很大的可能是 ...

  6. Sublime Text Emmet插件 : 生成html,css 快捷键

    (输入下面简写,按Tab键可触发效果,或者 ctrl + e) html缩写 输入 !后 按下 ctrl + e : 结果 <!DOCTYPE html><html lang=&qu ...

  7. hibernate_HelloWorld

    环境准备 1.下载 hibernate 3.3.2: 2.下载 hibernate 3.4.0: 3.注意阅读 hibernate compatibility matrix(hibernate 网站, ...

  8. SaaS “可配置”和“多租户”架构的几种技术实现方式

    1.数据存储方式的选择 多租户(Multi-Tenant ),即多个租户共用一个实例,租户的数据既有隔离又有共享,说到底是要解决数据存储的问题. 常用的数据存储方式有三种. 方案一:独立数据库   一 ...

  9. Linux学习_按时间顺序解压多个文件,搜索文件中的内容

    ls的结果按时间数据先排序,再取末尾5个文件,再调用tar命令 ls -1 | sort -u | tail -5 |xargs -n1 tar xzvf 利用grep命令从文件中搜索. grep - ...

  10. Python元组、列表、字典、集合

    1. 元组 元组由不同元素组成,每个元素可以存储不同类型的数据,元组是有序的,元组创建后不能再做任何修改. 元组的创建: tuple = ('a','b','c','d') 如果创建的元组只有1个元素 ...