一種內存索引結構-距離樹的構建及基于距離樹的相似性連接算法
【專利摘要】本發(fā)明屬于數(shù)據(jù)挖掘技術領域,具體為一種內存索引結構?距離樹構建及基于距離樹的相似性連接算法。本發(fā)明針對海量高維數(shù)據(jù)的相似性連接問題,提出了一種新型內存索引結構?距離樹?;诰嚯x樹的相似性連接算法是一種高效的分區(qū)?過濾兩階段算法:第一階段,距離樹可以根據(jù)數(shù)據(jù)的潛在分布對數(shù)據(jù)進行有效的分區(qū),同時在每個分區(qū)內部保存分區(qū)過程中產生的計算;第二階段,在每個分區(qū)內部,距離樹可以利用保存的計算剪枝精算階段大量不必要的計算。實驗證明,距離樹比已有的相似性連接算法具有更高的效率。
【專利說明】
一種內存索引結構-距離樹的構建及基于距離樹的相似性連 接算法
技術領域
[0001 ]本發(fā)明屬于數(shù)據(jù)挖掘技術領域,具體涉及海量高維數(shù)據(jù)相似性連接方法,此外,還 涉及內存索引結構的設計。
【背景技術】
[0002] 相似性連接就是在給定的數(shù)據(jù)集中,找到在相似性函數(shù)度量下,所有相似性值大 于用戶給定閾值的數(shù)據(jù)對。相似性連接問題在很多應用當中都是基本問題。隨著物理硬件 性能的不斷提高,人們能獲取的數(shù)據(jù)量越來越大,數(shù)據(jù)復雜性也越來越高。然而,在無序的 并且沒有索引的數(shù)據(jù)集上進行相似性連接的計算成本非常大?,F(xiàn)在數(shù)據(jù)規(guī)模增長的非常 快,因此在很多科學應用中,相似性連接是一個瓶頸,這將阻止它們發(fā)展到更大的規(guī)模。除 了數(shù)據(jù)量的快速增長,現(xiàn)實世界的應用中的數(shù)據(jù)模型變得越來越復雜和密集,數(shù)據(jù)維度越 來越高,也因此增大了計算的復雜性。
[0003] 目前的研究主要關注的是基于磁盤的相似性連接算法,因此在內存連接計算方面 缺乏有效性和可擴展性。暴力算法,也就是對數(shù)據(jù)集中任意兩條數(shù)據(jù)記錄進行比較,計算成 本會隨著數(shù)據(jù)個數(shù)指數(shù)性增長,問題的關鍵是暴力算法對于現(xiàn)實數(shù)據(jù)是不可行的。例如,使 用皮爾森相關系數(shù)作為度量函數(shù),對長為1000的IO 5條時間序列數(shù)據(jù)集用暴力算法計算任 意兩條序列的相似度,要花費超過2個小時的時間。在過去的二十幾年的相關研究中,實驗 證明在相似性連接過程中采用一些剪枝策略是一個可行的辦法。其中數(shù)據(jù)分區(qū)-精算是一 種典型的兩階段剪枝計算模型。然而,已有的技術T〇UCH、PBSM等主要關注于如何對數(shù)據(jù)分 區(qū)然后在各自的分區(qū)中進行進一步的精確計算。也就是說,數(shù)據(jù)分區(qū)和數(shù)據(jù)精確計算是兩 個獨立的階段。事實上,可以利用數(shù)據(jù)分區(qū)階段的計算來剪掉精算階段很多不必要的計算。
[0004] 本發(fā)明提出了一種新型索引結構,名為距離樹?;诰嚯x樹的相似性查詢連接是 兩階段內存相似性連接算法。距離樹首先根據(jù)數(shù)據(jù)的潛在分布對數(shù)據(jù)進行分區(qū),只有同一 或相鄰分區(qū)內的數(shù)據(jù)之間才有可能存在相似性。同時,在同一分區(qū)內部,距離樹通過樹結點 之間的位置信息保存了分區(qū)階段的計算。在精確計算階段,距離樹不需要對分區(qū)中所有的 數(shù)據(jù)進行兩兩比較,利用分區(qū)內部的結點之間的位置關系,只有相鄰的結點之間需要進行 比較計算,可以剪掉大量不必要的計算。
【發(fā)明內容】
[0005] 本發(fā)明的目的在于針對海量高維數(shù)據(jù)的相似性連接查詢算法的復雜性,提出一種 能夠簡化計算的相似性連接算法。其中,還包括提出一種內存索引結構-距離樹的構建方 法。
[0006] 本發(fā)明提出的相似性連接算法,是在給定的數(shù)據(jù)集中,找到在相似性函數(shù)度量下, 所有相似性值大于用戶給定閾值的數(shù)據(jù)對。本發(fā)明主要包含兩個方面:(1)設計一種新型索 引結構,名為距離樹,這種距離樹可以有效的對數(shù)據(jù)進行分區(qū),從而進行剪枝,以提高執(zhí)行 效率;(2)提出基于距離樹的相似性連接處理算法。下面分別對這兩部分進行介紹。
[0007] 1、距離樹結構和構建方法 距離樹是一種分層次的樹形結構。距離樹的示例如圖1所示,它包含兩種結點:內部結 點和葉結點。葉結點用于存儲數(shù)據(jù),內部結點用于存儲指向其子結點的指針。
[0008] 距離樹每個結點包含如下信息: (1) 結點在樹中的層次L。根結點的層次是0,根節(jié)點的子節(jié)點的層次是1,依此類推; (2) 以當前結點為根結點的記錄個數(shù)C; (3) 位置信息pos。節(jié)點N的pos取值表示結點N中的記錄和N的層次所對應的參照點的距 離與#的倍數(shù)關系。pos的計算方法如下,對于第i層的節(jié)點N,其包含的任意記錄X和參照 點rL的距離滿足如下關系:
其中,d(x,rL)表示X和的距離,t是相似度閾值。
[0009] 構建距離樹需要設置三個參數(shù)。第一個是參照點的隊列,記為
,距離樹從根結點開始每增加一層高度,需要從R中取出一 個點當作該層的中心點;第二個是葉結點能容納的記錄條數(shù)的最大數(shù)據(jù)量,記為Ψ,如果葉 結點中插入的數(shù)據(jù)個數(shù)大于等于Ψ,該葉結點需要按照某種策略分裂成多個葉結點,同時 自身會變成內部結點,只有葉結點能存儲具體數(shù)據(jù);第三個是用戶指定的相似度閾值I:。
[0010] 本發(fā)明提供的距離樹的構建方法,分為兩個階段:第一是初始化階段,第二是數(shù)據(jù) 插入階段。初始化階段,主要是計算參照點列表和初始化根節(jié)點。數(shù)據(jù)插入階段,將所有記 錄插入到距離樹中,并在此過程中構建出距離樹。下面分別對兩個階段進行敘述。
[0011] ( - )初始化階段。選取一組合適的參考點把給定的數(shù)據(jù)集劃分成幾個交互盡可能 少的分區(qū),可以減少大量的比較計算。算法使用主成分分析(PCA)算法來選取參照點,實驗 證明,PCA是一種有效的分區(qū)方法。主成分分析(Principal Component Analysis,PCA),將 多個變量通過線性變換以選出較少個數(shù)重要變量的一種多元統(tǒng)計分析方法。在很多情形 下,變量之間是有一定的相關關系的,當兩個變量之間有一定相關關系時,可以解釋為這兩 個變量反映的信息有一定的重疊。主成分分析是對于原先提出的所有變量,將重復的變量 (關系緊密的變量)刪去多余,建立盡可能少的新變量,使得這些新變量是兩兩不相關的,而 且這些新變量在反映的信息方面盡可能保持原有的信息。參照點選取好之后,開始初始化 距離樹。初始化階段只構建樹的根節(jié)點。新建樹的根結點N R,并設置層次L=0,位置pos=-l, 記錄個數(shù)C=O。
[0012] (二)數(shù)據(jù)插入階段。通過逐條插入的方式構建距離樹,插入數(shù)據(jù)的過程就是把每 條數(shù)據(jù)分發(fā)到某個葉結點的過程。插入記錄X時,從根結點NR開始訪問直到某個葉結點結 束。假設當前訪問結點為N(對于每條記錄,首先訪問根節(jié)點NR),N所在的層次為L,按如下步 驟插入數(shù)據(jù)X: (1) 如果N是一個葉結點,把X加到N中,N的C值加1,如果此時C=W,按照結點分裂策略將 N分裂; (2) 如果N是一個內部結點,計算Si兄: 芯的值pos',查找N是否存在pos取值為 pos'的子結點__,如果存在,則把^^當成當前結點,對其執(zhí)行插入步驟;如果不存 在,則創(chuàng)建一個N的子結點,設置其p0S=p0S',L的值為其父結點層次值加1,把X分配到該結 點并設置C=I。
[0013] 插入過程的一個重要步驟是結點分裂,即當任意葉節(jié)點N,其N.C=W時,則需對N進 行分裂,將其變?yōu)閮炔抗?jié)點,并增加若干個子節(jié)點。下面描述插入過程的分裂具體算法,對 于第i層需要分裂的結點N,按如下策略進行分裂:對于N中的每條數(shù)據(jù)X: (1) 計算義和:^的距離(1(1,;1^): (2) 計算滿萬
丨的值j,如果不存在的子結點就創(chuàng)建一 個位置信息P〇s=j的子結點,并把X分配到這個結點,數(shù)據(jù)個數(shù)C=I;如果存的子結 點,則直接把X分發(fā)到這個結點,C增加1。檢查獲得X的結點中數(shù)據(jù)個數(shù)C,如果£ = ψ,則 從步驟1開始對這個結點繼續(xù)進行分裂。
[0014]當N中的所有記錄添加到其子節(jié)點中以后,N節(jié)點則變?yōu)橐粋€內部節(jié)點,其pos值、C 值和L值表示不變。
[0015] 2、基于距離樹索引的相似性連接查詢算法 距離樹中所有記錄都保存在葉節(jié)點中。距離樹中的任意兩條記錄可能存在兩種位置關 系,一種是在這兩條記錄位于同一個結點,另一種是這兩條記錄位于兩個不同的結點中。根 據(jù)距離樹的定義和構建方法可知,在同一個結點內的數(shù)據(jù)相似度很大,因此需要進行兩兩 計算其距離從而判斷其是否相似。對于位于不同結點的兩條記錄,根據(jù)結點間的關系,每個 葉結點只需要和少量的幾個臨近葉結點中的數(shù)據(jù)進行精確計算。相似性連接中判斷兩個葉 節(jié)點的記錄是否需要計算相似性主要依賴于定理1。
[0016] 定理1.給定在L1層和1^層的兩個葉結點他和犯,假設L1^L2t3從根結點Nr到N 1和犯 經(jīng)過的結點的位置序列分別為{ρι,Ρ2, · . ·,pli}和{qi,q2, · · ·,qL2}。如果對于任意的i<L2, 都有Pl+2〈qi或者Pl> qi+2,則見中的任何數(shù)據(jù)和他中的任何數(shù)據(jù)之間的距離大于ε。
[0017] 證明。假設從根結點到L2層的參照點序列為{ri,r2, . . .,rL2},從Nr到Ni和N2經(jīng)過的 結點序列分別為{Npl,Np2, . . .,NpLl}和{Nql,Nq2, . . .,NqL2}。根據(jù)距咼樹的性質,可以得出在第 i層的任意結點Npi和Nqi有如下性質:
根據(jù)三角不等式,可以得出,如果P^Kq1或者Ρι>φ+1,那么
具體進行相似性連接的萬法如卜:按照先序順序依次訪問所有的葉結點。對于訪問到 的每個葉結點Ni按下面的步驟進行計算: (1) 對化內部的所有記錄兩兩計算其距離,如果滿足閾值,則輸出為結果; (2) 根據(jù)定理1,找到所有滿足相似條件的N1的臨近葉結點。把N1中的記錄和臨近結點 中的記錄進行兩兩比較。在查找化的臨近結點的時候,為了不重復計算數(shù)據(jù)對,只需要查找 先序順序在N i后面的葉結點。
[0018]算法特點分析 利用距離樹進行相似性連接和之前算法最大的不同在于,之前的方法是數(shù)據(jù)分區(qū)和相 似性計算兩階段分離。事實上,可以利用數(shù)據(jù)分區(qū)階段的計算來剪掉精算階段很多不必要 的計算。本發(fā)明基于這一思想,提出了一種新型索引結構,名為距離樹?;诰嚯x樹的相似 性連接可以在相似性計算中有效利用分區(qū)過程產生的中間結果進行剪枝。距離樹首先根據(jù) 數(shù)據(jù)的潛在分布對數(shù)據(jù)進行分區(qū),只有同一或相鄰分區(qū)內的數(shù)據(jù)之間才有可能存在相似 性。同時,在同一分區(qū)內部,距離樹通過樹結點之間的位置信息保存了分區(qū)階段的計算。在 精確計算階段,距離樹不需要對分區(qū)中所有的數(shù)據(jù)進行兩兩比較,利用分區(qū)內部的結點之 間的位置關系,只有相鄰的結點之間需要進行比較計算,可以剪掉大量不必要的計算。 [0019]實驗證明,基于距離樹的相似性連接效率明顯優(yōu)于已有算法T0UCH、PBSM等。
【附圖說明】
[0020]圖1是在某個數(shù)據(jù)集上構建的距離樹。
[0021]圖2是一個示例數(shù)據(jù)集:數(shù)據(jù)集(ρ1,ρ2,···,ρ7)和參照點r。
[0022]圖3是在圖2示例數(shù)據(jù)集上構建的距離樹。
[0023]圖4是UCI數(shù)據(jù)集上的運行時間對比。
[0024]圖5是wiki數(shù)據(jù)集上的運行時間對比。
[0025]圖6是UCI數(shù)據(jù)集上的比較次數(shù)對比。
【具體實施方式】
[0026]下面通過一個例子進一步說明本發(fā)明。圖2是一個示例數(shù)據(jù)集,包含7條記錄(Pl, P2,···,P7)。有一個參照點r,r和記錄的距離如圖2所示。相應的距離樹如圖3所示。每個葉節(jié) 點最多放兩條記錄。
[0027] 相似性連接的計算過程如下。首先處理Ni。只需計算Ni和N2包含的記錄之間的距 離,即d(Pl,P3)和d(Pl,P4)。然后處理他。先計算內部記錄之間的距離,即d(P3,P4),然后計算 N2和N3包含的記錄之間的距離,即d(P3,P6)、d(P3,P7)、d(P4,P6)和d(P4,P7)。然后處理N3,依次 類推,知道所有的葉節(jié)點處理完畢。
[0028]性能比較 采用兩個真實數(shù)據(jù)集來比較距離樹和T0UCH、PBSM兩種算法的性能。
[0029] UCI數(shù)據(jù)集。這個數(shù)據(jù)集來自機器學習倉庫。UCI包含了采集于六個不同區(qū)域的個 化學檢測平臺的18,000條時間序列數(shù)據(jù)。通過這些數(shù)據(jù)進行預處理,生成了5X IO5條1000 維的時間序列。
[0030] Wiki數(shù)據(jù)集。這個數(shù)據(jù)集是Wikimedia項目中的頁面訪問統(tǒng)計信息。它包含了從 2007年到2014年大量維基百科頁面的訪問量。把某個頁面在一個小時內的訪問量當作一個 點,選取5 X IO5個頁面1000個小時內的訪問量。
[0031] 運行時間比較顯示在圖4和圖5中,可以看出,距離樹方法明顯效率優(yōu)于TOUCH和 PBSM。
[0032]第二個實驗是比較具體的相似性計算次數(shù),結果顯示在圖6中。可以看出,距離樹 需要的計算次數(shù)明顯少于TOUCH和PBSM。
【主權項】
1. 一種索引結構-距離樹的構建方法,其特征在于,所述距離樹是一種分層次的樹形結 構,它包含兩種結點:內部結點和葉結點;葉結點用于存儲數(shù)據(jù),內部結點用于存儲指向其 子結點的指針; 距離樹每個結點包含如下信息: (1) 結點在樹中的層次L,根結點的層次是0,根節(jié)點的子節(jié)點的層次是1,依此類推; (2) W當前結點為根結點的記錄個數(shù)C; (3) 位置信息POS,節(jié)點N的POS取值表示結點N中的記錄和N的層次所對應的參照點的距 離與早的倍數(shù)關系;POS的計算方法如下,對于第i層的節(jié)點N,其包含的任意記錄X和參照點 rL的距離滿足如下關系:其中,d(x,rL)表示X和η的距離,哀是相似度闊值; 構建距離樹需要設置Ξ個參數(shù):第一個是參照點的隊列,記為換《 f玲,喊*馬,!, 距離樹從根結點開始每增加一層高度,需要從R中取出一個點當作該層的中屯、點;第二個是 葉結點能容納的記錄條數(shù)的最大數(shù)據(jù)量,記為Ψ ;第Ξ個是用戶指定的相似度闊值; 距離樹的構建分為兩個階段:初始化階段,數(shù)據(jù)插入階段: (一) 初始化階段: 選取一組合適的參考點,把給定的數(shù)據(jù)集劃分成幾個交互盡可能少的分區(qū);參照點的 選取使用主成分分析(PCA)算法,通過主成分分析算法對于原先提出的所有變量,將重復的 變量刪去多余,建立盡可能少的新變量,使得運些新變量是兩兩不相關的,而且運些新變量 在反映的信息方面盡可能保持原有的信息;參照點選取好之后,開始初始化距離樹,即只構 建樹的根節(jié)點,記新建樹的根結點Nr,并設置層次L=0,位置pos=-l,記錄個數(shù)C=0; (二) 數(shù)據(jù)插入階段: 通過逐條插入方式構建距離樹,插入數(shù)據(jù)的過程就是把每條數(shù)據(jù)分發(fā)到某個葉結點的 過程; 插入記錄X時,從根結點NR開始訪問直到某個葉結點結束,假設當前訪問結點為N,N 所在的層次為L,按如下步驟插入數(shù)據(jù)X: (1) 如果N是一個葉結點,把X加到N中,N的C值加1,如果此時C=W,按照結點分裂策略將 N分裂; (2) 如果N是一個內部結點,計算鴻3?,第Γ怒的值POS',查找N是否存在POS取值為POS' 的子如果存在,則把當成當前結點,對其執(zhí)行插入步驟;如果不存在, 則創(chuàng)建一個N的子結點,設置其POS可os',L的值為其父結點層次值加1,把X分配到該結點并 設置C=l; 所述按照結點分裂策略將N分裂,即把變?yōu)閮炔抗?jié)點,并增加若干個子節(jié)點,分裂具體 算法如下,對于第i層需要分裂的結點N,按如下策略進行分裂:對于N中的每條數(shù)據(jù)X: (^計算義和^的距離。^,^); (2)計算滿足:成喊爾I*《礙;長夢'鮮觀值j,如果不存在卿=j的子結點,就創(chuàng)建一個 位置信息P〇s=j的子結點,并把X分配到運個結點,數(shù)據(jù)個數(shù)狂=1;如果存在游S.別的子結 點,則直接把X分發(fā)到運個結點,c增加1;檢查獲得X的結點中數(shù)據(jù)個數(shù)c,如果c - '中,則 從步驟1開始對運個結點繼續(xù)進行分裂; 當N中的所有記錄添加到其子節(jié)點中W后,N節(jié)點則變?yōu)橐粋€內部節(jié)點,其POS值、C值和 L值表示不變。2.-種基于權利要求1所構建的距離樹索引結構的相似性連接算法,其特征在于:相似 性連接中判斷兩個葉節(jié)點的記錄是否需要計算相似性主要依賴于下述定理1: 給定在^層和L2層的兩個葉結點化和化,假設從根結點Nr到化和化經(jīng)過的結點 的位置序列分別為{pi,P2,...,化1}和{qi,q2,. . .,QL2},如果對于任意的i《L2,都有PiW<qi 或者Pi〉qi+2,則化中的任何數(shù)據(jù)和化中的任何數(shù)據(jù)之間的距離大于ε; 具體進行相似性連接查詢算法的步驟如下:按照先序順序列依次訪問所有的葉結點; 對于訪問到的每個葉結點Ni按下面的步驟進行計算: (1) 對Ni內部的所有記錄兩兩計算其距離,如果滿足闊值,則輸出為結果; (2) 根據(jù)定理1,找到所有滿足相似條件的Ni的臨近葉結點;把Ni中的記錄和臨近結點中 的記錄進行兩兩比較;在查找Ni的臨近結點的時候,為了不重復計算數(shù)據(jù)對,只需要查找先 序順序在Ni后面的葉結點。
【文檔編號】G06K9/62GK105843907SQ201610170691
【公開日】2016年8月10日
【申請日】2016年3月24日
【發(fā)明人】王鵬, 汪洋, 汪衛(wèi), 董明秀
【申請人】復旦大學