python实现关联算法_python使用Apriori算法进行关联性解析

从大规模数据集中寻找物品间的隐含关系被称作关联分析或关联规则学习。过程分为两步:1.提取频繁项集。2.从频繁项集中抽取出关联规则。

频繁项集是指经常出现在一块的物品的集合。

关联规则是暗示两种物品之间可能存在很强的关系。

一个项集的支持度被定义为数据集中包含该项集的记录所占的比例,用来表示项集的频繁程度。支持度定义在项集上。

可信度或置信度是针对一条诸如{尿布}->{葡萄酒}的关联规则来定义的。这条规则的可信度被定义为“支持度({尿布,葡萄酒})/支持度({尿布})”。

寻找频繁项集

Apriori原理:如果某个项集是频繁的,那么它的所有子集也是频繁的。反过来,如果一个项集是非频繁项集,那么它的所有超集也是非频繁的。

Apriori算法是发现频繁项集的方法。该算法首先生成所有单个物品的项集列表,接着扫描交易记录来查看哪些项集满足最小支持度要求,那些不满足最小支持度的项集会被去除掉。然后对剩下来的集合进行组合以生成包含两个元素的项集。接下来重新扫描交易记录,去掉不满足最小支持度的项集,该过程重复进行直到所有项集都被去掉。

Apriori伪代码

当列表中项的个数大于0时:

检查数据以确认每个项集都是频繁的

保留频繁项集并构建k+1项组成的候选项集的列表

从频繁项集中挖掘关联规则

当可信度大于最小可信度时,可以认为是含有关联规则的。可以观察到,如果某条规则不满足最小可信度要求,那么该规则的所有子集也不会满足最小可信度要求。

可以首先从一个频繁项集开始,接着创建一个规则列表,其中规则右部只包含一个元素,然后对这些规则进行测试,接下来合并,通过合并所有剩余规则右部来创建新的规则列表,其中规则右部包含两个元素,以此类推。

每个频繁项集:

while(len(L)>1)

(k规则列表)

满足最小置信度

创建k+1规则

整体代码:

import numpy as np

def loadDataSet():

return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]

def createC1(dateSet):

c1 = []

for line in dateSet:

for item in line:

if not [item] in c1:

c1.append([item])

c1.sort()

return list(map(frozenset,c1))

def scanData(data,ck,minSupport):#寻找满足最小支持度的项集

ssCnt = {}

for tid in data:

for can in ck:

if can.issubset(tid):

if can not in ssCnt.keys():

ssCnt[can] = 0

ssCnt[can] += 1

numItems = len(data)

retList = []

supportData = {}

for key in ssCnt.keys():

support = ssCnt[key]/numItems

if support >= minSupport:

retList.append(key)

supportData[key] = support

return retList,supportData

def aprioriGen(Lk,k): #根据k-1项集生成k项集

retList = []

lenLk = len(Lk)

for i in range(lenLk):

for j in range(i+1,lenLk):

l1 = list(Lk[i])[:k-2]

l2 = list(Lk[j])[:k-2]

l1.sort()

l2.sort()

if l1 == l2:

retList.append(Lk[i] | Lk[j])

return retList

def apriori(dataSet,minSupport = 0.5):#生成频繁项集

c1 = createC1(dataSet)

D = list(map(set,dataSet))

l1,supportData = scanData(D,c1,minSupport)

L = [l1]

k = 2

while(len(L[k-2])>0):

ck = aprioriGen(L[k-2],k)

lk,supk = scanData(D,ck,minSupport)

k = k + 1

L.append(lk)

supportData.update(supk)

return L,supportData

def generaterRules(L,supportData,minConf=0.7):#生成规则

bigRuleList = []

for i in range(1,len(L)):

for freqSet in L[i]:

H1 = [frozenset([item]) for item in freqSet]

if i>1:

rulesFromConseq(freqSet,H1,supportData,bigRuleList,minConf)

else:

calcConf(freqSet,H1,supportData,bigRuleList,minConf)

return bigRuleList

def calcConf(freqSet,H,suppurtData,brl,minConf = 0.7):#计算满足置信度的规则

prunedH = []

for conseq in H:

conf = suppurtData[freqSet]/suppurtData[freqSet-conseq]

if conf > minConf:

brl.append((freqSet-conseq,conseq,conf))

