非二元属性的关联规则挖掘和关联规则的评价

简介: =====================================================================   《机器学习实战》系列博客是博主阅读《机器学习实战》这本书的笔记也包含一些其他python实现的机器学习算法     github 源码同步:https://github.

=====================================================================

  《机器学习实战》系列博客是博主阅读《机器学习实战》这本书的笔记也包含一些其他python实现的机器学习算法

    github 源码同步:https://github.com/Thinkgamer/Machine-Learning-With-Python

    算法实现均采用python              如需转载请注明出处,谢谢

=====================================================================


在上一篇博客中《使用Apriori算法和FP-growth算法进行关联分析(Python版)》详细介绍说明了关联规则中的Apriori算法和FP-growth算法的原理和代码实现,这一篇博客中我们来说一下非二元属性的关联规则挖掘和关联规则的评价

一:非二元属性的关联规则挖掘

在上一篇博客中讨论的关联规则算法是针对购物篮数据,其特点是数据的属性都是二元属性,现实数据集中往往有些属性值是标称或者连续的,无法直接利用上述算法挖掘相关规则,
例如:
笔记本销售数据集
TID 年龄
文化程度
是否购买笔记本
100 49
研究生
200 29
研究生
300 35
研究生
400 26
本科
500 31
研究生
对于数据集中年龄和文化程度的非二元属性可以利用数据预处理的方法,将他们转化成二元属性,再应用针对购物篮数据的相关规则挖掘算法
有n个离散取值的标称属性可以转化为n个二元属性,例如针对上图,标称属性文化程度有高中,大学,研究生三个取值,可以转换为文化程度=高中,文化程度=大学,文化程度=研究生三个二元属性,连续属性先进行离散化处理,例如将年龄端分为0-20,20-40,40以上,转换后数据如下图示:

TID 年龄0-20
年龄20-40
年龄40以上
文化程度-高中
文化程度-大学
文化程度-研究生
是否购买
100




200





300





400




500




如果设定支持度阀值为70%,置信度阀值为80%,利用之前关联规则挖掘算法,可以得到的关联规则{年龄在21-40}——>{购买笔记本},{文化程度为研究生}——>{购买笔记本}
注意事项:
(1):标称属性值过多。比如文化程度细化分为,小学,初中,高中,大学,研究生,博士,这样计算下来由于没有满足支持度阀值的频繁项集,因此无法发现任何关联规则,所以对于有较多可能取值的标称属性,最好利用概念分层将多个标称值聚合为一个二元属性
(2):连续属性离散区间划分太窄或者太宽。区间划分太窄会不满足支持度,而无法发现关联规则。

二:关联规则的评价

在海量数据的商业数据集中进行关联规则的挖掘,往往会产生成百上千的关联规则,而其中大部分的关联规则是没有用的。如何筛选这些模式,以识别最有趣的模式是比较复杂的任务,因为一个人的垃圾可能是另一个人的财富,因此建立一套广泛接受的评价关联规则的标准是非常重要的。
第一组理论可以通过统计论据建立,即客观兴趣度度量:涉及相互独立的项或覆盖少量事务的模式被认为是不令人感兴趣的,因为他们可能反应数据中的伪关系。这些模式可以使用客观兴趣度度量来排除,客观兴趣度度量使用从数据推导出的统计量来确定模式是否是有趣的。客观兴趣度度量包括支持度,置信度,和相关性
第二组标准是可以通过主观论据建立,即主观兴趣度度量:一个模式被主观的认为是无趣的,除非他能解释料想不到的信息或者提供导致有意行动的信息。例如:规则{黄油}——>{面包}可能不是有趣的,尽管有很高的支持度和置信度,但是他表面的关系显而易见。另一方面,规则{Diaper}——>{Beer}是有趣的,因为这种联系十分出乎意料,并且可能为零售商提供新的交叉销售的机会。将主观知识加入到模式评价中是一项困难的任务,因为需求来自领域专家的大量先验信息

下面我们来看兴趣度的客观度量,包括支持度,置信度,相关性的意义和局限性

