数据挖掘如何从挖掘事实（fact）成长为挖掘洞见（insight）？
PrefixSpan是一种数据挖掘方法，从大量偏序现象中挖掘出经常出现的偏序规律。题主说了详细解释，那么下面就开始详细解释解释。 首先放一张图，如果这张图看懂了的话，后面也可以不用看了，后面其实就是在唠唠叨叨解释这张图 以下文字极度啰嗦，但是没办法，PrefixSpan这种算法要想详细解释起来，必然是啰嗦的。 序列描述的是要素的偏序现象，其形式为： 这一序列的含义为：A→A,B→C→D,F→B。其中‘→’代表一种偏序，其中()内为无法分辨偏序顺序的要素。 假设偏序定义为“时间先后”，A,B,...等要素定义为不同类型的现象，则该序列的物理意义为： A先出现，然后A和B出现，然后C出现，然后D和F出现，最后B出现。 序列数据由大量序列组成，其形式如下所示： 如果偏序定义为时间先后，A,B,...等要素定义为不同类型的现象，则该序列数据描述的是大量现象的先后发生顺序。 频繁序列模式为序列数据中的非噪声序列。判断某序列P是否是噪声的方法为：设定一噪声阈值，若包含P的序列个数大于该阈值，则为非噪声，若小于该阈值，则为噪声。 给定序列数据 考虑序列ACB和FB，则可以发现，ACB（A→C→B）仅在第1条数据中出现： A(AB)C(DF)B FB（F→B）在所有4条数据中出现： 1. A(AB)C(DF)B 2. F(BC)B 3. (DE)(DF)B 4. F(BF)B 若设置噪声阈值为2，则ACB为噪声，FB为频繁序列模式。 序列数据中包含P的序列个数称为P的支持度（support），噪声阈值的学术称谓为最小支持度（minimum support）。其中支持度和最小支持度也可用比例表示。如最小支持度设为1%，则表示：若至少1%的序列包含P，则P为频繁序列模式。 频繁序列模式挖掘的任务是从序列数据中找出全部频繁序列模式，即全部出现次数大于噪声阈值的序列。考虑以下序列数据 若最小支持度为2，则通过遍历每一种可能的序列，可得到所有频序列繁模式为A、B、E、F、AB、FB。 然而，当序列数据包含大量要素且序列数量庞大时，遍历法的时间和空间开销巨大。因此，大量算法被设计出来以应对频繁序列模式挖掘问题，其中就有我们要介绍的PrefixSpan算法。 为什么要先讲一个例子？因为PrefixSpan中包含了迭代，一般算法中有迭代这种玩意，直接上伪代码是很难理解的，所以，干脆直接讲一个例子。 预警：这个例子讲起来极其啰嗦，我尽量写的通俗易懂。 考虑一个序列数据集DATA： 设置最小支持度为3（关于最小支持度的概念请看之前的“基本概念”），以下是PrefixSpan挖掘该序列数据的实例： 首先，PrefixSpan统计该数据中有多少个要素，以及每个要素的支持度（关于支持度的概念请看之前的“基本概念”），结果为：A：4、B：4、C：5、D：2。D的支持度小于3，因此D为噪声，同时，所有包含D的序列均为噪声，可自动将D从DATA中剔除。此时，得到3个仅包含一个元素的频繁序列模式： FP=\{A, B, C\} 在删除D后，DATA变为： 现在，针对频繁序列模式A，PrefixSpan构建其子数据，该子数据的定义为：针对DATA中的每一序列，若其不包含A，则该序列变为空，若其包含A，则找到第一个A的位置，若第一个A在()内，则将该A用符号‘_’替代，若第一个A不在()内，则删除该A。同时，序列删除A出现前的所有部分。针对DATA，A的子数据为： 这一子数据的学术称谓为A的投影，A称为前缀。投影，顾名思义就是在前缀已出现情况下的序列现象，值得一提的是，在投影中，_B和B的物理意义不同， _B：与前缀同时出现的B； B：在前缀之后出现的B。 而且，(_BC)的实际含义是：(_B、_C)，即与前缀同时出现的B和与前缀同时出现的C。意思就是投影的第三条序列应该写为“(_B _C)BC”才对，“(_BC)BC”只是简写。 得到A的投影后，PrefixSpan开始统计A的投影中，各要素的支持度，得到：A：1、B：2、_B：3、C：4、_C：1。因此在A的投影中，A、B、_C为噪声，仅剩下_B，C为非噪声。特别要强调的是，仅从A的投影看，B出现的次数为2，而_B出现的次数也为2，然而，由于在A的投影中，第一条序列包含(AB)，此处的B与A共现，又由于A是前缀，因而(AB)中的B应同时计入_B的次数。换句话说，如果前缀是A，那么投影中的(AB)应表述为(AB_B)更准确。 考虑到最小支持度为3，则在A的投影中，包含两个长度为1的频繁序列模式：_B和C。同时，原数据的频繁序列模式A由于是前缀，可进行增长，形成两个新的频繁模式，分别是(AB)和AC，即 FP:=FP\cup\{(AB), AC\}（ :=的意思是将右边的值赋予左边 ） 此时，PrefixSpan剔除A投影中的噪声，A的投影变为： 现在，PrefixSpan构造(AB)的投影，即“在A的投影中构造_B的投影”，得到 统计其各个要素所在序列的个数：C：3，因此，(AB)的投影仅包含一个长度为1的频繁序列模式即C，原数据的频繁序列模式(AB)也由此增长并形成一个新的频繁序列模式：(AB)C，即 FP:=FP\cup\{(AB)C\} 现在，PrefixSpan开始构造(AB)C的投影，即“在A投影中的_B投影下构造C的投影”，发现所生成的子数据全为空。 所以，PrefixSpan退回(AB)的投影，发现旗下仅有的频繁序列模式C已经投影过了，故而进一步退回A的投影，发现旗下的频繁模式_B和C中，_B已经投影过了。因此PrefixSpan构造AC的投影，即“在A的投影中构造C的投影”... ... 以此类推，算法不断迭代，直至增长出所有的频繁序列模式。 通过上面那个唠唠叨叨的例子，相信你已经对这个算法的流程有了直观的把握，总结起来就是： 第一步：找出序列数据中所有长度为1的频繁序列模式 第二步：针对每个长度为1的频繁序列模式，构造其投影， 第三步：将每个投影视作一序列数据，找出其中所有长度为1的频繁序列模式，同时将投影中的频繁1序列模式与前缀合并，构成新的前缀，增长频繁序列模式。 第四步：重复迭代第二步和第三步。