玩转大数据22:常见的关联规则挖掘算法

在这里插入图片描述

引言

关联规则挖掘是数据挖掘中的一种重要技术,主要用于发现数据集中项之间的有趣关系。关联规则挖掘在许多领域都有广泛的应用,如市场篮子分析、推荐系统等。常见的关联规则挖掘算法包括Apriori算法和FP-Growth算法。

一、Apriori算法

关联规则挖掘是数据挖掘领域中一个重要的研究方向,主要用于发现数据集中项之间的有趣关系。其中,Apriori算法是关联规则挖掘的经典算法之一,它通过寻找频繁项集来生成关联规则。

1.1 Apriori算法原理

Apriori算法的基本思想是利用已知的频繁项集来生成新的候选频繁项集,并通过扫描数据库来验证候选频繁项集的频繁性。算法采用了一种逐层搜索的迭代方法,通过减少搜索空间来提高效率。具体步骤如下:

  1. 扫描数据库,统计每个项集的支持度,找出频繁1项集。
  2. 利用频繁k-1项集生成候选k项集。
  3. 扫描数据库,统计候选k项集的支持度,找出频繁k项集。
  4. 重复上述步骤直到无法生成新的频繁项集为止。
  5. 根据频繁项集生成关联规则,并计算规则的支持度和置信度等指标。

1.2 Apriori算法实现过程

下面是Apriori算法的实现过程:

  1. 初始化:设置最小支持度阈值min_support和最大频繁项集长度max_length。
  2. 扫描数据库,统计每个项集的支持度,找出频繁1项集L1。
  3. k=2,初始化候选k项集Ck为空集。
  4. 对于每个频繁(k-1)项集li∈Lk-1,生成其非空子集组成的候选k项集Ci。
  5. 扫描数据库,统计候选k项集的支持度,将支持度大于等于min_support的候选k项集加入到Ck中。
  6. 如果Ck为空,则结束;否则,对于每个频繁(k-1)项集li∈Lk-1,生成其非空子集组成的候选(k+1)项集Ci+1。
  7. k=k+1,回到第4步。
  8. 根据频繁项集生成关联规则,并计算规则的支持度和置信度等指标。
  9. 输出具有较高支持度和置信度的关联规则。

1.3 代码示例

下面是一个基于Python的Apriori算法示例代码:

import pandas as pd
from mlxtend.frequent_patterns import apriori, association_rules
from mlxtend.frequent_patterns import transactions as transactions_utils
from mlxtend.frequent_patterns import Itemset, Rule
import numpy as np
import random# 生成模拟数据集
data = [['牛奶', '面包', '黄油'],['牛奶', '面包', '鸡蛋'],['牛奶', '黄油', '鸡蛋'],['面包', '黄油', '鸡蛋'],['牛奶', '面包', '黄油', '鸡蛋'],['牛奶', '面包', '黄油'],['面包', '黄油', '鸡蛋']]
dataset = transactions_utils.array_to_dataset(data)
itemsets = apriori(dataset, min_support=0.5, use_colnames=True)
rules = association_rules(itemsets, metric="confidence", min_threshold=0.7)
print(itemsets)
print(rules)

1.4 小结

Apriori算法是一种经典的关联规则挖掘算法,它通过寻找频繁项集来生成关联规则。该算法具有简单、高效的特点,适用于处理大型数据集。在实际应用中,Apriori算法可以用于市场篮子分析、推荐系统等领域,帮助我们更好地理解数据和发现数据之间的有趣关系。

尽管Apriori算法在关联规则挖掘中得到了广泛应用,但它也存在一些限制和改进的空间。例如,Apriori算法需要多次扫描数据库,导致处理时间较长;同时,算法对最小支持度和最大频繁项集长度的设定比较敏感,需要谨慎选择合适的参数。因此,针对Apriori算法的改进和优化一直是研究的重要方向。

Apriori算法作为关联规则挖掘的经典之作,为我们提供了挖掘数据之间有趣关系的强大工具。通过深入理解Apriori算法的原理和实现过程,结合具体应用场景选择合适的参数和方法,我们可以更好地利用数据挖掘技术为各个领域的发展提供有力支持。
在这里插入图片描述

二、FP-Growth算法

