Apriori算法+python实现
文章目录
- 一、相关概念
- 二、Apriori算法
- 三、Apriori算法示例:
- 四、代码实现:
参考链接:apriori算法 python实现
一、相关概念
- 支持度:support(A =>B) = P(A ∪B)
- 置信度:confidence (A =>B) = P(B | A) = P(A ∪B) / P(A)
二、Apriori算法
Apriori算法是挖掘布尔关联规则频繁项集的算法。利用的是Apriori规则:频繁项集的所有非空子集也必须是频繁的。
- A∪B模式不可能比A更频繁的出现
- Apriori算法是反单调的,即一个集合如果不能通过测试,则该集合的所有超集也不能通过相同的测试。
- Apriori性质通过减少搜索空间,来提高频繁项集逐层产生的效率
三、Apriori算法示例:
四、代码实现:
import numpy as np'''Apriori算法实现
'''data_set = np.array([['l1', 'l2', 'l5'], ['l2', 'l4'], ['l2', 'l3'],['l1', 'l2', 'l4'], ['l1', 'l3'], ['l2', 'l3'],['l1', 'l3'],['l1', 'l2', 'l3', 'l5'], ['l1', 'l2', 'l3']
])'''根据数据集获取C1data_set -- 数据集
'''
def get_C1(data_set):C1 = set()for item in data_set:for l in item:C1.add(frozenset([l]))return C1'''根据数据集和C,筛选出符合最小支持度的频繁项集data_set -- 数据集C -- 候选集min_support -- 最小支持度
'''
def getLByC(data_set, C, min_support):L = {} #频繁项集和支持数for c in C:for data in data_set:if c.issubset(data):if c not in L:L[c] = 1else:L[c] += 1errorKeys=[]for key in L:support = L[key] / float(len(data_set))if support < min_support:#未达到最小支持数errorKeys.append(key)else:L[key] = supportfor key in errorKeys:L.pop(key)return L'''根据频繁(k-1)项集自身连接产生候选K项集Ck并剪去不符合条件的候选L -- 频繁K-1项集
'''
def getCByL(L, k):len_L = len(L) #获取L的频繁项集数量L_keys = list(L.keys())#获取L的键值C = set()for i in range(len_L):for j in range(1,len_L):l1 = list(L_keys[i])l1.sort()l2 = list(L_keys[j])l2.sort()if(l1[0:k-2] == l2[0:k-2]):C_item = frozenset(l1).union(frozenset(l2)) #取并集flag = True#判断C_item的子集是否在L_keys中for item in C_item:subC = C_item-frozenset([item])#获取C_item的子集if subC not in L_keys:#不在flag = Falseif flag == True:C.add(C_item)return C'''根据数据集获取频繁项集data_set -- 数据集k -- 挖掘频繁项集次数min_support -- 最小支持度
'''
def get_L(data_set, k, min_support):#C1较为特殊,先求C1 = get_C1(data_set)L1 = getLByC(data_set, C1, min_support)support_data = {}L = []L.append(L1)tempL = L1for i in range(2, k+1):Ci = getCByL(tempL, i)tempL = getLByC(data_set,Ci,min_support)L.append(tempL)for l in L:for key in l:support_data[key] = l[key]return L,support_data'''获取关联规则
'''
def get_rule(L, support_data, min_support, min_conf):big_rules = []sub_sets= []for i in range(0, len(L)):for fset in L[i]:for sub_set in sub_sets:if sub_set.issubset(fset):conf = support_data[fset] / support_data[fset - sub_set]big_rule = (fset - sub_set, sub_set, conf)if conf >= min_conf and big_rule not in big_rules:big_rules.append(big_rule)sub_sets.append(fset)return big_rulesif __name__ == "__main__":min_support = 0.2 #最小支持度min_conf = 0.7 #最小置信度L,support_data = get_L(data_set, 3, min_support)#获取所有的频繁项集big_rule = get_rule(L, support_data, min_support, min_conf) #获取强关联规则print('===================所有的频繁项集如下===========================\n')for l in L:for l_item in l:print(l_item, end=' ')print('支持度为:%f'%l[l_item])print('===================================================') for rule in big_rule:print(rule[0],'==>',rule[1],'\t\tconf = ',rule[2])
频繁项集和关联规则结果为:
===================所有的频繁项集如下===========================frozenset({'l1'}) 支持度为:0.666667
frozenset({'l4'}) 支持度为:0.222222
frozenset({'l5'}) 支持度为:0.222222
frozenset({'l2'}) 支持度为:0.777778
frozenset({'l3'}) 支持度为:0.666667
===================================================
frozenset({'l2', 'l1'}) 支持度为:0.444444
frozenset({'l1', 'l3'}) 支持度为:0.444444
frozenset({'l5', 'l2'}) 支持度为:0.222222
frozenset({'l2', 'l4'}) 支持度为:0.222222
frozenset({'l5', 'l1'}) 支持度为:0.222222
frozenset({'l2', 'l3'}) 支持度为:0.444444
===================================================
frozenset({'l2', 'l1', 'l3'}) 支持度为:0.222222
frozenset({'l2', 'l5', 'l1'}) 支持度为:0.222222
===================================================
frozenset({'l5'}) ==> frozenset({'l2'}) conf = 1.0
frozenset({'l4'}) ==> frozenset({'l2'}) conf = 1.0
frozenset({'l5'}) ==> frozenset({'l1'}) conf = 1.0
frozenset({'l5', 'l2'}) ==> frozenset({'l1'}) conf = 1.0
frozenset({'l5', 'l1'}) ==> frozenset({'l2'}) conf = 1.0
frozenset({'l5'}) ==> frozenset({'l2', 'l1'}) conf = 1.0
Apriori算法+python实现相关推荐
- Apriori算法python实现(数据挖掘学习笔记)
目录 1.算法伪代码 2.算法代码 3.测试数据 4.结果 1.算法伪代码 输入:事务数据库D:最小支持度阈值. 输出:D中的频繁项集L. 方法: L1 = find_frequent_1_item ...
- Apriori算法python实现(可调节支持度与置信度)
Apriori算法python实现(可调节支持度与置信度) 前言 完整代码 前言 看到网上的Apriori算法代码大多都没有添加置信度进行筛选,因此我自己写了一个 完整代码 import iterto ...
- 大白话解析Apriori算法python实现(含源代码详解)
大白话解析Apriori算法python实现(含源代码详解) 一.专业名词解释 二.算法思路 三.python代码实现 四.Aprioir的优点.缺点及改进方法 本文为博主原创文章,转载请注明出处,并 ...
- apriori算法python实现
apriori算法python实现 源于一次课程实验,下面的代码只是负责给出频繁模式,没有进行关联规则提取 # -*- coding: utf-8 -*- """@Tim ...
- apriori算法 python实现
导读: 随着大数据概念的火热,啤酒与尿布的故事广为人知.我们如何发现买啤酒的人往往也会买尿布这一规律?数据挖掘中的用于挖掘频繁项集和关联规则的Apriori算法可以告诉我们.本文首先对Apriori算 ...
- 【机器学习】关联规则挖掘算法 + 三大案例实战 + Apriori算法 + Python代码实现
文章目录 一.关联规则概述 1.1 关联规则引入 1.2 关联规则相关概念介绍 1.2.1 样本.事务.项集.规则 1.2.2 支持度.置信度 1.2.3 提升度 1.2.4 所有指标的公式 二.Py ...
- 关联规则Apriori算法 python简单实现
1.基础知识 本文章主要参看博客 :关联规则Apriori算法 这里只是本人对该博主的代码做了一个简单的修改,能成功运行. 啦啦啦,我只是一个小小的知识搬运工! 2.代码 #加载数据集 import ...
- apriori算法python代码_通俗易懂Apriori算法及Python实现
本篇分为三个部分: 一.算法背景 啤酒与尿布故事: 某超市为增加销售量,提取出了他们超市所有的销售记录进行分析.在对这些小票数据进行分析时,发现男性顾客在购买婴儿尿片时,通常会顺便搭配带打啤酒来犒劳自 ...
- Apriori算法介绍(Python实现)
导读: 随着大数据概念的火热,啤酒与尿布的故事广为人知.我们如何发现买啤酒的人往往也会买尿布这一规律?数据挖掘中的用于挖掘频繁项集和关联规则的Apriori算法可以告诉我们.本文首先对Apriori算 ...
最新文章
- Fragment里面嵌套Fragment注意事项
- 有感:仅在面试时攻克 MySQL 还不够
- mysql 命令行导入sql脚本
- python读取excle表格数据,将数据编辑到图像上工程
- 数据库即时搜索_加速数据库恢复; 即时回滚和数据库恢复
- php strictbool,PHP 7 Bool类型提示不起作用
- matlab 入门 mobi,MATLAB基础教程 pdf epub mobi txt 下载
- linux steam安装路径,Ubuntu Kylin 18.04 steam安装及解决方法
- Python 商务统计学 lesson 01
- 一口气通过一系列阿里云证书ACA/ACP/ACE认证心得
- uniapp实现设备对接wifi功能
- ubuntu进去安全模式_ubuntu 14.04全攻略
- 电脑Tab键有什么功能?分享Tab键的6个妙用
- Excel中列和行之间的互换技巧。
- postgis常用的函数
- matlab神经网络训练显示秩亏,MATLAB在测量数据处理中的应用.doc
- GIS文件 | EXCEL中打开ShapeFile等GIS文件
- 怎么安装VMware tools
- android 8.0 華為m3,华为揽阅M3平板配置全曝光:8.0英寸+快充+麒麟950
- 软考报名已全部截止,疫情之下,这些要求不满足不得进入考场
热门文章
- python自学-Python 应该怎么学?
- 自学python要看哪些书-想学习Python做数据分析,应该看哪些书?
- php和python-php与python谁更适合web开发?为什么?
- python初学者怎么入门-python怎么入门啊?
- python儿童入门视频-老男孩Python视频教程全套完整版!无偿分享~
- 【原创】3大主流的移动应用方式APP开发姿势解读
- 长虹CIRI语音智能电视技术原理简析
- 怎么让某段css代码只在Chrome 火狐 edge 浏览器生效
- 小程序 报request:fail invalid url 不校验合法域名已勾选
- 1432: 【蓝桥杯】:剪格子(迷宫问题变体)