支持度和置信度 

项集支持度:一个项集出现的次数与数据集所有事物数的百分比称为项集的支持度

eg:support(A->B)=support_count(A并B) / N

项集置信度(confidence):数据集中同时包含A,B的百分比

eg:confidence(A->B) = support_count(A并B) / support_count(A)


例1:早餐麦片的销售商调查在校的5000名学生早晨进行的活动,调查数据以相依表的形式实现如下表,设定支持度为40%,置信度60%,针对表中的数据进行关联分析


打篮球 不打篮球
吃麦片 2000 1750 3750
不吃麦片 1000
250
1250

3000
2000
5000
关联规则{打篮球}——>{吃麦片}的支持度为 2000/5000 = 040%,,置信度为2000/3000=67%,这条规则是强关联规则,表明通常打篮球的同学通常也吃麦片,但是所有学生中吃麦片比例为75%,要大于67%,这说明一个学生如果打篮球,那么他吃麦片的可能性就从75%降到了67&。而且{不打篮球}——>{吃麦片}的可能性为1750/2000=87.5%。因此,尽管规则{打篮球}——>{吃麦片}有着较高的置信度,缺是一个误导,因为打篮球反而会抑制早餐吃麦片,麦片销售商根据关联规则{打篮球}——>{吃麦片}去赞助篮球比赛可能是一个错误的商业行为

相关性分析 


从上面可以看出支持度和置信度有一定的局限性,无法过滤掉一些无用的关联规则,因此可以在支持度和置信度的基础上增加相关性的度量,相关性度量可以采用提升度、相关系数、余弦度量等方法

提升度(lift)是一种简单的相关度量。对于项集A,B,若P(A 并 B) = P(A)*P(B),则A,B是相互独立的,否则存在某种依赖关系,关联规则的前件项集A和后件项集B之间的依赖关系可以通过提升度计算:

                              lift(A,B) = P(A 并 B)/ P(A)*P(B)=confidence(A—>B)/support(B)
提升度可以评估项集A的出现是否能够促进项集B的出现。值大于1,表明二者存在正相关,小于1,表示负相关,等于1,表示无关
对于二元变量,提升度等价于兴趣因子(interest factor)的客观度量,定义如下,其中N为记录总数:
                               lift(A,B) = I(A,B)=support( A 并 B )/support(A)support(B)=Nf11/f1_f_1

例:以上表的数据为例计算关联规则{打篮球}—>{吃麦片}的提升度

P({打篮球} 并{吃麦片})= 2000/5000 = 0.4
P({打篮球})=3000/5000 = 0.6
P({吃麦片})=3700/5000 = 0.75
lift({打篮球}—>{吃麦片}) = P({打篮球} 并{吃麦片})/( P({打篮球})*P({吃麦片}) )= 0.4 / ( 0.6 * 0.75) = 0.89
由于{打篮球}—>{吃麦片}的提升度小于1,所以前后存在负相关关系,即推广打篮球不但不会提升吃麦片的人数,反而会更小

项集间的关系也可以用相关系数度量 ,对于二元变量,相关系数 f定义为:
              f = f11f00 - f01f10  /  sqrt(f1_ * f_1 * f0_ * f_0)
相关系数为0表示不相关,大于0表示正相关,小于0表示负相关
例:计算打篮球和吃麦片的相关系数

f = (2000* 250 - 1000*1750)/ (sqrt(3750*3000*1250*2000)) =- 0.23

相关系数小于0,说明打篮球和吃麦片负相关

相关性的度量还可以用余弦度量 即:

          cosine(A,B) = P(A  B)/ sqrt(P(A)*P(B))=support( A 并 B )/sqrt(support(A)support(B))
 
注:sqrt表示开根号

余弦度量可以看作调合的提升度度量,余弦值仅受A,B和A并B的支持的影响,而不受事务总个数的影响

辛普森悖论 

在对数据集按照某个变量进行分组后,之前对整个数据集分析得到的关联规则分析可能并不适用于分组,这种现象就是所谓的辛普森悖论
下面我们拿一组数据来具体说明
例:P大和T大的物理学院和外语学院的人数和学校总人数的数据如下(这里假设P大和T大只有物理和外语两个学院)
物理学院的数据:

