当前位置:首页 » 操作系统 » apriori关联算法

apriori关联算法

发布时间: 2024-08-06 15:19:36

① apriori算法是什么

Apriori算法是第一个关联规则挖掘算法,也是最经典的算法。它利用逐层搜索的迭代方法找出数据库中项集的关系,以形成规则,其过程由连接(类矩阵运算)与剪枝(去掉那些没必要的中间结果)组成。该算法中项集的概念即为项的集合。包含K个项的集合为k项集。项集出现的频率是包含项集的事务数,称为项集的频率。如果某项集满足最小支持度,则称它为频繁项集。

算法应用

随着高校贫困生人数的不断增加,学校管理部门资助工作难度也越加增大。针对这一现象,提出一种基于数据挖掘算法的解决方法。将关联规则的Apriori算法应用到贫困助学体系中,并且针对经典Apriori挖掘算法存在的不足进行改进,先将事务数据库映射为一个布尔矩阵,用一种逐层递增的思想来动态的分配内存进行存储,再利用向量求"与"运算,寻找频繁项集。

② 关联规则算法(The Apriori algorithm)

        关联规则的目的在于在一个数据集中找出项之间的关系,也称之为购物篮分析 (market basket analysis)。例如,购买鞋的顾客,有10%的可能也会买袜子,60%的买面包的顾客,也会买牛奶。这其中最有名的例子就是"尿布和啤酒"的故事了。

        本篇的Apriori算法主要是基于频繁集的关联分析。其主要目的就是为了寻找强关联规则。

        要理解频繁集、强关联规则,要先借助下面的一个情境,来介绍几个重要概念。

        下表是一些购买记录:

将购买记录整理,可得到下表,横栏和纵栏的数字表示同时购买这两种商品的交易条数。如购买有Orange的交易数为4,而同时购买Orange和Coke的交易数为2。

        置信度,表示这条规则有多大程度上值得可信。

        设条件的项的集合为A,结果的集合为B。置信度计算在A中,同时也含有B的概率。即Confidence(A->B)=P(B|A)。例 如计算"如果Orange则Coke"的置信度。由于在含有Orange的4条交易中,仅有2条交易含有Coke。其置信度为0.5。

        支持度,计算在所有的交易集中,既有A又有B的概率。

        例如在5条记录中,既有Orange又有Coke的记录有2条。则此条规则的支持度为2/5=0.4。现在这条规则可表述为,如果一个顾客购买了Orange,则有50%的可能购买Coke。而这样的情况(即买了Orange会再买Coke)会有40%的可能发生。

支持度大于预先定好的最小支持度的项集。

       关联规则:令项集I={i1,i2,...in},且有一个数据集合D,它其中的每一条记录T,都是I的子集。那么关联规则是形如A->B的表达式,A、B均为I的子集,且A与B的交集为空。这条关联规则的支持度:胡颂support = P(A并B)。这条关联规则的置信度:confidence = support(A并B)/suport(A)。

       强关联规则:如果存在一条关联规则,它的支持度和置信度都大于预先定义好的最小支持度与置信度,我们就称它为强关联规则。

下面用一个例子说明算法的过程:

项目集合 I={1,2,3,4,5};

事务集 T:

设定最小支持度(minsup)=3/7,最小置信度(misconf)=5/7。

假设:n-频繁项目集为包含n个元素的项目集,例如1-频繁项目集为包含1个元素的项目集

则这里,1-频繁项目集有:{1},{2},{3},{4},{5}

生成2-频繁项目集的过程如下:

       裤燃郑 首先列出所有可能的2-项目集,如下:

        {1,2},{1,3},{1,4},{1,5}

        {2,3},{2,4},{2,5}

        {3,4},{3,5}

        {4,5}

        计算它们的支持度,发现只有{1,2},{1,3},{1,4},{2,3},{2,4},{2,5}的支持度    满足要求,因此求得2-频繁项目集:

        {1,2},{1,3},{1,4},{2,3},{2,4}

生成3-频繁项目集:

对于现有的2-频繁项目集,两两取并集,并段纯确保第三个二元组也在2-频繁项目集内,把得到的所有3-项目集分别计算支持度,剔除不满足最小支持度的项目集;

例如,

{1,2},{1,3}的并集得到{1,2,3};

{1,2},{1,4}的并集得到{1,2,4};