FP-Growth算法是一种基于频繁模式生长的关联规则挖掘算法。它通过构建频繁模式树(FP-tree)来压缩存储频繁项集,并利用频繁模式树进行关联规则的挖掘。FP-Growth算法采用了一种垂直数据格式,将数据集中的项按顺序排列,并利用项集的频率信息构建频繁模式树。在构建频繁模式树的过程中,FP-Growth算法会压缩树结构,去除冗余的节点和边,从而减少了存储空间和计算时间。在生成关联规则时,FP-Growth算法会从频繁模式树中提取频繁项集,并根据它们生成强关联规则。FP-Growth算法在处理大数据集时具有较高的效率,因此在许多实际应用中得到了广泛的应用。

FP-Growth算法是一种关联规则学习算法,旨在高效地发现大量数据集中的频繁项集和关联规则。该算法由韩嘉炜等人在2000年提出,以克服Apriori算法的缺点。以下是关于FP-Growth算法的详细解释:

2.1 背景

Apriori算法是挖掘关联规则的经典算法,它通过迭代生成候选集并计算支持度来发现频繁项集。然而,Apriori算法在挖掘长频繁模式时性能低下,因为它需要多次扫描数据集并生成大量的候选集。FP-Growth算法的提出就是为了解决这个问题,它采用了一种称为频繁模式树(FP-tree)的数据结构来压缩数据集,从而提高了挖掘效率。

2.2 实现原理

FP-Growth算法的实现原理可以分为两个主要步骤:构建FP-tree和挖掘频繁项集。

  1. 构建FP-tree:首先,对数据进行一次扫描,找出频繁1项集,并按频度降序排列得到列表L。然后,基于L,再扫描一次数据集,对每个原事务进行处理:删去不在L中的项,并按照L中的顺序排列,得到修改后的事务集T’。接下来,构造FP树,将T’中的数据按照频繁项进行排序和链接,形成一棵以NULL为根节点的树。在每个结点处记录该结点出现的支持度。
  2. 挖掘频繁项集:从FP-tree中挖掘频繁项集的过程是从树的底部(叶节点)开始向上进行的。通过对每个节点进行条件模式基和条件FP-tree的递归挖掘,可以找出所有的频繁项集。具体地,对于每个节点,首先找到它的所有后继节点(直接相连的节点),然后对每个后继节点进行递归挖掘。在递归过程中,需要不断更新每个节点的条件模式基和条件FP-tree,直到无法再找到频繁项集为止。

2.3 应用场景

FP-Growth算法可以应用于购物篮分析、推荐系统、异常检测等领域。具体来说,它可以用于发现商品之间的关联规则,从而指导商品的陈列和销售策略;也可以用于推荐系统,根据用户的购买历史和兴趣爱好推荐相关商品;还可以用于异常检测,发现异常事件或模式。

2.4 示例Demo

下面是一个简单的示例代码,演示了如何使用Python实现FP-Growth算法:

from fpgrowth import FPGrowth
# 示例数据集
dataset = [['牛奶', '面包', '黄油'],['牛奶', '面包', '尿布'],['牛奶', '尿布', '黄油'],['面包', '尿布', '黄油'],['面包', '尿布'],['面包', '牛奶']]
# 创建FPGrowth对象并训练模型
fp_growth = FPGrowth(min_support=0.5, min_confidence=0.7)
frequent_itemsets = fp_growth.fit(dataset)
# 输出频繁项集和关联规则
for itemset in frequent_itemsets:print("频繁项集:", itemset)for rule in fp_growth.generate_association_rules(itemset, min_confidence=0.7):print("关联规则:", rule)

在这个示例中,我们使用了fpgrowth库来实现FP-Growth算法。首先,我们定义了一个示例数据集dataset,其中包含了多个事务(transaction),每个事务包含了一些商品(item)。然后,我们创建了一个FPGrowth对象,并指定了最小支持度和最小置信度参数。接着,我们调用fit方法来训练模型,并使用generate_association_rules方法来生成关联规则。最后,我们输出了频繁项集和关联规则的结果。

三、ECLAT算法

3.1 背景

