21/7/13 读书笔记 关联模式的进一步拓展 序列模式

21//7/12 读书笔记

数据分析导论 处理分类属性

我们之前所探讨的都是非对称二元属性的关联模式挖掘,即事务数据。在事务数据中,我们将一个项“有”和“无”并不等价看待,我们更重视“有”之间的联系。因此接下来我们对于对称二元属性和多分类属性进行讨论拓展:

  • 对于一个对称二元属性,比如男/女,我们将其分解为两个非对称二元属性“是男”和“是女”。显而易见,这两个属性所组成的集合只有两种取值可能。
  • 对于一个多分类属性,比如毕业院校,我们将其分解为多个非对称二元属性“毕业于北航”、“毕业于北大”……。显而易见,如果将这多个属性放在一起,形成的应该是独热编码。

但是这种简单粗暴的拓展会带来大量的问题:

  1. 对于多分类属性,属性值之间可能在频率上具有很大差异。频率高的属性值对应拓展出的非对称二元属性经常会混到我们所在意的关联模式里,而频率低的属性值则相应地难以被挖掘出来。为了解决这个问题,可以将频率小的属性值进行合并,使得拓展后各个非对称二元属性的频率不至于过低;利用前面提到的倾斜支持度分布场景下对频繁项集中支持度差异的衡量来处理交叉支持模式。
  2. 对于一个(对称二元或多分类)属性,其拓展出来的非对称二元属性在逻辑上具有先验的限制性,比如一个人不可能同时是男又是女。而如果不对这种先验进行处理,那么拓展后的非对称二元属性就会导致大量本不该被计算的项集被添加到候选项集中,徒增计算负担。

数据分析导论 处理连续属性

我们之前讨论的都是离散属性,而接下来讨论连续属性。有关连续属性的关联规则被称为量化关联规则。具体来说有三种进行连续属性关联分析的方法,这三种方法大相径庭,其导出的量化关联规则的本质也差距很大。

基于离散化的方法

这种方法简单地将连续属性按照某些方式进行离散化分段。分段的依据可以是固定的区间宽度(等区间宽度法)、固定的区间事务个数(等频率法)、所期待的聚类数(基于聚类的方法)等等。这其中最关键的参数就是划分每个属性的区间个数,即离散化为多分类属性后的分类数量,其也能一定程度上侧面反映我们切割区间的大小。如果我们将一个属性按较大的区间进行分割,那么很有可能会缺失置信度,因为很多无关的情况被包含在置信度计算的分母中;反之,区间过小则会导致缺乏支持度,因为支持度计算的分子的大小因为覆盖的事务减少而减小。

我们可以使用一种冗余的方式对所有区间大小进行探索,比如在等区间宽法下,对值域为[0, 80]的连续属性,以4为步长,分别按[0,4]、[0,8]、[0,12]……[0,80]、[4,8]、[4,12],……,[4,80],……。这种方式会导致计算开销非常大,我们可以通过限制最大支持度阈值或者最长区间长度来防止其构造过宽的区间。但是这仍然无法解决冗余规则的问题,即较大的区间形成的关联模式对较小的区间形成的关联模式形成了覆盖,因为其涵盖更多例子,使得较小区间形成的关联模式成了冗余。

基于统计学的方法

这个方法中首先需要指定关联规则的后件属性,比如我们考察对“学生GPA”形成的关联规则。

首先我们对其他属性按照离散化的方法处理成非对称二元属性,然后运用传统的算法得到频繁项集。我们将这些频繁项集作为关联规则的前件,然后对该频繁项集覆盖的记录的后件属性进行计算,比如取平均数、中位数等,最后形成很多个这样的关联规则:

\[(有女朋友=否, CSGO游戏时间\in [1500h,1800h])\to 学生GPA:均值=3.85 \]

这样的关联规则和之前所见到的结构不大一样,因为其后件是根据统计值所构建的。

非离散化方法

有一种完全脱离离散化方法的方法来处理连续属性的关联问题。但是这种算法注重属性之间的关联性,而不注重属性值之间的关联性,比如在词频统计中,我们更注重的是哪些词语更偏向于一起出现,而不在乎他们出现的具体频率之间的联系。

我们以词频统计为例。之前我们讨论了词频统计可以用非对称二元变量的方式来处理,即当在文章中出现超过一定阈值就将相应单元记为1,否则为0。这个阈值非常不好定。而这里我们可以采用一种更为规范的方法:我们首先计算出特定单词\(word_1\)在特定文章\(doc_i \in \{doc_1, doc_2,...,doc_k\}\)中的出现次数,然后在这k篇文章中对频率进行规范化处理,使得最终这k篇文章中该单词出现的规范化频率和为1。我们描述一个项集为多个单词组成的集合,定义一个项集的支持度项集中所有项的规范化频率中最小的那个值,随后利用这个新的定义放进Apriori算法中,这种方式称为min-Apriori算法。这种新的支持度定义可以满足项集对于新增项的反单调性和对于单词频率的正相关性。

数据分析导论 处理概念分层问题