{1,3},{1,4}的并集得到{1,3,4};

{2,3},{2,4}的并集得到{2,3,4};

但是由于{1,3,4}的子集{3,4}不在2-频繁项目集中,所以需要把{1,3,4}剔除掉。{2,3,4} 同理剔除。

然后再来计算{1,2,3}和{1,2,4}的支持度,发现{1,2,3}的支持度为3/7 ,{1,2,4}的支持度为2/7,所以需要把{1,2,4}剔除。因此得到3-频繁项目集:{1,2,3}。

重复上面步骤继续寻找n-频繁项目集,直到不能发现更大的频繁项目集。所以,到此,频繁项目集生成过程结束。

这里只说明3-频繁项目集生成关联规则的过程,即以集合{1,2,3}为例:

回顾事物集,先生成1-后件的关联规则:

(1,2)—>3,置信度=3/4(出现(1,2)的记录共4条,其中有3条包含3,所以3/4);

(1,3)—>2,置信度=3/5;

(2,3)—>1,置信度=3/3;

第二条置信度<5/7,未达到最小置信度,所以剔除掉。所以对于3-频繁项目集生成的强关联规则为:(1,2)—>3和(2,3)—>1。

这表示,如果1、2出现了,则极有可能出现3;2、3出现,则极有可能有1。

http://www.cnblogs.com/junyuhuang/p/5572364.html

③ 关联规则挖掘算法的介绍

学号:17020110019    姓名:高少魁

【嵌牛导读】关联规则挖掘算法是数据挖掘中的一种常用算法,用于发现隐藏在大型数据集中令人感兴趣的频繁出现的模式、关联和相关性。这里将对该算法进行简单的介绍,之后通过Apriori算法作为实例演示算法执行结果。

【嵌牛鼻子】数据挖掘    关联规则挖掘    python

【嵌牛正文】

一、算法原理

1、基本概念

关联规则用于发现隐藏在大型数据集中令人感兴趣的频繁出现的模式、关联和相关性。 而 Apriori算法则是经典的挖掘频繁项集的关联规则算法,它通过层层迭代来寻找频繁项集,最后输出关联规则:首先扫描数据集,得到 1-频繁项集,记为 L1,通过合并 L1得到 2-频繁项集 L2,再通过 L2找到 L3,如此层层迭代,直到找不到频繁项集为止。

在Apriori算法中,定义了如下几个概念:

⚫ 项与项集 :设 I={i1,i2,…,im}是由 m个不同项构成的集合,其中的每个 ik(k=1,2,…,m)被称为一个项 (Item),项的集合 I被称为项集和,即项集。在实验中,每一条购物记录可以被看做 一个项集,用户购买的某个商品即为一个项。

⚫ 事务与事务集:神乎事务 T是项集 I的一个子集,而事务的全体被称为事务集。

⚫ 关联规则:形如 A=>B的表达式,其中, A和 B都属于项集 I,且 A与 B不相交。

⚫ 支持度:定义如下 support(A=>B) = P(A B),即 A和 B所含的项在事务集中同时出现的概率。

⚫ 置信度:定义如下 confidence(A⇒B)=support(A⇒B)/support(A)=P(A B)/P(A)=P(B|A),即如果事务包含 A,则事务中同时出现 B的概率。

⚫ 频繁项集:如果项集 I的支持度满足事先定义好的最小支持度阈慧液值(即 I的出现频度大于相应的最小出现频度阈值),则 I是频繁项集。

⚫ 强关联规则:满足最小支持度和最小置信度的关联规则,即待挖掘的关联规则。

根据以上概念,要实现关联规则的挖掘,首先要找到所有的频繁项集,之后找出强关联规则(即通过多次扫描数据集,找出频繁集,然后产生关联规则)。

2、挖掘频繁项集

在该步骤中有两个较为重要的部分 :连接和修剪。连接步骤即使用k-1频繁项集,通过连接得到 k-候选项集,并且只有相差一个项的项集才能进行连接,如 {A,B}和 {B,C}连接成为 {A,B,C}。修剪步骤基于一个性质:一个 k-项集,如果它的一个 k-1项集(子集)不是频繁的,那么它本身也不可能是频繁的。 因此可以基于这个性质,通过判断先验性质来对候选集进行修剪。

3、产生关联规则

