文档章节

weka实战002:apriori关联规则算法

brian_2017
 brian_2017
发布于 2017/01/17 09:46
字数 894
阅读 50
收藏 0

关联规则算法最出名的例子就是啤酒和尿布放一起卖。


假如我们去超市买东西,付款后,会拿到一张购物清单。这个清单就是一个Transaction。对关联规则算法来说,每个产品的购买数量是无意义的,不参与计算。


许许多多的人买东西,生成了N个购物清单,也就是N个Transaction。


那么,这些Transaction上的货物之间有什么有用的关系呢?这些关系可以用什么方式表达出来呢?这就是关联规则算法要解决的问题。


下面,我们用一个具体的例子解释这个问题:


1. 假设有三个Transaction分别是:

t1 = {'a', 'b', 'c', 'd'}

t2 = {'a', 'c', 'e'};

t3 = {'b', 'c', 'f'}

其中,abcdef都是货物的ID,简写是为了方便理解。


2. 我们看一下,就知道只要买了'a',就可能会买'c',或者说,只要买了'c'就很可能买了'a',而且,在2个Transaction上都出现了。这个规律可以表达成:

  'c' ==> 'a'(66.67%)

后面的66.67%叫支持度,也就是'a'和'c'在一起出现的次数,处以c的次数,也就2/3=66.67%。


3. 这就是关联规则,各种关联规则算法要解决的是在样本数据很大或者样本数量很多的情况下计算关联规则,以及减少内存,提高计算速度。


4. 那么,apriori算法是如何做的呢?算法流程是这样的:

    4.1 先从所有的transaction遍历出所有货物id,也就{'a', 'b', 'c', 'd', 'e', 'f'}

    4.2 再计算每个货物id在所有transaction上出现次数总和,也就是{'a':2, 'b':2, 'c':3, 'd':1, 'e':1, 'f':1}

    4.3 有经验的同学可以知道上述两个步骤用HashMap能一次性搞定

    4.4 对4.2的结果,将出现次数少于一个最小支持数阈值的货物id删除,如果阈值是1,则剩下的结果就是{'a':2, 'b':2, 'c':3}

    4.5 对4.4的结果,生成一项频繁集,也就是{{'a'}, {'b'}, {'c'}}

    4.6 到这里为止,就得到了apriori算法的核心,频繁集,以后的所有计算都是在频繁集上进行:

        4.6.1 根据一项频繁集,生成二项频繁集,也就是{{'a','b'}, {'a','c'}, {'b','c'}},也就是任意两个一项频繁集的组合。

        4.6.2 计算二项频繁集的货物id同时在所有transaction上的出现次数:{{'a','b'}:1, {'a','c'}:2, {'b','c'}:2}

        4.6.3 根据最小支持数阈值=1,删除4.6.2的低值二项频繁集,其结果就是{{'a','c'}:2, {'b','c'}:2}

        4.6.4 根据二项频繁集合计算关联规则:

                  'c' ==> 'a'(66.67%)

                  'c' ==> 'b'(66.67%)

         4.6.5 根据二项频繁集,计算三项频繁集以及在三项频繁集上的关联规则,其步骤类似4.6.1~4.6.4。

         4.6.6 上述计算步骤,可以写成一个while循环,计算到高次频繁集为空,也就是不在有新规则产生为止。然后输出所有的规则。算法结束。


5. 几个问题

    5.1 关联规则不能处理连续值属性,所有要将连续值属性转化成nominal属性进行计算。

    5.2. 如果样本的属性值很多,或者transaction总数很多,apriori算法会很慢,因为每一轮计算都需要查询整个数据库。为此,学者们提出很多优化算法,剪切,并行,fp-growth等等。







© 著作权归作者所有

brian_2017
粉丝 3
博文 61
码字总数 145216
作品 0
私信 提问
Weka 中的算法名说明

数据输入和输出 WOW():查看Weka函数的参数。 Weka_control():设置Weka函数的参数。 read.arff():读Weka Attribute-Relation File Format (ARFF)格式的数据。 write.arff:将数据写入Weka ...

pior
2015/10/17
422
0
与数据挖掘有关或有帮助的R包和函数的集合

与数据挖掘有关或者有帮助的R包和函数的集合。 1、聚类 常用的包:fpc,cluster,pvclust,mclust 基于划分的方法:kmeans,pam,pamk,clara 基于层次的方法:hclust,pvclust,agnes,diana 基于模...

dongzhumao
2015/01/28
0
0
数据挖掘和R包(转)

下面列出了可用于数据挖掘的R包和函数的集合。其中一些不是专门为了数据挖掘而开发,但数据挖掘过程中这些包能帮我们不少忙,所以也包含进来。 1、聚类 2、分类 3、关联规则与频繁项集 4、序...

MtrS
2016/04/26
55
0
什么是关联分析?

引言: 在认识什么是关联分析之前。先了解一下关联分析能用来干什么吧: 演示样例1:例如以下是一个超市几名顾客的交易信息。 TID代表交易流水号。Items代表一次交易的商品。 我们对这个数据...

技术mix呢
2017/11/09
0
0
深入浅出Apriori关联分析算法(一)

在美国有这样一家奇怪的超市,它将啤酒与尿布这样两个奇怪的东西放在一起进行销售,并且最终让啤酒与尿布这两个看起来没有关联的东西的销量双双增加。这家超市的名字叫做沃尔玛。 你会不会觉...

大数据_zzzzMing
08/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
7
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
7
0
Flutter系列之在 macOS 上安装和配置 Flutter 开发环境

本文为Flutter开发环境在macOS下安装全过程: 一、系统配置要求 想要安装并运行 Flutter,你的开发环境需要最低满足以下要求: 操作系统:macOS(64位) 磁盘空间:700 MB(不包含 IDE 或其余...

過愙
昨天
6
0
OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
昨天
2.5K
16
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
昨天
42
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部