這是一篇我比較推崇的文章.06年獲得KDD的best paper runner up。近年來數據挖掘在理論上突破很少,這可以算一篇。長久以來,數據挖掘一直關注方法,很少有研究數據集潛在本質的,如何從數據集表現形式去挖掘數據之間更深刻的聯繫,這篇論文最大亮點就是提出了一種度量數據挖掘方法(尤其是無監督的的方法)在數據集上效果的新思路。
這篇文章隨機交換的思想非常簡單,除了第四章有難度,其他章節都十分容易看懂。另外此文書寫和內容組織也非常值得借鑑。這篇文章我爭取翻譯出精華部分,第四章論證部分本人看不懂沒法做..第五章是實驗我也就懶得翻了;本人翻譯水平實在不好,在此還是推薦大家直接閱讀原文!
介紹
數據挖掘中一個重要的研究議題是確定發現的模式或模型是否顯著。雖然傳統統計方法已經早已用以進行顯著性檢驗,但是在數據挖掘領域這一方法卻沒有得到足夠的重視。在本文中提出採用隨機交換來檢驗在0-1數據集上的數據挖掘結果。隨機交換的基本思想是:給定一個數據集D,隨機生成一批行間距(row margin)以及列間距(column margin)相同的數據集。在這些隨機數據集上進行挖掘,看挖掘結果是否顯著不同於在原數據集上的挖掘結果。如果不是,我們可以假設挖掘結果只是由於行間距及列間距的原因,而不是數據集中的有趣結構。
產生這樣的數據集是通過交換完成的:對兩行u,v和兩列,A,B滿足uA=vB=1和uB=vA=0,改變行使得uB=vA=1和uA=vB=0.如圖所示
爲何要保持行間距列間距一致
用一個簡單的例子說明,給定兩個0-1數據集D1和D2如圖2.5。若使用chi、皮爾遜相關係數考察兩個數據集中項X與項Y的相關性會得到相同的結果。這是由於這些相關性檢驗方法的只考慮到項X和項Y的列(column)屬性,因此所有的相關性檢驗的結果都一致。然而我們看到在D1中項X與項Y共同出現在差異較大的行(row)裏,而在D2中項X與項Y出現在元素密集的行裏,那麼我們會猜測D2中的X與Y的關係並不是由於本身存在有趣的聯繫,而僅僅是因爲它們同時出現在項比較密集的行中。
兩個0-1數據集A B,項X與項Y的聯繫可能是由於整個數據集的作用
假設項X與項Y是兩種超市購物籃數據中的商品,X與Y在D2數據集表現出的聯繫是由於許多客戶買了幾乎所有的商品,而非X與Y商品即存在的內在關聯。爲了驗證假設,文獻分別構造了擁有10倍D1和D2行數的數據集A,B,顯然項X與項Y共現的次數都是60。然後分別生成了1000個隨機數據集,在A的隨機數據集中,項X與項Y共同次數最大和平均分別爲59和52.4;而B的隨機數據集中,這兩個值分別是69和63.2。那麼可以肯定:項X與項Y在A中共現次數更多、項X與項Y的關係存在隱含的聯繫;而B中項X與項Y的聯繫少於預期,它們之間的聯繫可能被高估了。
行列間距列間距往往隱含了很多數據集上的潛在熟悉,例如在一個以布爾向量表示的文本數據集:行表示文本,列表示詞;0代表一個詞不在一個文本里出現,1代表出現;行間距代表一個文本里存在的不同的詞,列間距代表一個詞在文集裏使用程度。又度量複雜網絡特性的度分佈邊分佈等。因此隨機數據集保證行間距列間距固定可以看出數據之間的聯繫是否只由行列間距決定。
方法的概述
使D表示一個含有m行n列的0-1數據集,行代表樣本,列代表項,0和1分別表示項是否出現在樣本中。
我們希望檢驗一個數據挖掘算法A在D上的結果,令A(D)表示這一結果,爲了簡單期間,A(D)可以是一個數值,比如頻繁模式挖掘中頻繁集數量、聚類任務中的聚類錯誤等等。
在隨機交換過程中,產生k個數據集D1, D2…Dk,每個Dt,t=1,2…k也是含m行n列的0-1數據集,算法A在每個數據集上的結果爲Xt=A(Dt),算法顯著性可以通過比較A(D)和X={X1,X2…Xk}。
許多方法可以用來檢驗A(D)顯著性。比如p-value
或Z-score
隨機交換的侷限
我們相信比較原數據集與隨機交換的數據集是一種不錯的檢驗數據挖掘算法的方法。然而何爲“有趣”模式並沒有統一明確的定義、並且也相當主觀,因此不能指望隨機交換可以檢驗出所有的“有趣”模式是否真如此。實際上隨機交換的也很明確:檢驗發現的模式“有趣性”是否直接又行列分佈所影響。其他“有趣性”並不被這種方法所包含。另外隨機交換只能在二元數據集上進行,而數值屬性的數據集上並不適用,另外也不清楚如何對類別屬性如何進行隨機交換。
算法
樸素的方法(algorimth 1):
每次在圖中找到一對可交換的邊(algorithm 2),進行交換
輸入:圖GD,隨機交換步數k
輸出:具有行列間距一致的新圖GD
第三行用到了算法2
樸素的方法並不能產生均勻分佈的抽樣,要達到這點可以採用self loop或Metropolis-Hastings方法
Self loop方法:
Metropolis-Hastings方法:
可以看到Self loop方法只是在每次尋找可交換的邊時也進行了k的統計,
Metropolis-Hastings方法是在每次找到可交換邊後,以 min{1,d(G)/d(G')}概率進行交換。
在實際中self_loop更簡單也更快速,Metropolis-Hastings需要計算d(G)/d(G')
關於算法證明和實驗大家還是自己看原文比較好,
翻譯得不好請勿見怪~