经过连接和修剪之后,即找到了所有的频繁项集,此时可以在此基础上产生关联规则,步骤如下

(1)对于每个频繁项集 l,产生 l的所有非空子集(这些非空子集一定是频繁项集);

(2)对于 l的每一个非空子集 x,计算 confidence(x => (l-x)),如果 confidence(x => (l-x)) confmin,那么规则 x => (l-x)”成立。

二、算法设计

1、数据集

通过语句 import xlrd导入相关的库来进行数据的读取 。数据内容为十条购物记录 ,每条购物记录有若干个商品,表示某个顾客的购买记录 ,如图

对于数据加载部分 使用了 xlrd库中的函数 open_workbook来 打开一个表格文件,使用sheet_by_index函数得到一个工作表, row_values函数即可读取表格中的内容。由于每个购物记录的商品数不一定相同,导致读取的内容含有空格 (’ ’),因此对数据进行删减以得到紧凑的数据 ,最终读取数据的结果以列表的游碧悉形式返回。

2、连接

对于连接部分,主要目标是根据已有的k-1频繁项集生成 k-候选频繁项集。算法步骤为:首先将项集中的项按照字典顺序排序,之后将 k-1项集中两个项作比较,如果两个项集中前 k-2个项是相同的,则可以通过或运算(|)将它们连接起来。

3、修剪

修剪操作主要使用一个判断函数,通过传入连接操作后的项集和之前的k-1频繁项集,对新的项集中的每一个项的补集进行判断,如果该补集不是 k-1频繁项集的子集,则证明新的项集不满足先验性质,即一个频繁项集的所有非空子集一定是频繁的 ,否则就满足先验形式。返回布尔类型的参数来供调用它的函数作判断。

经过连接和修剪步骤之后,项基要成为频繁项集还必须满足最小支持度的条件,笔者设计了generateFrequentItems函数来对连接、修剪后产生的 k-候选项集进行判断,通过遍历数据集,计算其支持度,满足最小支持度的项集即是 一个频繁项集,可将其返回。

以上,经过不断的遍历、连接、修剪、删除,可将得到的所有结果以列表形式返回。笔者还设计了字典类型的变量 support_data,以得到某个频繁项集及其支持度 。

4、挖掘关联规则

generateRules函数用来挖掘关联规则,通过传入 最小置信度、 频繁项集及其 支持度来生成规则 。根据定理:对于频繁项集 l的每一个非空子集 x,计算 confidence(x => (l-x)),如果 confidence(x => (l-x)) confmin,那么规则 x => (l-x)”成立,因此,该函数重点在扫描频繁项集,得到每一个子集,并计算置信度,当置信度满足条件(即大于等于最小置信度)时,生成一条规则。在函数中,使用了元组来表示一条规则,元组中包含 x、 l-x以及其置信度 ,最后返回生成的所有规则的列表。

三、算法执行结果

设置最大频繁项集数k为 3,最小支持度为 0.2,最小置信度为 0.8 使用 pycharm运行程序 ,得到以下结果:

由图中结果可以看出,对于频繁 1-项集,有五个满足的项集,频繁 2-项集有 6个,频繁 3-项集有 2个,它们都满足支持度大于或等于最小支持度 0.2。根据频繁项集,程序得到的关联规则有三条,即 {面包 }=>{牛奶 },,{鸡蛋 }=>{牛奶 },,{面包,苹果 }=>{牛奶 其中,这些规则的置信度都是 1.0,满足大于或等于最小置信度 0.8的条件 。

四、程序源码

热点内容
以巧克力为主写一篇脚本 发布:2024-11-25 17:16:59 浏览:334
数据库课时 发布:2024-11-25 16:57:50 浏览:450
dns服务器名称地址 发布:2024-11-25 16:57:49 浏览:931
如何给监控加访问密码 发布:2024-11-25 16:45:13 浏览:600
国外安卓音乐播放器哪个好 发布:2024-11-25 16:35:58 浏览:142
我的世界服务器增加粒子 发布:2024-11-25 16:28:29 浏览:717
带内核的安卓x86是什么意思 发布:2024-11-25 16:27:01 浏览:272
php了解 发布:2024-11-25 16:16:26 浏览:933
个人搭建服务器要钱不 发布:2024-11-25 16:06:56 浏览:832
服务器磁盘满了怎么办 发布:2024-11-25 16:06:14 浏览:19