男生人数 女生人数 男:女
P大 45 8 5.6:1
T大 101
51
2.0:1

外院的数据:

男生人数 女生人数 男:女
P大 50 201 0.25:1
T大 9
92
0.10:1

学校整体数据(上述两个专业之和):

男生人数 女生人数 男:女
P大 95 209 0.45:1
T大 110
143
0.77:1
数据可不会是骗人的,不信可以自己动手验算一下,真的出现了这种违背常理的情况!这种现象被称为“辛普森悖论”。虽然这么叫,但其实这不是个真正的悖论,它内部没有包含逻辑上的矛盾,只是有些违背人们的常理罢了

可能有些人还是一头雾水,虽然数据是如此没错,可还是不能理解到底发生了什么使得结论如此古怪。让你构造一个类似的数据,恐怕你也很难直接想得出来吧!人们对几何图形的想象能力总是高于对数字和字母的想象,因此为了更直观地表现出辛普森悖论,我们看下面一幅向量图:
                                                
http://guokr.com/gkimage/1x/r0/gm/1xr0gm.png

图中,黑色的线代表 P 大数据,红色的线代表 T 大的数据。A p 点的横坐标为 P 大外院女生人数,纵坐标为 P 大外院男生人数;B p 点的横纵坐标则分别为 P 大总女生人数和总男生人数。A t 和 B t 点的意义与之相对应。

设坐标原点为 O,则 OA p 的斜率表示的就是 P 大外院的男女比例,A p B p 表示的是 P 大物院的男女比例,OB p 表示的则是 P 大总男女比例;T 大的各线段斜率意义与之对应。

如此一来,一切都变得清晰起来了。辛普森悖论反映在这张图上,就成了一个显然的事实:在 P 大的外院、物院两个向量的斜率分别大于 T 大的两个向量的斜率的条件下,总人数向量的斜率当然不一定哪个大呀!根据这个直观的理解,你也可以随意编造能产生辛普森悖论的数据了吧!

知道了辛普森悖论这一事实之后,我们以后对待统计数据就要更加小心了。在数学中,经常会出现这种出乎人们意料的惊人事实,所以还是一定要学好数学啊!


相关文章
|
3月前
|
数据采集 供应链 算法
|
7月前
|
机器学习/深度学习 数据可视化 数据挖掘
用关联规则学习之购物篮分析
用关联规则学习之购物篮分析
|
机器学习/深度学习 算法 搜索推荐
关联规则挖掘:Apriori算法的深度探讨
关联规则挖掘:Apriori算法的深度探讨
1171 0
|
7月前
|
数据可视化 数据挖掘
R语言APRIORI模型关联规则挖掘分析脑出血急性期用药规律最常配伍可视化
R语言APRIORI模型关联规则挖掘分析脑出血急性期用药规律最常配伍可视化
|
7月前
|
数据可视化 算法 数据挖掘
R语言用关联规则和聚类模型挖掘处方数据探索药物配伍中的规律
R语言用关联规则和聚类模型挖掘处方数据探索药物配伍中的规律
|
7月前
|
算法 数据挖掘 数据库
【数据挖掘】关联规则、频繁项集、闭项集详解(图文解释 超详细)
【数据挖掘】关联规则、频繁项集、闭项集详解(图文解释 超详细)
1066 1
|
算法 Python
转:Apriori算法,挖掘数据集中项集的关联规则学习经典
Apriori算法是一种用于挖掘数据集中频繁项集的关联规则学习的经典算法。它基于“Apriori原理”,即如果一个项集是频繁的,那么它的所有子集也必须是频繁的。该算法通过不断生成新的频繁项集来实现。
100 0
|
存储 算法 搜索推荐
# 【推荐系统】:关联规则
# 【推荐系统】:关联规则
# 【推荐系统】:关联规则
|
数据挖掘 Python
统计学中的相关性分析
统计学中的相关性分析