想象你是一位商场便衣侦探。每天打烊后,前台交给你一摞厚厚的“目击记录”——每位顾客的动线清单:几点到几楼、进了哪家店、先看什么后买什么,按时间顺序记得清清楚楚。你的任务不是揪出某个可疑人物,而是找出“人群反复上演的剧本”:比如超过六成的顾客都是先逛手机柜台、接着就去买手机壳。若把所有可能的路线组合全列出来再逐条核对,那组合的数量会膨胀到天文数字。PrefixSpan 的聪明之处,恰如老侦探的办案手法:先盯住最常见的“开场”(前缀),只抽出这样开场的记录(投影数据库),再追问“这批人接下来都去了哪儿”,顺着线索一层层追查,直到再也推不出新剧情。这就是“按顺序出现的模式”——序列模式挖掘。本文陪你一起,把 PrefixSpan 这本“侦探手册”从头读到尾。
序列模式挖掘是用户行为分析、推荐系统、点击流挖掘的核心技能之一。掌握 PrefixSpan,你就能从“发生了什么”的数据里看出“先发生什么、再发生什么”的规律,是算法工程师与数据分析师的重要加分项。
可视化演示
展示音频信号从波形到MFCC特征提取的完整流程,包括梅尔谱图热力图与MFCC系数矩阵,直观理解音频特征工程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
音频特征(MFCC/梅尔谱/时频图) 梅尔谱图:将音频FFT幅度谱通过梅尔滤波器组,对数化后得到时频热力图 MFCC提取:对梅尔谱图做DCT变换,取前N个倒谱系数作为音频特征 特征应用:MFCC广泛用于语音识别、声纹验证、音频分类等任务 MFCC = DCT(log(Mel_Filterbank(|FFT(x)|))) 梅尔谱图与MFCC是音频AI的核心特征
序列模式基础
侦探办案的第一步,是读懂目击记录的格式。在商场案卷里,每位顾客的动线是一出“剧本”:先到手机区(1),再到配件区(2),最后去收银台(3)。剧本里每一步紧挨着下一步,顺序颠倒就成了另一个故事。读懂这个格式,后面的所有推断才有地基。
这种“按顺序排列”的剧本,就是序列(Sequence)。在序列模式挖掘里,一条序列记作 s = <s1, s2, ……, sm>。而每个停留点可能同时买好几样东西,比如在同一家店同时买下充电器和数据线,这组同时出现的商品叫项集(Itemset)。商场把成千上万顾客的剧本收集起来,就得到序列数据库(Sequence Database)——也就是侦探面前那一摞案卷。
光有案卷还不够,侦探需要回答:某个剧本片段(比如“先看手机→买手机壳”)在多少份案卷里出现过?这个计数就是支持度(Support)。它是后续一切判断的基石:一个片段出现的案卷越多,越像值得深挖的“常见桥段”。
读懂了案卷格式,侦探才敢说“我看得懂顾客的故事”。同样,理解了序列、项集、序列数据库、支持度这四个基础概念,我们才有资格讨论:什么样的“桥段”值得立案侦查?下一节就来定这道门槛。
- 尖括号表示顺序外层尖括号把元素串成一条时间线,先发生写在前、后发生写在后,位置一旦交换含义就变。
- 序列元素 $s_i$$s_i$ 表示第 $i$ 个时间点的“一幕”,$i$ 越大时间越靠后,一幕一幕连起来就是一个完整故事。
- 项集之花括号花括号意味着 $s_i$ 内的商品同时发生、彼此不分先后,比如同一家店里同时买下充电器和数据线。
- 序列的长度$m$ 表示一共发生了多少幕,序列越长,行为链条越完整,深挖的价值也越大。
频繁序列定义
案卷有一百份,如果某个“桥段”只在 3 份里出现,侦探会把它丢到一边——样本太少,不足以支撑结论。办案需要一个门槛:至少多少份案卷重复出现同一桥段,才值得继续跟线。这个门槛就是最小支持度(min_sup)。
在算法里,“频繁序列”(Frequent Sequence)的定义很朴素:一条序列 s,如果它在数据库中的支持度不低于我们设定的门槛 min_sup,就称 s 为频繁序列。例如数据库一共 100 条记录,设 min_sup=10,那么“先看手机→买手机壳”只要出现在 10 条及以上的记录里就是频繁的,值得输出给商场经理。
特别要注意“顺序敏感”:序列 <1,2>(先买手机再买手机壳)和 <2,1>(先买手机壳再买手机)是两条完全不同的序列,支持度各自独立统计。这正是序列挖掘与普通关联规则(如 Apriori 的购物篮分析)的本质区别:Apriori 只关心“一起买”,PrefixSpan 关心“按这个顺序买”。
门槛一旦定下,侦探就心里有数:低于门槛的线索统统放弃,高于门槛的进入下一步深挖。min_sup 定得高,挖出的都是铁案;定得低,线索密如牛毛,后面还要花更多精力甄别。定好这道门槛,PrefixSpan 的侦查大戏才正式开场。
- 数据库遍历$d \in D$ 表示逐个检查每位顾客的完整案卷,$D$ 是所有案卷的集合。
- 子序列关系$s \preceq d$ 读作“$s$ 是 $d$ 的子序列”——$s$ 的元素要能在 $d$ 中按顺序找到,中间允许穿插其他商品。
- 支持度计数集合 $\{d \in D \mid s \preceq d\}$ 是“包含 $s$ 的案卷集合”,外层竖线表示取它的数量;同一份案卷里重复上演同一个桥段,只算一份。
- 频繁判定把支持度与门槛 $\text{min\_sup}$ 比较,够得着门槛的桥段才叫频繁序列,够不着的直接归档不查。
PrefixSpan原理
老侦探查案有一记招牌动作:先问“这个人做了什么开场”,只翻那些开场相同的案卷,再问“这批人接下来去了哪”;重复这个动作,线索就像剥洋葱一样越剥越薄,规律越来越清晰。PrefixSpan 把这套动作变成了算法,三个关键零件是:前缀(Prefix)、投影数据库(Projected Database)、模式增长(Pattern Growth)。
“前缀”就是目前已经确认的桥段,比如 <1,2>(先看手机、再买手机壳)。“投影数据库”则是对应前缀的一摞“续集”:从所有案卷中挑出包含该前缀的记录,把前缀已经匹配到的部分裁掉,只留下剩余的后缀。例如案卷 <1,2,3> 对前缀 <1,2> 投影后剩下 <3>——“看完手机和手机壳之后,这些人去了钢化膜柜台”。
接下来,算法在这个投影库里统计“哪个下一站出现得最多”:只要某个后续项 b 在投影库中的支持度达标,就把 b 接到前缀后面,形成更长的模式 <1,2,b>,再对更长前缀继续投影、继续统计……这个过程叫模式增长,不断向“剧情后面”延伸,直到投影库里再也找不到达标的下一站。一句话概括:前缀变长,库变小,模式长出来。
五个零件一组合,PrefixSpan 的“剥洋葱大法”就成型了:前缀是已经写好的剧本,投影库是待分析的续集,模式增长是往剧本里加一幕,递归是不断重演“问下一站”。老侦探嗅到规律时嘴角会微微上扬——算法收敛时,面前那张频繁序列清单,就是他的破案报告。
- 前缀 $\alpha$$\alpha$ 表示侦探已经确认的桥段模式,初始为空,越挖越长。
- 投影数据库 $D|_{\alpha}$$D|_{\alpha}$ 读作“$\alpha$ 投影库”,是所有包含 $\alpha$ 的记录裁掉 $\alpha$ 之后剩余后缀的集合,代表“还没看的部分”。
- 频繁后续项筛选$b \in \text{Freq}(D|_{\alpha})$ 表示从投影库里筛出的、出现次数达到门槛的下一站,它是模式生长的唯一原料。
- 模式拼接与递归$\alpha \oplus b$ 把 $b$ 追加到 $\alpha$ 末尾形成更长前缀,再对新投影库递归调用自身,直到筛不出新的 $b$。
算法流程
把侦探手册摊开,前缀挖掘的完整流程其实只有四步,像流水线一样环环相扣。为了便于理解,我们用一个小案卷库全程演示:4 位顾客的动线分别是 <1,2,3>、<1,2,4>、<1,3,4>、<1,2,3,4>,设定 min_sup=2。
第一步,扫描整个数据库,统计每个单独商品出现在几条记录中。本例中 1、2、3、4 分别出现了 4、3、3、3 次,都达到门槛 2,于是 <1>、<2>、<3>、<4> 全部进入候选。第二步,对每个频繁单项构建投影库:例如前缀 <1> 的投影库,存放每位顾客“看完手机之后”的续集,得到 <2,3>、<2,4>、<3,4>、<2,3,4>。
第三步,在 <1> 的投影库里继续统计:2、3、4 各出现 3 次,全部达标,于是生长出 <1,2>、<1,3>、<1,4>。第四步,对 <1,2> 再投影,得到续集 <3>、<4>、<3,4>,其中 3 与 4 各出现 2 次,继续长出 <1,2,3> 与 <1,2,4>;再往下投影,续集中没有任何商品出现 2 次以上,这条支线收工。其他前缀支线同样递归,直到所有投影库都无频项。
四步一循环:扫描→投影→生长→递归。案卷越翻越少,模式越挖越长。就像侦探不会永远翻旧档案——当投影库空无一物或所有商品都够不上门槛时,这条线索走到尽头,换一条支线继续。整本手册执行完,所有频繁序列就整整齐齐摆在桌面上。
- 包含关系检查$\alpha \preceq d$ 确保某份案卷确实上演过桥段 $\alpha$,这是进入投影库的入场券。
- 裁剪后缀把案卷中已匹配 $\alpha$ 的部分及其之前的内容全部裁掉,只保留“桥段之后”的剧情,这就是后缀。
- 集合构造外层花括号遍历所有符合条件的案卷并收集后缀,构成新的投影库 $D|_{\alpha}$。
- 递归驱动投影库随即成为下一轮“扫描计数、扩大前缀”的输入,循环往复,直到投影库中不再存在频繁项。
算法优势对比
同样是破案,警局里新来的实习生 GSP 选择“穷举法”:把所有事件可能的排列组合都写出来,形成一份超长的“剧本大全”,然后抱着它一份份核对案卷。问题是:组合数随剧情长度指数爆炸,剧本越写越多,书架先撑不住了。而老侦探 PrefixSpan 从不写候选清单,只跟着线索投影、生长。
GSP 的思路沿袭 Apriori 的“候选生成—测试”模式:先用频繁 k 项序列两两拼接,生成所有可能的 k+1 项候选序列,再扫描数据库逐一计数。每一层都可能生成天文数字的候选,内存和 IO 压力巨大。PrefixSpan 则把“生成候选”这一步直接丢掉:它只扫描当前投影库,在扫描中顺便统计频次,能长就长、不能长就停,候选和计数在同一个动作里完成。
因此两者有一个显著的工程差异:GSP 需要反复扫描原始数据库来给候选集计数;PrefixSpan 每次只面对不断缩小的投影库,原始库最多完整扫一遍。数据库越大、模式越长,这种“只扫小库”的省力优势越明显。这也是 PrefixSpan 能取代 GSP、成为序列挖掘主流算法的根本原因。
实习生 GSP 思路直白,但案卷一多就露怯;老侦探 PrefixSpan 不搞花活,一步一个投影,换来的是稳定收缩的搜索空间。实战中数据集稍微大一点,胜负立判——这也解释了为什么“跟随线索投影”能成为行业主流。
- 候选规模$\lvert C_{k+1} \rvert$ 是 GSP 第 $k+1$ 层候选序列的数量,$\lvert L_k \rvert^2$ 表示它可能随频繁序列数量呈平方级膨胀。
- 逐层拼接$k$ 每增加 1,候选要由上一层频繁序列两两拼接产生,越拼越多,组合爆炸由此而来。
- 投影库缩小$\lvert D|_{\alpha \oplus b} \rvert \leq \lvert D|_{\alpha} \rvert$ 说明新前缀对应的案卷数至多等于旧前缀,通常还会减少,搜索空间只减不增。
- 一涨一缩左边候选越生越多,右边库越投越小,两种策略的空间开销走势截然相反,这正是内存效率差距的根源。
应用与实战
侦探的报告最终要交给商场经理、网站运营去创造价值。PrefixSpan 最大的用武之地,就是“带顺序的行为数据”:电商后台里每位用户“浏览→加购→下单→复购”的动作,网站日志里“首页→搜索→详情→结算”的点击流,都是天然的序列数据库。
典型的成功案例是购物序列推荐。传统协同过滤只看“购物篮共现”——同一笔订单里同时出现的东西;而 PrefixSpan 能发现 <手机→手机壳> 这种跨订单的有序规律:用户先买了手机,下一次可能买手机壳。于是在用户刚下单手机的那一刻,系统立刻推送手机壳,转化率远高于事后推荐。同理,点击流挖掘可以用 <搜索→商品页→30 秒停留> 这类模式,找出高意向用户或优化页面跳转。
实战中最重要的旋钮是 min_sup(最小支持度)。它像侦探的立案标准:定得太高,只能挖出“人人都知道”的粗规律,比如 <进店→结账>;定得太低,频繁序列成千上万,噪音丛生、计算量暴涨。一般建议先用较高的阈值跑一轮,观察输出数量,再逐步下调,找到“既有新意、又不过量”的甜点区间;长度约束(只挖长度 2~5 的模式)也常被用来过滤长尾。
把侦探手册合上,你会发现 PrefixSpan 说到底就是一连串朴素的动作:定门槛、找开场、投影、生长、递归、输出。它没有深奥的数学魔法,却因为“抓住顺序、避免穷举”这两个优点,成为行为数据挖掘中最趁手的工具之一。下次你看到系统精准捕捉“用户先做 A、再做 B、最后 C”的规律时,不妨会心一笑:这是老侦探 PrefixSpan 又在翻案卷了。
- 模式数量反比$N \propto 1 / \text{min\_sup}$ 说明门槛越低,能通过审查的频繁序列越多,二者近似反比关系。
- 成本来源$\sum_{\alpha} \lvert D|_{\alpha} \rvert$ 把每一层投影库的规模全部加总,算法的总开销就由这个总和主导。
- 阈值联动$\text{min\_sup}$ 下调会让更多前缀达标,投影库数量变多、缩减速度变慢,总和随之上升。
- 调参的本质整条链说明“调阈值等于在模式数量与计算开销之间做交易”,高质量的挖掘结果没有免费的午餐。
AI 应用场景
电商购物序列推荐
阶段:用户行为挖掘 / 召回与特征生成
解决的问题:传统协同过滤与购物篮分析只把“同一订单里同时出现的商品”当作关联,忽略了时间先后。用户上个月买了手机、这周才买手机壳,两者不在同一订单里,传统方法根本发现不了。PrefixSpan 把每个用户的全部订单按时间拼成序列数据库,递归投影后发现 <手机→手机壳> 是高频路径,于是算法在用户刚下单手机的那一刻,就把手机壳放进“猜你喜欢”的召回池。
具体案例:某 3C 电商平台对 300 万用户的历史订单做序列投影挖掘,min_sup=1%,发现“手机→手机壳”“手机→耳机→充电宝”等 80 余条强路径;上线个性化推送后,配件类点击率提升 32%,下单率提升 18%。
网站点击流行为分析
阶段:行为建模 / 产品运营优化
解决的问题:网站每天产生千万级点击日志,运营团队难以人工归纳用户真实浏览路径。传统统计只能给出“页面访问量排名”,看不出“先访问 A、再访问 B、最后下单”的动态过程。PrefixSpan 把每条会话日志整理成“页面序列”,挖掘出 <首页→搜索→详情页→加入购物车> 等高频行为路径,从而精准定位流失环节。
具体案例:某在线教育网站用 PrefixSpan 分析学习会话,发现高频路径 <课程列表→试听页→支付页>,但“试听页→支付页”之间存在严重转化断层;运营据此在试听页末尾增加限时优惠组件,支付转化率提升 21%。
学习路径个性化推荐
阶段:序列特征生成 / 个性化推荐
解决的问题:在线学习平台上,不同用户的学习顺序千差万别,一刀切的“课程表”导致完课率低。PrefixSpan 从海量学习记录中挖掘“高完课率用户”的共性序列,例如 <基础语法→句式训练→写作实战>,再把新用户当前学过的内容当作前缀,向投影库中“接下来最常出现”的知识点做推荐。
具体案例:某语言学习 App 对完课用户日志做 PrefixSpan 挖掘,得到 12 条高频学习路径并以此重构推荐顺序;实验组完课率比对照组提升 27%,用户 7 日留存提升 9%。
Python 演示
def build_projection(pairs, item): """在后缀库中寻找 item,取其后的部分作为新的投影库""" projected = [] for sid, seq in pairs: idx = seq.index(item) if item in seq else -1 if idx != -1: projected.append((sid, seq[idx + 1:])) return projected def count_frequent_items(pairs, min_sup): """统计当前投影库中单个商品的支持度,返回达到 min_sup 的项""" counter = {} for _, seq in pairs: for item in set(seq): # 每条序列对同一商品只计一次 counter[item] = counter.get(item, 0) + 1 return sorted(item for item, cnt in counter.items() if cnt >= min_sup) def prefixspan(sequences, min_sup): """挖掘所有频繁序列模式,返回频繁序列列表""" results = [] pairs = list(enumerate(sequences)) def grow(prefix, pairs): for item in count_frequent_items(pairs, min_sup): new_pattern = prefix + [item] results.append(new_pattern) grow(new_pattern, build_projection(pairs, item)) grow([], pairs) return results if __name__ == "__main__": db = [ [1, 2, 3], # 顾客1:手机 -> 手机壳 -> 钢化膜 [1, 2, 4], # 顾客2:手机 -> 手机壳 -> 耳机 [1, 3, 4], # 顾客3:手机 -> 钢化膜 -> 耳机 [1, 2, 3, 4], # 顾客4:手机 -> 手机壳 -> 钢化膜 -> 耳机 ] patterns = prefixspan(db, min_sup=2) for p in patterns: print(" -> ".join(str(x) for x in p)) print("共发现 %d 个频繁序列模式" % len(patterns))
pairs = list(enumerate(sequences))给每条记录编上序号,组成 (编号,序列) 对,作为最初始的“投影库”for item in set(seq):用集合去重,保证同一条记录对同一商品只贡献一次支持度return sorted(item for item, cnt in counter.items() if cnt >= min_sup)过滤并排序,得到本层能长到前缀后面的候选项new_pattern = prefix + [item]模式增长:把达标的“下一站”接到当前前缀后面idx = seq.index(item) if item in seq else -1在每条后缀里找刚追加的商品,找不到就淘汰这条记录projected.append((sid, seq[idx + 1:]))投影:只保留匹配点之后的尾巴,构成下一层投影库grow(new_pattern, build_projection(pairs, item))递归核心:带着新前缀和新投影库继续深挖
常见误区
误区我以为 PrefixSpan 的前缀只能是每条序列开头的商品。比如 <1,2> 要求第 1 个商品必须是 1,否则这条记录直接淘汰,我看代码里经常从头扫描,所以更是这么想的。
正解前缀(模式)其实可以匹配序列中的任意位置。算法只要求“模式能作为该序列的子序列按顺序出现”,比如序列 <3,1,2> 包含 <1,2>,序列 <4,1,5,2> 也包含 <1,2>。匹配点在哪儿并不影响前缀定义,关键是“出现过,且把匹配之后的后缀留下来继续投影”。这就像侦探翻案卷时,不要求桥段从第一行开始,只要这段剧情在案卷里出现过,就把它之后的剧情抽出来继续读。
为何常见:日常语言里“前缀”给人的第一联想是“开头的部分”,于是初学者容易把“前缀”误解为必须对齐序列开头。
误区我以为 PrefixSpan 是 Apriori 的顺序版,也得先拼出所有候选 <1,2>、<1,3> 等等,再去数据库里数次数,只是拼法换成了按顺序拼。
正解PrefixSpan 属于模式增长(Pattern-Growth)家族,核心动作是“投影 + 计数一步到位”:扫描投影库时顺便统计频次,频次达标的项直接拼到前缀上,根本没有独立的候选生成阶段。相比之下,GSP 才会用拼接与剪枝逐层造候选。打个比方:GSP 是先把所有可能的桥段写成剧本大全,再拿去对卷;PrefixSpan 是边读案卷边问“下一个人去哪”,答案在路上直接冒出来。
为何常见:很多教材从 Apriori 讲起,读者形成“先候选后测试”的思维惯性,容易把新算法往旧框架里套。
误区如果一条顾客记录里出现了两次 <A,B>,我以为支持度就该再加一次,重复出现说明这个模式更强烈、更值得关注。
正解序列模式的支持度按“序列”计数,而不是按“出现次数”计数:一条序列只要包含该模式一次,就贡献 1 个支持度,重复出现也只算 1。这是为了模式语义的一致——我们关心“有多少条行为路径包含这个桥段”,而不是“这个桥段被演了多少遍”。就像侦探统计“多少份案卷提到这家店”,同一份案卷提三次也只算一份。
为何常见:关联规则里项集支持度同样按事务计数,但项集在一条事务里至多出现一次,没有“重复”问题;而序列可以在一条记录里重复,初学者容易凭直觉把次数直接相加。
误区我以为门槛越高越严格,挖出的频繁序列应该更多、质量更高,所以调参时第一反应就是拼命调大 min_sup。
正解恰恰相反,min_sup 是“最低出场次数”,门槛越高,能达标的模式越少;门槛越低,达标的模式越多、计算开销越大。调参时如果输出模式少得可怜,应该降低 min_sup;如果输出淹没在海量琐碎模式里,则提高 min_sup。高质量不等于“数量多”,而是“数量与业务价值匹配”。
为何常见:“更严格 = 更多”是常见的直觉颠倒。把 min_sup 想成运动会参赛及格线就一目了然:及格线越高,能参赛的人越少。
面试题
Q1. PrefixSpan 挖掘序列模式的核心理念是什么?
- A.用前缀递归投影数据库逐项扩展← 正确答案
- B.生成全部可能的候选序列再逐一筛选
- C.将序列转成向量后做 K 均值聚类
- D.对每条序列随机抽片段重复统计
答案:A。PrefixSpan 不生成候选集,而是从空前缀出发,递归构造投影数据库、统计其中频繁项、把频繁项拼到前缀上形成更长的模式。A 正是这个描述;B 是 GSP/Apriori 的做法,C 是聚类任务,D 是随机采样,都不属于前缀挖掘的核心理念。
Q2. 序列 <手机,手机壳> 与 <手机壳,手机> 在序列挖掘中被视为?
- A.完全相同的序列模式
- B.两个不同的序列模式← 正确答案
- C.无法比较的两种模式
- D.只有前者是有价值模式
答案:B。序列模式天然对顺序敏感。<手机,手机壳> 表示先买手机再买壳,<手机壳,手机> 表示先买壳再看手机,这是两条不同的行为路径,支持度也各自独立统计。就像侦探眼中“先抢银行再逃跑”和“先逃跑再抢银行”绝不是同一个故事,所以选 B。
Q3. 某模式只在 8 条序列中出现,数据库共 100 条序列,min_sup=10%,该模式是否频繁?
- A.不频繁,因为 8 小于最小支持度 10← 正确答案
- B.频繁,因为出现次数为正数
- C.频繁,因为 8% 小于 10% 更严格
- D.无法判断,缺少序列长度信息
答案:A。min_sup=10% 折算为 100×10%=10 条,该模式只出现 8 次,8 < 10,未达门槛,因而不频繁。把门槛想成运动会及格线:及格线要求 10 人达标,只有 8 人当然不能进场。C 的说法自相矛盾,D 中序列长度与是否频繁无关。
Q4. PrefixSpan 中“投影数据库”指的是什么?
- A.包含前缀的序列去掉前缀后留下的后缀← 正确答案
- B.全部序列按长度排序后的副本
- C.只含频繁单项的序列子集
- D.随机抽样得到的序列子集
答案:A。投影数据库 = 所有包含前缀的记录,在前缀匹配处裁掉已匹配部分后剩余的后缀集合,它是下一轮统计“下一站”的案卷堆。B 是排序操作,C 缩小范围但仍保留完整序列,D 是采样,三者都与“裁剪后缀”的投影概念无关。
Q5. 相比 GSP,PrefixSpan 的主要优势是什么?
- A.无需逐层生成海量候选序列← 正确答案
- B.对每条序列做加密压缩存储
- C.直接用 GPU 加速全部运算
- D.能挖掘无顺序的频繁项集
答案:A。GSP 需要逐层用频繁序列拼接出海量候选再扫库验证;PrefixSpan 采用模式增长,扫描投影库时顺带计数,合格项直接拼接,没有独立候选生成阶段,因而内存占用小、扫描量少。B、C 并非其固有优势,D 是项集挖掘而非序列挖掘。
Q6. 递归扩展前缀时,候选项必须满足什么条件?
- A.在投影库中支持度不低于最小支持度← 正确答案
- B.在原始库中出现的总频次排名最高
- C.必须在每条序列的第一个位置出现
- D.必须与当前前缀拥有相同长度
答案:A。递归扩展时,候选“下一站”必须在当前投影库中的出现次数 ≥ min_sup,且每条序列只计一次。B 看的是原始库全局频次而非投影库,C 要求首位出现过于苛刻,D 的长度要求没有意义。记住:前缀多长没关系,关键是它在投影库里够不够频繁。
Q7. 同一顾客的一条记录里两次出现 <A,B>,支持度计数时应该?
- A.计数加二,因为出现两次
- B.计数加一,因为按序列计数← 正确答案
- C.不计数,防止重复数据干扰
- D.计数由数据库总行数决定
答案:B。序列模式支持度按“序列条数”计数,同一条记录里重复出现也只算 1,保证支持度的语义是“有多少条行为路径包含该桥段”,而不是“桥段被演了多少遍”。所以选 B 加一而不是 A 加二。
Q8. 以下哪些属于 PrefixSpan 的典型应用场景?
- A.电商用户购物路径序列分析← 正确答案
- B.网站点击流行为模式挖掘← 正确答案
- C.基因序列中的基序发现← 正确答案
- D.图像风格迁移效果对比
答案:ABC。序列模式擅长发现“带顺序的重复行为”:购物路径、点击流、基因基序都是天然的序列数据,因此 A、B、C 都是典型应用;D 图像风格迁移属于计算机视觉任务,与序列挖掘无关。
Q9. 关于最小支持度 min_sup 的影响,正确的说法有?
- A.阈值越小挖掘出的模式越多← 正确答案
- B.阈值越大挖掘出的模式越少← 正确答案
- C.阈值越小递归计算开销越大← 正确答案
- D.阈值越大结果一定越准确
答案:ABC。min_sup 是“最低出场次数”。阈值越低,达标模式越多,递归产生的投影库越多、计算开销越大;阈值越高,模式越少。D 的“更准确”是误解:阈值高低只改变模式的多少与泛化度,并不直接等于准确,所以排除 D。
Q10. 设前缀 α 的投影库包含两条后缀 [2,3,4] 与 [2,4,5],min_sup=2。以下说法正确的有?
- A.项 2 在原始数据库中的支持度一定为 2
- B.模式 α⊕2 可继续扩展出 α⊕2⊕4← 正确答案
- C.模式 α⊕4 在投影库中的支持度为 1
- D.项 3 与项 5 都不能作为下一层候选← 正确答案
答案:BD。投影库中 2 与 4 各出现两次达到门槛,因此 α⊕2、α⊕4 都可作为下一层候选,其中 α⊕2 之后 4 仍出现两次,故能继续扩展出 α⊕2⊕4,B 正确。3 与 5 只出现一次、不够资格,D 正确。C 错在 α⊕4 的支持度为 2 而非 1;A 错在原始库支持度可能大于 2,因为投影库之外还有不含 α 的序列。