ECLAT算法的产生背景是关联规则挖掘中的频繁项集挖掘。在关联规则挖掘中,频繁项集是指在数据集中频繁出现的物品的组合。ECLAT算法旨在从交易数据或事务数据库中发现频繁项集。

3.2 实现原理

ECLAT算法通过使用垂直数据表示和基于逐层遍历的方法来实现频繁项集的挖掘。垂直数据表示是ECLAT算法的核心思想之一,它将事务数据库转换为一种称为垂直数据表示的形式。在这种表示中,每个项(item)被映射到它出现的所有事务(transactions)。这样,每个项都与一组事务相关联。

基于垂直数据表示,ECLAT算法创建一个交易交叉引用表(transaction intersection table),其中每个项都与包含该项的事务列表相关联。通过逐层遍历交易交叉引用表,ECLAT算法可以发现频繁项集。

3.3 应用场景:

ECLAT算法可以应用于许多关联规则挖掘的应用场景,例如市场篮子分析、序列模式挖掘等。它可以用于发现不同物品之间的关联规则,帮助企业了解客户的行为模式和购买习惯,从而制定更有针对性的营销策略。

3.4. 示例Demo:

由于ECLAT算法的实现较为复杂,这里提供一个简单的示例来说明其基本原理。假设有一个事务数据库,包含以下事务:
事务1:{苹果, 香蕉}
事务2:{苹果, 橙子}
事务3:{香蕉, 橙子}
事务4:{苹果}
事务5:{香蕉}
事务6:{橙子}

  • 首先,将事务数据库转换为垂直数据表示的形式:
    苹果:{事务1, 事务2, 事务4}
    香蕉:{事务1, 事务3, 事务5}
    橙子:{事务2, 事务3, 事务6}
  • 然后,创建一个交易交叉引用表:
    苹果-橙子:{事务2}
    苹果-香蕉:{事务1}
    香蕉-橙子:{事务3}

通过逐层遍历交易交叉引用表,可以发现频繁项集。例如,在交易交叉引用表中,苹果、香蕉和橙子都出现了两次,因此它们是一个频繁项集。

ECLAT算法还可以通过生成倒排表来进一步优化频繁项集的挖掘过程。倒排表是一个统计每一个项在哪些事务中出现过的表,表中的每一行由项和它对应的TID集组成,TID集即包含此项目的所有事务的集合。通过倒排表,可以快速地找到包含某个项的所有事务,从而加速频繁项集的挖掘过程。

ECLAT算法是一种用于频繁项集挖掘的数据挖掘算法,其通过使用垂直数据表示和基于逐层遍历的方法来实现频繁项集的挖掘。在应用方面,ECLAT算法可以应用于市场篮子分析、序列模式挖掘等场景,帮助企业了解客户的行为模式和购买习惯。
在这里插入图片描述

四、CBA算法

CBA算法全称为Classification base of Association。CBA算法是基于Apriori算法基础上,由Liu, Hsu和MA提出来的。它主要是对已经挖掘出的关联规则,做分类判断,所以在某种程度上说CBA算法也是一种集成的挖掘算法。

4.1 CBA算法的实现步骤

  1. 输入数据记录,即一条条的属性值。
  2. 对属性值进行数字替换,类似于Apriori中的一条条事务记录。
  3. 根据转化后的事务记录,进行Apriori算法计算,挖掘出频繁项集。经典的关联规则挖掘算法包括Apriori和FP-Tree等。
  4. 输入查询的属性值,找出符合条件的频繁项集(需要包含查询属性和分类决策属性),如果能够推导出这样的CBA算法就是在这样的背景下产生的,它利用了Apriori挖掘出的关联规则进行分类判断。关联规则,就算分类成功,输出分类结果。

4.2. 实现原理

  • CBA算法首先利用Apriori算法挖掘出频繁项集,这些频繁项集代表了数据中的关联规则。
    此外,CBA算法的应用场景广泛,如保险领域、生物学领域、地震研究等领域中都有应用。
  • 然后,根据这些频繁项集,进行分类判断。例如在消费市场价格分析中,可以用它来猜测顾客的消费习惯;它的判断依据是Apriori算法挖掘出的频繁项。在网络安全领域中的入侵检测技术;如果一个项集中包含预先知道的属性,同时也包含分类属性值,然后计算该频繁项能否计算出由已知属性推出决策属性的关联规则。以及在高校管理中,可以根据挖掘规则来有效地辅助学校管理部门进行决策等。
  • 如果满足规则的最小置信度的要求,那么可以把频繁项集中的决策属性值作为最后的分类结果。

