- 浏览: 2663592 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
关联规则的目的在于在一个数据集中找出项之间的关系,也称之为购物蓝分析 (market basket analysis)。例如,购买鞋的顾客,有10%的可能也会买袜子,60%的买面包的顾客,也会买牛奶。这其中最有名的例子就是"尿布和啤酒"的故事了。
关联规则的应用场合。在商业销售上,关联规则可用于交叉销售,以得到更大的收入;在保险业务方面,如果出现了不常见的索赔要求组合,则可能为欺诈,需要作进一步的调查。在医疗方面,可找出可能的治疗组合;在银行方面,对顾客进行分析,可以推荐感兴趣的服务等等。
Apriori algorithm是关联规则里一项基本算法。由Rakesh Agrawal 在 1994 年提出的,详细的介绍请猛击这里《Fast Algorithms for Mining Association Rules 》。
首先我们来看,什么是规则?规则形如"如果…那么…(If…Then…)",前者为条件,后者为结果。例如一个顾客,如果买了可乐,那么他也会购买果汁。
如何来度量一个规则是否够好?有两个量,置信度(Confidence)和支持度(Support)。假设有如下表的购买记录。
顾客 | 项目 |
1 | orange juice, coke |
2 | milk, orange juice, window cleaner |
3 | orange juice, detergent |
4 | orange juice, detergent, coke |
5 | window cleaner |
将上表整理一下,得到如下的一个2维表
|
Orange | Win Cl | Milk | Coke | Detergent |
Orange | 4 | 1 | 1 | 2 | 2 |
WinCl | 1 | 2 | 1 | 0 | 0 |
Milk | 1 | 1 | 1 | 0 | 0 |
Coke | 2 | 0 | 0 | 2 | 1 |
Detergent | 1 | 0 | 0 | 0 | 2 |
上表中横栏和纵栏的数字表示同时购买这两种商品的交易条数。如购买有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%的可能发生。
再来考虑下述情况。
项 | 支持度 |
A | 0.45 |
B | 0.42 |
C | 0.4 |
A and B | 0.25 |
A and C | 0.2 |
B and C | 0.15 |
A,B,and C | 0.05 |
可得到下述规则
规则 | 置信度 |
If B and C then A | 0.05/0.15*100%=33.33% |
If A and C then B | 0.05/0.20*100%=25% |
If A and B then C | 0.05/0.25*100%=20% |
上述的三条规则,哪一条规则有用呢?
对于规则" If B and C then A",同时购买B和C的人中,有33.33%会购买A。而单项A的支持度有0.45,也就是说在所有交易中,会有45%的人购买A.看来使用这条规则来进行推荐,还不如不推荐,随机对顾客进荐好了。
为此引入另外一个量,即提升度(Lift),以度量此规则是否可用。描述的是相对于不用规则,使用规则可以提高多少。有用的规则的提升度大 于1。计算方式为Lift(A==>B)=Confidence(A==>B)/Support(B)=Support(A==>B) /(Support(A)*Support(B))。在上例中,Lift(If B and C The A)=0.05/(0.15*0.45)=0.74。而Lift(If A then B)=0.25/(0.45*0.42)=1.32。也就是说对买了A的人进行推荐B,购买概率是随机推荐B的1.32倍。
如何产生规则呢。可以分两步走。
首先找出频繁集(frequent itemset)。所谓频繁集指满足最小支持度或置信度的集合。其次从频繁集中找出强规则(strong rules)。强规则指既满足最小支持度又满足最小置信度的规则。
我们来看如何产生频繁集。
这其中有一个定理。即频繁集的子集也一定是频繁集。比如,如果{A,B,C}是一个3项的频繁集,则其子集{A,B},{B,C},{A,C}也一定是2项的频繁集。为方便,可以把含有k项的集合称之为k-itemsets.
下面以迭代的方式 找出频繁集。首先找出1-itemsets的频繁集,然后使用这个1-itemsets,进行组合,找出2-itemsets的频繁集。如此下去,直到不 再满足最小支持度或置信度的条件为止。这其中重要的两步骤分别是连接(join)和剪枝(prune).即从(k-1)-itemsets中的项进行组 合,产生备选集(Candidate itemsets)。再从备选集中,将不符合最小支持度或置信度的项删去。例如
Frequent 2-itemsets | Candidate 3-itemsets | Frqquent 3-itemsets | ||
I1,I2 | ==> | I1,I2,I4 | ==> | I1,I2,I4 |
I1,I4 | I2,I3,I4 | |||
I2,I3 | ||||
I2,I4 |
下面我们再来看一个详细的例子。
设最小支持度为2,以Ck 表示k-itemsets备选集,以Lk 表示k-itemsets频繁集。
ID | Items | Itemset | Sup. count | Itemset | Itemset | |||
100 | I1,I2,I5 | I1 | 6 | I1 | I1,I2 | |||
200 | I2,I4 | ==>C1: | I2 | 7 | ==>L1: | I2 | ==>C2 | I1,I3 |
300 | I2,I3 | I3 | 6 | I3 | I1,I4 | |||
400 | I1,I2,I4 | I4 | 2 | I4 | I1,I5 | |||
500 | I1,I3 | I5 | 2 | I5 | I2,I3 | |||
600 | I2,I3 | I2,I4 | ||||||
700 | I1,I3 | I2,I5 | ||||||
800 | I1,I2,I3,I5 | I3,I4 | ||||||
900 | I1,I2,I3 | I3,I5 | ||||||
I4,I5 |
对C2 进行扫描,计算支持度。
Itemset | Sup. count | Itemset | Itemset | Sup. count | Itemset | |||
I1,I2 | 4 | ==> L2: | I1,I2 | ==> C3 | I1,I2,I3 | 2 | ==> L3: | I1,I2,I3 |
I1,I3 | 4 | I1,I3 | I1,I2,I5 | 2 | I1,I2,I5 | |||
I1,I4 | 1 | I1,I5 | ||||||
I1,I5 | 2 | I2,I3 | ||||||
I2,I3 | 4 | I2,I4 | ||||||
I2,I4 | 2 | I2,I5 | ||||||
I2,I5 | 2 | |||||||
I3,I4 | 0 | |||||||
I3,I5 | 1 | |||||||
I4,I5 | 0 |
对 于频繁集中的每一项k-itemset,可以产生非空子集,对每一个子集,可以得到满足最小置信度的规则了。例如考虑{I1,I2,I5}。其子集有 {I1,I2}, {I1,I5}, {I2,I5}, {I1}, {I2}, {I5}。可以产生规则,{I1,I2} => {I5} (50%), {I1,I5} => {I2} (100%), {I2,I5} =>{I1} (100%),{I1} => {I2,I5} (33%), {I2} =>{I1,I5} (29%), {I5} =>{I1,I2} (100%)。
也 不是每个数据集都有产生强规则。例如"Thinkpad notebook" 和"Canon printer"一起可能很难产生有效规则。因为恰好一起买这两个牌子的产品的顾客太少。但不妨将Thinkpad notebook放到Notebook这一层次上考虑,而Canon printer放到printer这一去层次上考虑。这样的话,一起买notebook和printer的顾客就较多了。也即Multilevel association rules。
相关推荐
Apriori算法是关联规则挖掘中最经典、最广泛使用的算法之一,由Rakesh Agrawal和Ramakrishnan Srikant在1994年提出。这个算法主要目标是从交易数据库中找出频繁项集和强关联规则。 首先,我们来理解“关联规则”。...
在这个实例中,我们将重点关注关联规则分析中的Apriori算法,以及如何用它来挖掘电影导演之间的关联规则。 关联规则分析是数据挖掘的一种技术,主要用来发现数据集中项集之间的频繁模式,如购物篮分析中商品之间的...
在这个文本中,我们可以通过使用关联规则挖掘算法Apriori算法的matlab实现,来自动生成关联规则,并计算支持度和置信度。Apriori算法是一种常用的关联规则挖掘算法,它可以有效地发现数据集中的频繁项集,并从中生成...
在本资料包中,包含了Apriori算法在中医证型关联规则挖掘的应用实例。数据集涵盖了丰富的中医临床信息,包括患者的证型诊断结果。通过运行提供的示例程序,我们可以对这些数据进行预处理、挖掘频繁项集、生成关联...
Apriori算法的基本思想是通过对数据库的多次扫描来计算项集的支持度,发现所有的频繁项集从而生成关联规则。Apriori算法对数据集进行多次扫描,第一次扫描得到频繁1-项集L1,第k(k>1)次扫描首先利用第(k-1)次扫描...
本实验报告主要聚焦于使用Apriori算法进行关联规则挖掘,这是由Rakesh Agrawal和Ramakrishnan Srikant在1994年提出的经典算法。此算法主要应用于零售数据分析,例如发现顾客购买商品之间的关联性。 Apriori算法的...
10.3 分层搜索经典算法-Apriori算法 10.4 并行挖掘算法 10.5 增量更新挖掘算法 10.6 多层关联规则挖掘 10.7 多维关联规则挖掘 10.8 约束性关联规则挖掘 10.9 数量关联规则挖掘 10.10 负关联规则挖掘算法 10.11 加权...
### 关联规则挖掘中的Apriori算法:C++实现详解 #### 一、Apriori算法简介 Apriori算法是一种用于发现频繁项集和关联规则的算法,在数据挖掘领域有着广泛的应用。它主要用于市场篮子分析,通过分析顾客购买行为来...
在“关联规则挖掘Apriori算法的研究与改进”这个主题中,可能涉及了对原始Apriori算法的上述优化策略,以及针对特定问题的新方法。通过阅读提供的PDF文件,我们可以深入理解这些改进是如何实现的,以及它们在实际...
Apriori算法是关联规则挖掘的经典算法,由 Agrawal 和 Srikant 在1994年提出。 Apriori算法的核心思想是“频繁项集”的概念,即在数据集中出现次数超过预设阈值的项集。算法分为两个主要步骤:生成频繁项集和挖掘...
Apriori算法是关联规则挖掘中的经典算法,由Rakesh Agrawal和Ramakrishnan Srikant于1994年提出,它的主要思想是基于频繁项集的递归生成和剪枝。 **Apriori算法的基本步骤:** 1. **生成候选集**:首先,算法从...
用java实现了关联规则中的Apriori算法
"关联规则挖掘的Apriori算法改进综述" 关联规则挖掘是数据挖掘领域中的一个非常重要的研究课题,旨在发现大量数据中项集之间有趣的关联或相关关系。Apriori算法是关联规则挖掘中的一种经典算法,于1994年由Rakesh ...
标题中的“基于Apriori算法的关联规则挖掘系统的设计与实现”揭示了本文的核心主题,主要探讨了如何利用Apriori算法在大数据环境下构建关联规则挖掘系统。关联规则挖掘是数据挖掘领域的一个重要方法,其目标是从大...
在提供的文件《关联规则及Apriori算法.doc》中,可能会详细解释Apriori算法的步骤、伪代码以及如何计算支持度和置信度。同时,文件《Apriori》可能包含实际的Python代码实现,演示如何对给定的数据集应用Apriori算法...
Apriori算法是一种在数据挖掘领域广泛使用的关联规则学习算法,尤其在市场篮子分析中应用颇多。购物篮分析是通过发现顾客购买商品之间的关联性,帮助商家了解哪些商品经常一起被购买,从而制定更有效的销售策略。...
人工智能和机器学习之关联规则学习算法:R-Apriori算法:频繁项集挖掘技术.docx
总结来说,这个数据挖掘课程设计通过实现Apriori算法,使学生深入理解了关联规则挖掘的基本原理和实践操作,同时也锻炼了C#编程和数据处理能力。尽管效果可能不尽人意,但这样的实践经验对于提升问题解决和算法实现...
在本毕业设计中,主题聚焦于使用MATLAB实现Apriori算法进行关联规则挖掘。MATLAB是一种强大的数学计算软件,广泛应用于科学计算、数据分析以及工程领域。关联规则挖掘是数据挖掘的一个重要分支,旨在发现数据库中项...