prunedH.append(conseq)

return prunedH

def rulesFromConseq(freqSet,H,supportData,brl,minConf=0.7):#递归生成规则

m = len(H[0])

if len(freqSet)>=(m+1):

Hmp1 = calcConf(freqSet,H,supportData,brl,minConf)

if (len(Hmp1) > 1):

Hmp1 = aprioriGen(Hmp1,m+1)

rulesFromConseq(freqSet,Hmp1,supportData,brl,minConf)

data = [line.split() for line in open('mushroom.dat').readlines()]

L,support = apriori(data,minSupport=0.3)

for i in range(len(L)):

for item in L[i]:

if item & {'2'}:

print(item)

代码及数据集下载:Apriori

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/501150.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IOC操作Bean管理注解方式(创建对象)

目录 IOC操作Bean管理注解方式(创建对象) 1.什么是注解 2.Spring 针对 Bean 管理中创建对象提供注解主要有以下四种 (1)Component (2)Service (3)Controller (4&am…

嵌入式操作系统_航天科工海鹰翼辉嵌入式操作系统获自主原创“身份证”

日前,由中国航天科工集团三院三部研发的海鹰翼辉嵌入式操作系统顺利通过中国信息安全评测中心的自主原创评测,成为国内首个具有自主原创“身份证”的嵌入式操作系统。随着物联网和人工智能技术的快速发展,传统武器装备逐步进入智能互联时代&a…

.net core 调用c dll_Qt编写DLL给外部程序调用,提供VC/C#/C调用示例(含事件)

一、前言最近这阵子,接了个私活,封装一个开发包俗称的SDK给客户调用,查阅了很多人家的SDK,绝大部分用VC编写,而且VC6.0居多,估计也是为了兼容大量的XP用户及IE浏览器,XP自带了VC6.0运行库&#…

求二叉树高度_LeetCode刷题——第二十五天(平衡二叉树)

这段时间跟二叉树杠上了,接下来还有许多二叉树的题目,虽然已经做了不少了,大多题目都涉及到了递归,也挺好,刚好有机会练习一下递归,但是遇到新的题目还是有点力不从心,还需要看参考答案&#xf…

IOC操作Bean管理注解方式(组件扫描配置)

IOC操作Bean管理注解方式&#xff08;组件扫描配置&#xff09; 开启组件扫描的 细节配置 约定那些类可以扫描&#xff0c;哪些类不可以扫描 bean1.xml配置如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://w…

rabbitmq 持久化_RabbitMQ原理与相关操作(三)消息持久化

现在聊一下RabbitMQ消息持久化&#xff1a;问题及方案描述1.当有多个消费者同时收取消息&#xff0c;且每个消费者在接收消息的同时&#xff0c;还要处理其它的事情&#xff0c;且会消耗很长的时间。在此过程中可能会出现一些意外&#xff0c;比如消息接收到一半的时候&#xf…

视图的数据存放在哪里_分布式 | DBLE 是如何实现视图的?

作者&#xff1a;苏仕祥浩鲸科技 PaaS 组件团队成员&#xff0c;长期从事分库分表中间件的相关解决方案工作&#xff0c;热爱技术&#xff0c;乐于分享。本文来源&#xff1a;原创投稿*爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并…

IOC操作Bean管理注解方式(注入属性@Autowired和Qualifier)

目录 IOC操作Bean管理注解方式&#xff08;注入属性Autowired、Qualifier和Resource&#xff09; 1.基于注解方式实现 属性注入 &#xff08;1&#xff09;Autowired&#xff1a;根据属性类型进行自动装配 第一步&#xff1a; 第二步&#xff1a; &#xff08;2&#xff…

python数据可视化的特点_6 种 Python 数据可视化工具

原标题&#xff1a;6 种 Python 数据可视化工具 英文&#xff1a;Chris Moffitt&#xff0c;编译&#xff1a;伯乐在线/李加庆 简介 在 Python 中&#xff0c;将数据可视化有多种选择&#xff0c;正是因为这种多样性&#xff0c;何时选用何种方案才变得极具挑战性。本文包含了一…

IOC操作Bean管理注解方式(完全注解开发)

IOC操作Bean管理注解方式&#xff08;完全注解开发&#xff09; &#xff08;1&#xff09;创建配置类&#xff0c;替代xml配置文件 需要让Spring 把一个普通的类认为是配置类 结构图&#xff1a; SpringConfig类代码如下&#xff1a; package com.lbj.spring5.comfig;import …

python什么教程好_Python基础教程哪个好

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 对于零基础想学习编程的朋友来说&#xff0c;Python是个非常不错的选择。Python的基础概念是极简的对象化实现&#xff0c;内存管理都采用统一的计数GC&#xff0c;为了提高开发效率而限制了几乎所有的底层操作。Python难度不大&a…

怎么查看ingress的规则_有机合成中常见的基础理论规则

本文总结了本号以往发布的一些有机合成中常见的基础理论规则&#xff0c;方便大家学习交流&#xff0c;点击下方标题链接链接可以查看详细内容&#xff0c;内容不全&#xff0c;小编后面还会更新。在下方菜单“知识技能”中也可以点击查看。马氏规则 扎伊采夫(Zaitsev)消除规则…

Spring的AOP-基本概念

AOP-基本概念 Aspect Oriented Programming&#xff1a;面向切面编程&#xff0c;利用AOP 可以对业务逻辑的各个部分进行隔离。从而使得业务逻辑各部分之间的 “ 耦合度降低 ” 通俗解释&#xff1a;在不修改原有代码的情况下增加功能而不影响原有功能&#xff0c;在主干功能里…

为什么python打不开_python文件打不开如何解决

python中打开文件使用的是open()函数&#xff0c;获取文件对象&#xff0c;之后的操作都是相对于文件对象而言的。f open(your_file.txt,r) 就可以打开一个文件进行操作。第二个参数为对文件的操作方式&#xff0c;’w’是写文件&#xff0c;已存在的同名文件会被清空&#xf…

pythonpip使用方法_Python: pip常见的使用方法

pip升级自己&#xff1a;pip install --upgrade pip查找与安装&#xff1a;使用search、install这两个参数。安装到用户目录&#xff1a;pip install pkg_name --user查看某个库的信息&#xff1a;$ pip show Jinja2---Name: Jinja2Version: 2.7.3Location: /path/to/virtualen…

Spring的AOP-底层原理

目录 1.有两种动态代理 第一种&#xff1a;有接口情况&#xff0c;使用JDK动态代理 第二种&#xff1a;无接口情况&#xff0c;使用CGLIB动态代理 2.使用JDK动态代理&#xff0c;使用Proxy类里面的方法创建代理对象 步骤一&#xff1a; 步骤二&#xff1a; 步骤三&#…

python搭建web服务器_Python搭建简单的web服务器

Python搭建简单的web服务器 1.winR输入cmd打开命令行 2.通过 cd 进入到你保存 HTML 文件的目录。例如&#xff1a;H:\D3\d3 输入 cd\ 指令进入到C盘的根目录。&#xff08;CD&#xff08;更改目录&#xff09;。使用此命令可以更改当前目录&#xff09; 这里解释一下cd指令基本…

screnc加密后文件不能执行_芯片加密后还能不能再次使用【详细介绍】

随着信息技术的发展&#xff0c;信息的载体-芯片的运用也越来越多了&#xff0c;随之而来的芯片安全性的要求也越来越高了&#xff0c;各个芯片厂商对芯片保密性要求越来越高&#xff0c;芯片的加密&#xff0c;保证了芯片中的信息的安全性。经常有客户打电话过来问&#xff0c…

Spring的AOP-操作术语

目录 Spring的AOP-操作术语 1.连接点 2.切入点 3.通知 &#xff08;1&#xff09;实际增强的逻辑部分称为通知 &#xff08;2&#xff09;通知有多种类型 4.切面 Spring的AOP-操作术语 1.连接点 类里面那些方法可以被增强&#xff0c;这些方法称为连接点 2.切入点 类里…

向别人网页注入js_区块链研究实验室 | Web3 .js基于以太坊的Javascript API

web3.js是一个库集合&#xff0c;你可以使用HTTP或IPC连接本地或远程以太它节点进行交互。 web3的JavaScript库能够与以太坊区块链交互。 它可以检索用户帐户&#xff0c;发送交易&#xff0c;与智能合约交互等。Version : 1.0.0-beta.36Web3.js API类型eth&#xff1a;Etherum…