4.3. 应用场景:

  • CBA算法的应用场景非常广泛,包括但不限于以下几个方面:
    • 运动员比赛情况数据应用:也可以查阅学术论文和开源项目来获取更多有关CBA算法的深入研究和实现细节。例如在CBA联赛中,可以通过计算机数据挖掘技术对运动员的比赛情况进行数字分析,更加全面地了解他们的表现。
    • 视频数据处理:例如在比赛录像中,可以通过增加录像机位和专业人员的集成化调控,保证赛场无死角,帮助裁判做出更加合理的判罚。
    • 商业决策支持:通过分析消费者的购物行为等数据,可以发现商品之间的关联关系,从而为商业决策提供支持。

总的来说,CBA算法是一种基于关联规则进行分类的算法,它的应用场景广泛,可以帮助人们更好地理解和分析数据。虽然具体的示例Demo可能较为复杂和庞大,但通过使用开源的数据挖掘工具和平台,开发者可以方便地使用CBA算法进行数据挖掘和分析。

未来发展趋势

  1. 实时关联规则挖掘:随着大数据技术的发展,实时关联规则挖掘将成为一个重要的研究方向,以满足实时数据分析的需求。
  2. 增量式关联规则挖掘:增量式关联规则挖掘可以在数据发生变化时,只对新增数据进行挖掘,从而提高挖掘效率。
  3. 基于深度学习的关联规则挖掘:深度学习技术在图像识别、自然语言处理等领域取得了显著的成果,未来可能会应用于关联规则挖掘领域,提高挖掘的准确性和效率。

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

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

相关文章

重温3 Activity Intent 向下传递数据 向上传递数据

1、使用Intent向下传递数据 Intent intent new Intent(MainActivity.this,SecongActivity.class); intent.putExtra("data_from_MainActivity","I am MainActivity"); startActivity(intent);从SecondActivity取数据 Intent intent getIntent(); String …

junit 循环测试_重复运行JUnit测试而没有循环

