数据挖掘:关联规则
时间限制: 5秒 内存限制: 64M
数据挖掘有很广泛的应用领域。其中,最广为人知且易于理解的就是关联规则了。所谓关联规则,有时也称之为购物篮分析 (market basket
analysis),其主要目的是在一个数据集中找出不同项之间的关系。例如,购买鞋的顾客,有10%的可能也会买袜子;60%的买面包的顾客,也会买牛奶。一个有名的例子就是"尿布和啤酒"的故事了。
美国沃尔玛连锁店超市里,有一个有趣的现象:尿布和啤酒赫然摆在一起出售,表面上看似毫不相关的商品。但是这个奇怪的举措却使尿布和啤酒的销量都增加了。有人分析,原因可能是美国的妇女们经常会嘱咐她们的丈夫下班以后要为孩子买尿布。而丈夫在买完尿布之后又要顺手买回自己爱喝的啤酒,因此啤酒和尿布在一起购买的机会就变得很大了。沃尔玛是如何发现了尿布和啤酒之间的关系呢?正是数据挖掘的关联规则思想。商家请人对超市一年多原始交易数字进行了详细的分析,分析的结果揭示了这对神奇的组合。
关联规则在其它应用场合也有很好的应用。例如:在商业销售上,关联规则可用于交叉销售,以得到更大的收入;在保险业务方面,如果出现了不常见的索赔要求组合,则可能为欺诈,需要作进一步的调查。在医疗方面,可找出可能的治疗组合;在银行方面,对顾客进行分析,可以推荐感兴趣的服务等等。
发现关联规则的算法目前已经有很多种,其中最基本的是Apriori算法。由Rakesh Agrawal 在 1994 年提出的,详细的介绍参考这里《Fast Algorithms for
Mining Association Rules》。
简单地说,关联规则的目标是发现出现频度较高的组合。比如假设上图中,Database
TDB中A、B、C、D、E分别代表不同的商品, Tid=10的用户同时购买了A,C,D三种商品,Tid=20的用户同时购买了B,C,E三种商品,等等。
该算法寻找所有出现次数超过支持度的子项。所谓支持度,就是至少要出现的次数。例如,A,C的组合共出现了2次(Tid=10和30),它的支持度就是2。对用户给定一个支持度,Apirori算法每次扫描,把出现次数不够支持度的项从候选集中去除,然后再在此基础上生成更多项组合的子集。
=====
本题要求做一个简单的关联规则的数据挖掘。为了简化,只做两项组合的频繁集,题目中的商品也只用一个字母代替。
输入:
最小支持度support(>1),交易记录的数量N,紧跟着是N个具体的交易记录。
输出:
所有支持度≥support的二项组合,以及对应的支持度。
样例输入:
2□4↵
a,c,d↵
b,c,e↵
a,b,c,e↵
b,e↵
样例输出:
a,c:2↵
b,c:2↵
b,e:3↵
c,e:2↵
参考解答:请将文件重命名为Main.class然后执行。
import java.util.Scanner;
public class Main{
public static void main(String[] args){
StringBuilder sBuilder = new StringBuilder();
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
String[] in = str.split(" ");
int support = Integer.parseInt(in[0]);
int N = Integer.parseInt(in[1]);
String[] arr = new String[N];
for(int i=0;i<N;i++){
arr[i] = scanner.nextLine().replaceAll(",", "");//把读入的字符串去除",",由a,b,c,d变成abcd
}
scanner.close();
for(int i=0;i<N;i++){
int len1 = arr[i].length();
for(int j=0;j<len1-1;j++){
for(int k=j+1;k<len1;k++){
String s = arr[i].charAt(j) + "," +arr[i].charAt(k);
sBuilder.append(s).append(" ");
}
}
}
String tString = sBuilder.toString().trim();//两个两个连接完成的数组,去除最后的空格
String[] result = tString.split(" ");//把连接成的字符串再分成数组,便于查找
int len2 = result.length;
sBuilder = new StringBuilder();//把sBuilder置为空值
for(int i=0;i<len2-1;i++){
int num = 1;
for(int j=i+1;j<len2;j++){
if(result[i].equals(result[j])){
num++;
}
}
if(num >= support && sBuilder.indexOf(result[i]) == -1){//判断是否已经输出过
sBuilder.append(result[i]).append(" ");//没有输出过就添加到sBuilder判断
System.out.println(result[i]+":"+num);
}
}
}
}
- 大小: 76.2 KB
分享到:
相关推荐
数据挖掘有很广泛的应用领域。其中,最广为人知且易于理解的就是关联规则了。所谓关联规则,有时也称之为购物篮分析 (market basket analysis),其主要目的是在一个数据集中找出不同项之间的关系。例如,购买鞋的...
《人工智能与数据挖掘:关联规则算法的分析与优化》 关联规则挖掘是人工智能领域中数据挖掘的一个重要组成部分,它主要用于发现大规模数据集中的隐藏模式,尤其是频繁项集和有趣关联规则。本文着重探讨了关联规则...
关联规则挖掘是数据挖掘的一种方法,它旨在找出数据集中项集之间的有趣关系,如“如果用户购买了商品A,那么他们也可能会购买商品B”。在这个场景中,我们将探讨如何使用Python进行关联规则挖掘。 关联规则通常由两...
在这个“数据挖掘关联规则分析数据集”中,我们有两个合成的数据集,它们旨在帮助研究者和分析师探索不同项目之间的潜在关联,从而可能为业务决策、市场篮子分析或商品推荐系统提供依据。 关联规则通常由两部分组成...
数据挖掘通常包括分类、关联规则学习、聚类、序列模式挖掘和异常检测等任务。 2. **预处理**:数据挖掘前的预处理工作至关重要,包括数据清洗(处理缺失值、异常值和不一致性)、数据转换(如规范化、标准化)以及...
在数据挖掘中,主要的概念包括数据预处理(如清洗、集成、转换和规约)、分类(如决策树、贝叶斯网络、支持向量机等)、聚类(如K-means、层次聚类等)、关联规则学习(如Apriori算法)、序列模式挖掘和异常检测等。...
总结来说,Apriori算法是数据挖掘关联规则中的基础方法,通过迭代生成频繁项集并挖掘强关联规则,为商业决策、市场分析等领域提供了有力工具。尽管存在效率问题,但通过优化和改进,Apriori算法仍然在许多场景下发挥...
接着,书中详细讲解了数据挖掘的主要方法,包括分类、聚类、关联规则学习和序列模式挖掘。分类是根据已有数据建立预测模型,如决策树、贝叶斯网络和神经网络等;聚类则是无监督学习,将数据集划分为具有相似属性的...
数据挖掘之关联规则(中科院) 数据挖掘之关联规则(中科院)
关联规则挖掘是数据挖掘领域中的一个重要方法,它用于发现数据集中项集之间的有趣关系,比如购物篮分析中商品之间的关联性。在这个主题中,我们主要关注两种经典的算法:Apriori 和 FP-growth。 **Apriori 算法** ...
西电数据挖掘作业——关联规则aprior算法python实现,我自己在python3.6已经能够成功实现,没有问题
算法分为两个主要步骤:生成频繁项集和挖掘关联规则。 1. 频繁项集生成: - 初始化:首先,从数据集中找出所有单个项(单品)的频次,如果其频次超过最小支持度,则这些单品构成最小频繁项集。 - 推广:基于当前...
关联规则挖掘是数据挖掘领域中的一项关键技术,主要目的是从大量数据中发现项之间的有趣关系,即项集之间的关联性。这些关联性可以揭示数据中的潜在规则,对于理解数据本质和发现数据间隐藏的模式具有重要意义。关联...
基于粗糙集理论的数据挖掘中关联规则的研究与应用
WEKA提供了一个强大的平台,通过它的接口和工具,可以方便地处理数据,挖掘关联规则,并验证规则的有效性。尽管WEKA功能强大,但在使用时仍需要注意数据的质量、预处理以及结果的解释等关键步骤,以确保挖掘结果的...
数据挖掘是一种从海量数据中发现有价值知识的过程,而关联规则挖掘是其中的一种核心方法。关联规则主要用于揭示数据集中不同项集之间的有趣关系,比如在超市购物数据中,可能发现“购买尿布”的顾客往往也会“购买...
关联规则挖掘是数据挖掘中的一个重要领域,主要用于发现数据集中不同项之间的有趣关系,特别是在大型数据库中。关联规则最早由R. Agrawal等人于1993年提出,旨在解决如何高效地发现大型数据库中项集之间潜在的关联或...
该书首先介绍了数据挖掘的基本概念,包括数据预处理、数据仓库和OLAP(在线分析处理)、数据挖掘任务的分类(如分类、聚类、关联规则学习和序列模式挖掘等)。这些基础知识为后续深入学习提供了坚实的基础。 在数据...