最近看了关联算法中的Apriori没看懂,这次看了一些论文总算看懂了,不过还是没能够自己实现。在github搜到一些代码看,看的不很懂,这里先贴上(当中有自己加的注释),有时间再补充研究。

  

# -*- coding: utf-8 -*-
"""
Created on Wed Nov 30 10:05:42 2016 @author: Administrator
"""
from numpy import *
import itertools support_dic = {} #生成原始数据,用于测试
def loadDataSet():
return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]] #获取整个数据库中的一阶元素
# C1 = {1, 2, 3, 4, 5}
def createC1(dataSet):
C1 = set([])
for item in dataSet:
C1 = C1.union(set(item))
return [frozenset([i]) for i in C1] #输入数据库(dataset) 和 由第K-1层数据融合后得到的第K层数据集(Ck),
#用最小支持度(minSupport)对 Ck 过滤,得到第k层剩下的数据集合(Lk)
def getLk(dataset, Ck, minSupport):
global support_dic
Lk = {}
#计算Ck中每个元素在数据库中出现次数
for item in dataset:
for Ci in Ck:
if Ci.issubset(item):
if not Ci in Lk:
Lk[Ci] = 1
else:
Lk[Ci] += 1
#用最小支持度过滤
Lk_return = []
for Li in Lk:
support_Li = Lk[Li] / float(len(dataSet))
if support_Li >= minSupport:
Lk_return.append(Li)
support_dic[Li] = support_Li
return Lk_return #将经过支持度过滤后的第K层数据集合(Lk)融合
#得到第k+1层原始数据Ck1
'''连接步'''
def genLk1(Lk):
Ck1 = []
for i in range(len(Lk) - 1):
for j in range(i + 1, len(Lk)):
if sorted(list(Lk[i]))[0:-1] == sorted(list(Lk[j]))[0:-1]:
Ck1.append(Lk[i] | Lk[j])
return Ck1 #遍历所有二阶及以上的频繁项集合
def genItem(freqSet, support_dic):
for i in range(1, len(freqSet)):
for freItem in freqSet[i]:
genRule(freItem) #输入一个频繁项,根据“置信度”生成规则
#采用了递归,对规则树进行剪枝
def genRule(Item, minConf=0.7):
if len(Item) >= 2:
for element in itertools.combinations(list(Item), 1):
if support_dic[Item] / float(support_dic[Item - frozenset(element)]) >= minConf:
print(str([Item - frozenset(element)]) + "----->" + str(element))
print (support_dic[Item] / float(support_dic[Item - frozenset(element)]))
genRule(Item - frozenset(element)) #输出结果
if __name__ == '__main__':
dataSet = loadDataSet()
result_list = []
Ck = createC1(dataSet)
#循环生成频繁项集合,直至产生空集
while True:
Lk = getLk(dataSet, Ck, 0.5)
if not Lk:
break
result_list.append(Lk)
Ck = genLk1(Lk)
if not Ck:
break
#输出频繁项及其“支持度”
print(support_dic)
#输出规则
genItem(result_list, support_dic)

  输出:

Apriori——python3实现的更多相关文章

  1. python3 关联规则Apriori代码模版

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- from numpy import * def loadDataSet(): return [['a', ...

  2. apriori推荐算法

    大数据时代开始流行推荐算法,所以作者写了一篇教程来介绍apriori推荐算法. 推荐算法大致分为: 基于物品和用户本身 基于关联规则 基于模型的推荐 基于物品和用户本身 基于物品和用户本身的,这种推荐 ...

  3. 【机器学习】Apriori算法——原理及代码实现(Python版)

    Apriopri算法 Apriori算法在数据挖掘中应用较为广泛,常用来挖掘属性与结果之间的相关程度.对于这种寻找数据内部关联关系的做法,我们称之为:关联分析或者关联规则学习.而Apriori算法就是 ...

  4. 《机器学习实战》 in python3.x

    机器学习实战这本书是在python2.x的环境下写的,而python3.x中好多函数和2.x中的名称或使用方法都不一样了,因此对原书中的内容需要校正,下面简单的记录一下学习过程中fix的部分 1.pr ...

  5. python3  threading初体验

    python3中thread模块已被废弃,不能在使用thread模块,为了兼容性,python3将thread命名为_thread.python3中我们可以使用threading进行代替. threa ...

  6. Python3中的字符串函数学习总结

    这篇文章主要介绍了Python3中的字符串函数学习总结,本文讲解了格式化类方法.查找 & 替换类方法.拆分 & 组合类方法等内容,需要的朋友可以参考下. Sequence Types ...

  7. Mac-OSX的Python3.5虚拟环境下安装Opencv

    Mac-OSX的Python3.5虚拟环境下安装Opencv 1   关键词 关键词:Mac,OSX,Python3.5,Virtualenv,Opencv 2   概述 本文是一篇 环境搭建 的基础 ...

  8. Ubuntu部署python3.5的开发和运行环境

    Ubuntu部署python3.5的开发和运行环境 1 概述 由于最近项目全部由python2.x转向 python3.x(使用目前最新的 python3.5.1) ,之前的云主机的的默认python ...

  9. Python3 登陆网页并保持cookie

    网页登陆 网页登陆的原理都是,保持一个sessionid在cookie然后,根据sessionid在服务端找到cookie进行用户识别 python实现 由于python的简单以及丰富的类库是开发网络 ...

随机推荐

  1. VPN安装后报错:Reason442 & Error56

    VPN安装后一直报错,同样的32位安装包别人安装是正常,自己安装就不正常了,考虑到是自己电脑配置的问题. 经过一番努力,解决了问题,下面就本次解决过程做一个小小的总结. (1)确保VPN Servic ...

  2. map erase iterator

    错误写法: map<int, int> m; for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) ...

  3. 递归算法(三)——多项分布问题

    问题 一个枪手打靶,靶从外向内有1-10分(考虑脱靶得0分),打十枪,求枪手最后得90分的概率. 解决思路 一.穷举 考虑10重for循环,累计十次得分和为90者,求得概率.该法通用性差,效率低,但容 ...

  4. enable feature AJAX of MOSS2007

    As default, the feature AJAX of MOSS2007 is disabled, so the site web configuration file should be m ...

  5. java selenium (十三) 智能等待页面加载完成

    我们经常会碰到用selenium操作页面上某个元素的时候, 需要等待页面加载完成后, 才能操作.  否则页面上的元素不存在,会抛出异常. 或者碰到AJAX异步加载,我们需要等待元素加载完成后, 才能操 ...

  6. laravel cookie写入

            $cookie = cookie('cookie_name', 'value', 5);        $data = ['title'=>'hello world'];     ...

  7. 显示隐藏文件 .DS_Store文件

    1. mac为了保护系统文件和减少对用户的干扰,提高用户体验,将一些系统文件隐藏了起来,如hosts配置文件,.DS_Store文件 (Desktop Services Store),.localiz ...

  8. HTML引入外部文件,解决统一管理导航栏问题。

    1.IFrame引入,看看下面的代码     <IFRAME NAME="content_frame" width=100% height=30 marginwidth=0 ...

  9. jstl_fmt

    <fmt:formatDate value="${isoDate}" type="both"/>2004-5-31 23:59:59<fmt: ...

  10. Coding源码学习第四部分(Masonry介绍与使用(一))

    Masonry GitHub:https://github.com/SnapKit/Masonry Masonry是一个轻量级的布局框架,拥有自己的描述语法,采用更优雅的链式语法封装自动布局,简洁明了 ...