
算法介紹
以時(shí)間順序挖掘周期性的模式(即周期性分析)是一種重要的數(shù)據(jù)挖掘方式,在以前的研究中我們假設(shè)每個(gè)時(shí)間點(diǎn)只發(fā)生一個(gè)事件,然而在這篇文章中我們研究一種更普遍的模式:即在每個(gè)時(shí)間點(diǎn)可以發(fā)生多個(gè)事件。
在這個(gè)算法中我們需要自己設(shè)置三個(gè)參數(shù):min_rep, max_dis, global_rep。分別代表“一個(gè)有效序列的最小重復(fù)次數(shù)”、“相鄰有效序列最大允許擾動(dòng)”、“有效序列總的要求重復(fù)次數(shù)”。其實(shí)在算法最后中我們會發(fā)現(xiàn),我們也可以設(shè)置另外一個(gè)參數(shù)Lmaxn,即允許的最大周期。
最后,這個(gè)算法原作者似乎認(rèn)為效果不錯(cuò),->.->
問題定義
在這個(gè)部分中,我們定義一些異步周期挖掘的問題。
E代表所有事件的集合,即一個(gè)事件的集合一定是E的一個(gè)非空子集。信息庫D是一系列的時(shí)間記錄,每一個(gè)記錄用一個(gè)數(shù)組來表示(tid, X),表示在tid時(shí)刻發(fā)生了集合X中的事件。同時(shí)D的這種表示方法我們定義為水平表達(dá)格式(horizontal format),具體請看下表。同時(shí)對于另一個(gè)事件集合Y,我們定義Y是被一個(gè)時(shí)間記錄所支持需滿足:Y?X。一個(gè)有k個(gè)事件的序列一般稱為k-事件序列(k-event set)。
Time | Event Set | Time | Event Set | Time | Event Set |
---|---|---|---|---|---|
1 | A, B, C | 7 | A, B, C, D | 13 | A, C, D |
2 | B, D | 8 | A | 14 | A, C |
3 | A, C, D | 9 | A, C, D | 15 | A, D |
4 | B | 10 | A, C | 16 | A, C, D |
5 | A, C | 11 | D | 17 | A |
6 | D | 12 | A, B, C, D | 18 | A, B, C, D |
定義 1:一個(gè)以l為周期的模式是一個(gè)非空序列P=(p1,p2,…,pl),其中p1是一個(gè)事件序列,其他的或者是一個(gè)事件序列,或者是*,即可以理解為任何序列。
一個(gè)模式P若包含i個(gè)事件則被稱作i-模式(i-pattern)。特別的,我們稱1-模式為單模式(singular patterns),當(dāng)i>1時(shí)我們稱之為復(fù)雜模式(complax patterns),例如(A, *, *)是一個(gè)單模式而(A, B, *)是一個(gè)2-模式,也稱為復(fù)雜模式。如果一個(gè)模式不包含任何“*”我們就稱之為滿模式(full pattern),否則就稱之為部分模式(partial pattern)。
定義 2:設(shè)有周期為了的模式P=(p1,p2,…,pl)和一個(gè)包含l個(gè)事件的集合D’=(d1,d2,…,dl),我們定義P匹配D’當(dāng)且僅當(dāng)對于每個(gè)j(1<=j<=l),或者pj=*,或者pj?dj。D’也可以稱為P的一個(gè)匹配項(xiàng)。
比如現(xiàn)在有一個(gè)模式P=(A, B, *),那么*顯然可以和任何事件序列匹配,于是如果我們有D=(A, B, C)就是一個(gè)P的一個(gè)匹配項(xiàng)。
定義 3:為了方便,我們用一個(gè)4元組(P, l, rep, pos)來定義一個(gè)模式片段P,它的周期l,開始位置是pos,并重復(fù)rep次,一般我們假設(shè)這個(gè)rep要取最大值(maximum segment)。
定義 4:一個(gè)最大片段(maximum segment)是一個(gè)有效片段當(dāng)且僅當(dāng)其重復(fù)次數(shù)不小于參數(shù)min_rep。
我們再定義一下擾動(dòng)的概念:連個(gè)片段的擾動(dòng)就是第一個(gè)片段的尾部和第二個(gè)片段的開始的位置之間的距離。例如在下圖中,S1和S3之間的擾動(dòng)是8(15 – 3)。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
A | C | B | A | E | D | A | A | B | C | A | B | C | A | A | D | A | A | B | C | A | E | C |
D1 | D1 | D1 | D2 | D2 | D2 | D3 | D3 | D3 |
|
|
|
|
|
D8 | D8 | D8 | D9 | D9 | D9 | D10 | D10 | D10 |
S1 | S1 | S1 | S1 | S1 | S1 | S1 | S1 | S1 |
|
|
|
|
|
S3 | S3 | S3 | S3 | S3 | S3 | S3 | S3 | S3 |
定義 5:假設(shè)一個(gè)時(shí)間的數(shù)據(jù)庫D和一個(gè)模式P,序列D是一系列不重合的有效序列,并且其中任意相鄰片段的擾動(dòng)小于一個(gè)預(yù)定的值,我們稱之為最大擾動(dòng)max_dis。一個(gè)序列被稱作是有效的當(dāng)且僅當(dāng)P的全部的重合的次數(shù)大于一個(gè)預(yù)定的參數(shù)global_rep。
對于Fig.1b,如果我們設(shè)min_rep = 2, global_rep = 6, max_dis = 8,那么我們將會得到兩個(gè)有效序列(S1, S2),和(S1, S3)。而我們的任務(wù)找到所有有效的周期序列,其周期在1~Lmax之間,其中Lmax由用戶給定。
算法預(yù)覽
在這個(gè)模塊中,我們從挖掘單模式的周期序列到復(fù)雜模式周期序列,展示一下在時(shí)間數(shù)據(jù)庫中異步周期序列挖掘的過程。首先一個(gè)稱為“SPMiner”被用來找所有的單模式周期序列,它的原理主要是潛在循環(huán)試探(Potential Cycle Detection)和基于哈希的表(Hash-Based Validation)。然后,兩個(gè)算法“MPMiner”和“CPMiner”被用來尋找有效的多重單模式(multievent 1-patterns)和復(fù)雜模式序列(complex patterns)。最后,所有的有效片段都可以組合在一起來檢測是否滿足要求,即最后的”APMiner”。詳細(xì)見下圖:
現(xiàn)在我們分步驟來講解每一步的具體方法及部分偽代碼
SPMiner:Segment Mining for Single Event Pattern
首先,我們在前面提過一種叫做水平數(shù)據(jù)格式(horizontal database layout)的數(shù)據(jù)結(jié)構(gòu),現(xiàn)在我們要使用一種和其相對應(yīng)的垂直數(shù)據(jù)格式(vertical database format),具體請見下表,它可以大大提高我們的搜索效率。
Event | TimeList |
---|---|
A | 1, 3, 5, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18 |
B | 1, 2, 4, 7, 12, 18 |
C | 1, 3, 5, 7, 9, 10, 12, 13, 14, 16, 18 |
D | 2, 3, 6, 7, 9, 11, 12, 13, 15, 16, 18 |
PCD算法(Potential Cycle Detection)測探所有在1~Lmax之間的可能周期,具體看偽代碼。
HBV算法(Hash-Based Validation)可以對于每個(gè)潛在的周期p和一個(gè)事件列表e,通過遍歷一遍事件表來找出所有的單模式序列。具體看偽代碼。
Procedure of SPMiner(D, Lmax)
for each event Ei ∈ VD do:
PCD(Ei, TimeList);
for p = 1 to Lmax do
if(CheckSet[p] >= min_rep)
then HBV(Ei, Ei.TimeList, p);
Procedure of PCD(TimeList)
for i = 1 to i <= Lmax do CheckSet[i] = 1;
for each time instant Ti ∈ TimeList do
for each time instant Tj ∈ TimeList, i < j do
if((Tj - Ti) <= Lmax) then
CheckSet[Tj - Ti]++;
else break;
Procedure of HBV(EvtSet, TimeList, p)
Allocate data structure Cseg[p];
for i = 0 to p - 1 do /* Initilization */
Cseg[i].last = -Max; Cseg[i].rep = 1;
/* Validation */
for each time instant Ti ∈ TimeList do
pos = Ti % p;
if(Ti - Cseg[pos].last == p) then
Cseg[pos].rep++; Cseg[pos].last = Ti; continue;
if(Cseg[pos].rep >= min_rep) then
Output(EvtSet, p, Cseg[pos].rep, Cseg[pos].last - p * (Cseg[pos].rep - 1));
Cseg[pos].rep = 1; Cseg[pos].last = Ti;
for i = 0 to p - 1 do /* Rechecking */
if(Cseg[i].rep >= min_rep) then
Output(EvtSet, p, Cseg[i].rep, Cseg[i].last - p * (Cseg[i].rep - 1));
最后我們會得到如下的結(jié)果
Pattern | Period | Rep | Start |
---|---|---|---|
A | 1 | 7 | 12 |
A | 2 | 5 | 1 |
A | 2 | 6 | 8 |
C | 2 | 5 | 1 |
C | 2 | 5 | 10 |
D | 2 | 5 | 7 |
D | 3 | 6 | 3 |
這里我們直接介紹推薦的SBE算法(Segment-Based Enumeration)。
SBE算法的思路是,對于一個(gè)周期p,先在上表中找到周期為p的項(xiàng)。我們假設(shè)一個(gè)變量off = start % p,這樣我們在此步找到的組合內(nèi)部off則一定相同。如果最后重合部分還大于參數(shù)min_rep,那么我們就成功的找到了一組答案了。而對于重合的部分,我們也可以根據(jù)上表在O(1)的時(shí)間內(nèi)計(jì)算出來。
這一步的做法和上一步的SBE算法十分相似。
不過在上一步中我們要求off相同才能放在一組,而在這一步中我們要求off必須不同才能在一組,偽代碼如下
Procedure of CPMiner(p, SegListp, w.r.t period p)
for each segment Si ∈ SegListp; do
Node.Head = Si;
Node.Tail = all segment Sj ∈ SegList with j > i;
Node.start = Si.start;
Node.end = Si.start + (Si.rep - 1) * p;
CP(Node, p);
Subprocedure of CP_DFS(Node, p)
if(|Node.Head| == p) then return ;
for each segment Si ∈ Node.Tail do
Valid = True;
for each setment Sj ∈ Node.Head do
if((Si.start - Sj.start) % p == 0) then
Valid = false; break;
if(Valid == false) then continue;
newC.start = Si.start;
newC.end = Min{Node.end, Si.start + (Si.rep - 1) * p}; //take care
rep = ?(newC.end - newC.start) / p? + 1; //take care
if(rep >= min_rep)
newC.Head = Node.Head ∪ Si;
newC.Tail = all Sk ∈ Node.Tail with k > i;
PatternOutput(newC, p, rep)
CP_DFS(newC, p);
else if(Node.end - Node.start + 1 < p * min_rep) break;
Subprocedure of PatternOutput(Node, p, rep)
Shift = Node.end % p //take care not Node.start!
for i = 1 to p do Pattern[i] = *;
for each segment Si ∈ Node.Head do
Pattern[(Si.start - Shift) % p] = Si.EvtSet;
Output(Pattern, rep, p, Node.end - (rep - 1) * p);
就像我們在定義5中說的那樣,一個(gè)異步周期模式被定義為有一組序列互不重合。因此我們還需使用深度優(yōu)先搜索來枚舉所有的組合方式?,F(xiàn)在假設(shè)我們把所有的片段按照開始的時(shí)間排序,一個(gè)單模式的片段如果重復(fù)次數(shù)大于global_rep,那么它本身就是一個(gè)合法答案,但是每次枚舉過程中,我們總要盡力的把新的事件加入到已有的事件序列中。同時(shí),如果新的片段距離的開始位置距離已有片段的距離小于max_dis,那么我們也可以把它加入進(jìn)去。但是一旦上述條件不符合的話,我們就可以跳出搜索了,因?yàn)槲覀兪前凑臻_始的時(shí)間順序有小到大排序的,這樣可以達(dá)到剪枝的效果。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營問題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10