概念分层类似于我们面向对象过程中考虑到的层次化继承关系,比如面包同时可以细分为奶油面包、杂粮面包等等。在购物篮事务的分析中我们需要分辨出真正有意义的关联模式,就不得不考虑分层关系。在概念分层模型中,越低层次的事物越具体,越高层次的事物越抽象。注意到我们所持有的数据中记录的都是最低层事物,即最具体的事物,比如燕京啤酒、北冰洋汽水等。如果我们不去将他们归纳到更为抽象的层次,我们很可能会得到大量的低层规则,而这些规则完全可以汇总为一条高层规则。但是如果进行归纳,又可能会丢失低层中支持度不高的关联模式。一种直观的方法是采用扩展事务:对于原事务中的每个项,将其所有的祖先都加入到集合中,得到的集合称为扩展事务。扩展事务使得对于关联模式的评价能够跨过多个层次。但是这种方法大幅增加了计算耗费,且无法避免之前提到的冗余规则。书中并没有给出好的解决方案。

数据分析导论 序列模式

我们首先定义序列:是元素有序列表,被表示为\(s=<e_1e_2e_3...>\),每个元素又是一个或多个事件的集族。序列与项集之间的主要区别在于:

  • 一个项在项集中最多出现一次,而一个事件可以在序列中出现多次(在一个元素里最多出现一次)
  • 项集在判断项集一致时不考虑顺序,而序列考虑顺序

之前我们所讨论的关联模式都是针对某些项同时出现的场景,而序列模式针对的是动态系统下次序出现的事件间的关联

我们定义子序列:序列\(t=<t_1t_2...t_m>\)是序列\(s=<s_1s_2...s_n>\)的子序列,当且仅当存在整数\(1\leq j_1 < j_2 <...<j_m\leq n\),使得\(t_i\subseteq s_{j_i}\),此时又称\(t\)包含于\(s\)。注意定义中不仅对每个元素的包含性做出了限制,还限制了元素间的相对次序。

发现序列模式的过程和发现频繁项集差不多,都是依赖支持度,通过候选项集和频繁项集间的迭代进行,并利用先验知识进行剪枝。

我们定义序列s的支持度:包含序列s的所有数据序列占的比例(注意这里的包含是根据子序列定义的)。

对于如何发现候选序列,我们可以发现候选序列的量级比候选项集更大。至于Apriori算法中合并两个频繁(k-1)项集来得到一个候选项集的方法,我们需要额外定义合并两个频繁(k-1)序列的方式,假设我们合并序列\(s_1\)\(s_2\)

  1. \(s_1\)\(s_2\)合并,仅当\(s_1\)去除第一个元素后和\(s_2\)去除最后一个元素后的序列完全相同
  2. 如果\(s_2\)的最后两个事件属于同一个元素,那么\(s_2\)的最后一个元素在合并后作为\(s_1\)最后一个元素的一部分
  3. 否则,\(s_2\)的最后一个元素在合并后成为连接到\(s_1\)尾部的单独元素

这种合并方法使得我们依然保证了生成的候选k序列一定是频繁的。

时限约束

在序列模式中,最为常见的就是时序模式。在时序模式中我们提出序列的事件间应当遵从某种时限约束,才能被认为是一种序列模式。这种约束同样能够被拓展到其他序列模式下,这里我们仅以时序模式为例。

  1. 最大跨度约束:约束了序列模式中允许的事件最晚和最早发生时间的最大时间差。比如我们定义的序列模式是先起床再刷牙最后吃饭,定义的最大跨度是10分钟,那么如果我们观察一个人两天的生活并记录下来,他第一天只起床刷牙但是不吃饭,第二天不起床就吃饭(?怪起来了),那么如果不加跨度约束的话,我们会把第一天的起床刷牙和第二天的吃饭联系起来,导致我们认为其遵从了定义的序列模式。加了跨度约束后,就会因为超过跨度约束而认为模式不被该例子支持。
  2. 最小间隔和最大间隔:约束了序列模式中允许的相继事件之间的时间差。比如我们定义的序列模式是8节课连着上,定义的最大间隔是45分钟,那么如果一个人每天连上4节课,那么如果没有最大间隔限制的话,就会认为其两天的行为记录能够支持模式。加了间隔约束后,无论他一天上3节还是4节,只要不是在45分钟内就接着上下一节课且连上8节的话,就认为其没有支持我们定义的模式。
  3. 窗口约束:约束了序列模式中每个元素中事件的发生间隔。对于一个元素{a,b,c}中的三个元素,如果窗口为0,那么他们必须以{a,b,c}的形式在事例中出现;如果窗口为2,则意味着abc三者之间只需要在事例中各自间隔2个时间单元即可算作出现。可以看出窗口约束相较默认情况是放宽了的。

但是我们也必须注意到,时序约束是施加在支持度计数过程中的,这使得不同序列的支持度计数出现变化。这种变化会威胁到我们之前所定义的先验知识,即项集元素增加则支持度一定下降。在时序约束下(最小/最大间隔约束下),序列的事件增加,不一定引起支持度下降

因此我们额外定义了邻接子序列:序列\(s\)是序列\(w=<e_1e_2...e_k>\)的子序列,当且仅当:

  1. \(s\)是由\(e_1\)\(e_2\)中删除一个事件后得到的(若删除后为空集则去除该元素)
  2. s是由至少包含两个事件的任意\(e_i\in w\)中删除一个事件后得到的(若删除后为空集则去除该元素)
  3. \(s\)\(t\)的邻接子序列,\(t\)\(w\)的邻接子序列

并基于此定义了新的先验原理:如果一个k序列是频繁的,那么它所有邻接(k-1)序列都是频繁的

posted @ 2021-07-13 19:06  neumy  阅读(159)  评论(0)    收藏  举报