junit 循环测试最近,我遇到了一个问题,我不得不编写一种方法的测试,该方法需要计算在一定可能性范围内的随机分布值1 。 更准确地说,如果您假设签名看起来像 interface RandomRangeValueCalculator {long calculateRangeValue( l…

Java 9:欢迎来到Module World

Java 9已于9月21日正式发布,Eclipse从Eclipse Oxygen.1a(4.7.1a)支持Java 9,让我们进入模块世界。 从此处下载Java 9,然后将其添加到Eclipse Installed JRE中,如下所示 就是这样,我们很高兴在…

重温5 UI开发

public class TextView extends View implements ViewTreeObserver.OnPreDrawListenerjava.lang.Object ↳android.view.View ↳android.widget.TextView Known Direct Subclasses Button,CheckedTextView,Chronometer,DigitalClock,EditText,TextClockButtonRepresents a…

JWT令牌的秘密轮换

当您使用JSON Web令牌 ( JWT )或需要对有效载荷信息进行签名或加密的任何其他令牌技术时,设置令牌的到期日期很重要,因此,如果令牌到期,则可以假定这可能被视为安全漏洞,您拒绝使用此令牌进行任…

重温6 ListView相关|单位dp/sp

dp:密度无关像素。 sp:可伸缩像素。解决文字大小适配问题。 密度:Android中的密度即屏幕每英寸所包含的像素数,通常以dpi为单位,例如一个宽2英寸长3英寸手机屏幕,若分辨率为320*480,则屏幕密度为320dpi。…

重温7 布局相关

1、LinearLayout 可以在控件中使用&#xff1a; android:layout_weight"1" android:layout_width"0dp"设置控件占屏幕宽度&#xff0c;上表示占屏幕1/2。 2、TableLayout <TableLayout android:stretchColums"1" ...>上指定为1表示拉伸第…

wso2 esb_通过运行示例从WSO2 ESB开始

wso2 esb我最近加入了一个新任务&#xff0c;我们必须基于WSO2工具栈实施ESB解决方案。 尽管我熟悉ESB的大多数概念以及其他一些实现&#xff08;例如Mule ESB &#xff09;&#xff0c;但这是我第一次必须使用WSO2 ESB 。 幸运的是&#xff0c;有很多文档可以找到&#xff0c;…

Java SE中的Bootstrap CDI 2.0

抽象 这是在Java SE应用程序中引导CDI 2.0的快速参考。 CDI 2.0&#xff08;JSR 365&#xff09; Maven依赖 <dependency><groupId>org.jboss.weld.se</groupId><artifactId>weld-se-core</artifactId><version>3.0.2.Final</version…

持久化技术SharedPreferences存储

public interface SharedPreferences android.content.SharedPreferences Class Overview Interface for accessing and modifying preference data returned by getSharedPreferences(String, int). 1、调用SharedPreferences对象的edit()方法获得SharedPreferences.Editor对象…

Handler、Message的简单使用

Android没有全局的消息队列&#xff0c;Android的消息队列是和某个线程相关联在一起的。每个线程最多只有一个消息队列&#xff0c;消息的处理也是在这个线程中完成。也就是说&#xff0c;如果想在当前线程中使用消息模型&#xff0c;则必须构建一个消息队列&#xff0c;消息机…

我们相信加密! 教程

许多人认为加密是一个复杂的主题&#xff0c;这很难理解。 虽然可以实现它的某些方面&#xff0c;但是每个人都可以理解它在更高层次上的工作方式。 这就是我要处理的这篇文章。 用简单的术语解释它是如何工作的&#xff0c;然后使用一些代码。 是的&#xff0c;我们信任加密…

使用Http协议访问网络--HttpURLConnection

public abstract classHttpURLConnection extends URLConnectionjava.lang.Object ↳java.net.URLConnection ↳java.net.HttpURLConnection 1、获取HttpURLConnection实例Protected ConstructorsHttpURLConnection(URL url)Constructs a new HttpURLConnection instance …

Spring Cloud –基本设置

Spring Cloud解决了分布式系统的常见问题。 但是&#xff0c;对于只使用广为人知的整体应用程序工作的人来说&#xff0c;从一开始就跳入一长串为分布式服务设计的模式可能会让人不知所措。 本文将通过实用的方法为您介绍Spring Cloud的基础知识。 完成后&#xff0c;您不仅应该…

Eclipse中的Tomcat:6个流行的“如何做”问题

学习新技术总是一个艰难的过程。 当您尝试学习将要相互交互的两种技术时&#xff0c;此过程变得更加困难。 Tomcat和Eclipse是Java EE开发中最流行的先决条件之一。 因此&#xff0c;要成为一名专业的开发人员&#xff0c;您需要知道如何使用此对执行最需要的操作以及如何进行一…

Spring Boot中带有CKEditor的AJAX

1.概述 在本文中&#xff0c;我们将介绍如何在Spring Boot中使用CKEditor 。 在本教程中&#xff0c;我们将导入一个包含大量数据的XML文档&#xff0c;对使用GET请求将一组数据加载到CKEditor实例的能力进行编程&#xff0c;并执行POST请求以保存CKEditor的数据。 我们将使用…

使用Http协议访问网络--HttpClient

public interface HttpClient org.apache.http.client.HttpClient HttpClient是Apache提供的Http网络访问接口。1、创建HttpClient实例HttpClient是一个接口&#xff0c;无法直接创建实例&#xff0c;通常创建一个DefaultHttpClient&#xff08;HttpClient 的SubClass&#xff…

编写测试用例

1、创建测试用例 为ComeOnBroadcastReceiverDo创建一个测试用例&#xff1a; 在导航栏File-->New-->Other 选择AndroidTestProject 2、点击next输入测试工程的name&#xff0c;选择测试工程路径 点击next,选择要测试的工程&#xff1a; 点击Finish完成测试工程的新建 被…

欢迎界面动画

实现一个欢迎界面的动画&#xff0c;即打开app显示的页面&#xff0c;动画结束后跳到Activity。 1、欢迎界面的背景是一个绿色矩形 <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com/apk/res/andr…