第一篇:我的讀書筆記(一):數(shù)據(jù)信息中的相似度計算算法
我的讀書筆記
(一):數(shù)據(jù)信息中的相似度計算算法
無意中發(fā)現(xiàn)這本貌似不錯的書 Mining of Massive Datasets,隨便記一下學到的東西。因為對數(shù)據(jù)挖掘沒什么研究,理解肯定很膚淺,請過往大牛指教。下面內(nèi)容來自此書第三章的前面部分。
在數(shù)據(jù)挖掘中經(jīng)常需要用到比較兩個東西的相似度。比如搜索引擎要避免非常相似的文檔出現(xiàn)在結果的前幾頁,再比如很多網(wǎng)站上都有的“查找與你口味相似的用戶”、“你可能喜歡什么什么”之類的功能。后者其實是很大的一塊叫做“協(xié)同過濾”的研究領域,留待以后詳談。
首先我們定義兩個集合S,T的Jaccard相似度: Sim(S,T)= |S,T的交集| / |S,T的并集|。直觀上就容易感覺出這是一個很簡單而且比較合理的度量,我不清楚有沒有什么理論上的分析,在此省略。下面先主要說一下文檔的相似度。
如果是判斷兩個文檔是否完全相同,問題就變得很簡單,只要簡單地逐字符比較即可。但是在很多情況下并不是這樣,比如網(wǎng)站文章的轉載,主體內(nèi)容部分是相同的,但是不同網(wǎng)頁本身有自己的Logo、導航欄、版權聲明等等,不能簡單地直接逐字符比較。這里有一個叫做Shingling的方法,其實說起來很圡,就是把每相鄰的k個字符作為一個元素,這樣整篇文檔就變成了一個集合。比如文檔是“banana”,若k=2,轉化以后得到集合為
{“ba”,“an”,“na”},于是又變成了前述集合相似度的問題。關于k值的設置,顯然過小或過大都不合適,據(jù)說比較短的比如email之類可以設k=5,比如長的文章如論文之類可以設k=9。
當然,這是一個看上去就很粗糙的算法,這里的相似度比較只是字符意義上的,如果想進行語義上的比較就不能這么簡單了(我覺得肯定有一摞摞的paper在研究這個)。不過同樣可以想見的是,在實際中這個粗糙算法肯定表現(xiàn)得不壞,速度上更是遠優(yōu)于復雜的NLP方法。在實際工程中,必然糙快猛才是王道。
有一點值得注意的是,Shingling方法里的k值比較大時,可以對每個片段進行一次hash。比如k=9,我們可以把每個9字節(jié)的片段hash成一個32bit的整數(shù)。這樣既節(jié)省了空間又簡化了相等的判斷。這樣兩步的方法和4-shingling占用空間相同,但是會有更好的效果。因為字符的分布不是均勻的,在4-shingling中實際上大量的4字母組合沒有出現(xiàn)過,而如果是9-shingling再hash成4個字節(jié)就會均勻得多。
在有些情況下我們需要用壓縮的方式表示集合,但是仍然希望能夠(近似)計算出集合之間的相似度,此時可用下面的Minhashing方法。
首先把問題抽象一下,用矩陣的每一列表示一個集合,矩陣的行表示集合中所有可能的元素。若集合c包含元素r,則矩陣中c列r行的元素為1,否則為0。這個矩陣叫做特征矩陣,往往是很稀疏的。以下設此矩陣有R行C列。
所謂minhash是指把一個集合(即特征矩陣的一列)映射為一個0..R-1之間的值。具體方法是,以等概率隨機抽取一個0..R-1的排列,依此排列查找第一次出現(xiàn)1的行。
例如有集合S1={a,d}, S2={c}, S3 = {b,d,e}, S4 = {a,c,d},特征矩陣即如下
S1S2S3S4
0a1001
1b0010
2c0101
3d1011
4e0010
設隨機排列為43201(edcab),按edcab的順序查看S1列,發(fā)現(xiàn)第一次出現(xiàn)1的行是d(即第3行),所以h(S1)= 3,同理有h(S2)=2, h(S3)=4, h(S4)=3。
此處有一重要而神奇的結論:對于等概率的隨機排列,兩個集合的minhash值相同的概率等于兩個集合的Jaccard相似度。
證明:同一行的兩個元素的情況有三種:X.兩者都為1;Y.一個1一個0;Z.兩者都為0。易知Jaccard相似度為|X|/(|X|+|Y|)。另一方面,若排列是等概率的,則第一個出現(xiàn)的X中元素出現(xiàn)在Y中元素之前的概率也為|X|/(|X|+|Y|),而只有這種情況下兩集合的minhash值相同。
于是方法就有了,我們多次抽取隨機排列得到n個minhash函數(shù)h1,h2,…,hn,依此對每一列都計算n個minhash值。對于兩個集合,看看n個值里面對應相等的比例,即可估計出兩集合的Jaccard相似度。可以把
每個集合的n個minhash值列為一列,得到一個n行C列的簽名矩陣。因為n可遠小于R,這樣我們就把集合壓縮表示了,并且仍能近似計算出相似度。
在具體的計算中,可以不用真正生成隨機排列,只要有一個hash函數(shù)從
[0..R-1]映射到[0..R-1]即可。因為R是很大的,即使偶爾存在多個值映射為同一值也沒大的影響。
文章由超級p57官方網(wǎng)站http:// 整理發(fā)布
第二篇:基于屬性重要度約簡算法在數(shù)據(jù)挖掘中的應用研究論文
摘 要:屬性約簡是粗糙集理論研究的核心內(nèi)容之一,本文通過對屬性重要度的計算,以核為基礎計算條件屬性集中除核以外其他屬性的重要性來確定最小的約簡,最后通過實例分析驗證了算法的有效性與可行性。
關鍵詞:數(shù)據(jù)挖掘 屬性約簡 重要度
數(shù)據(jù)挖掘是從海量的且不斷動態(tài)變化的數(shù)據(jù)中,借助有效的方法挖掘出潛在、有價值的知識過程。而粗糙集理論它是一種刻畫不完整性和不確定性的數(shù)學工具,能在保持分類能力不變的前提下,通過知識約簡從中發(fā)現(xiàn)隱含的知識,揭示潛在的規(guī)律,是由波蘭科學家Pawlak在1982年提出的。而屬性約簡是粗糙集理論研究的核心內(nèi)容之一,它能保證在分類能力不變的情況下,消除重復、冗余的屬性和屬性值,減少數(shù)據(jù)挖掘要處理的信息量,提高數(shù)據(jù)挖掘的效率。本文提出了通過計算單個屬性的重要性,以重要性大于零的屬性為核,來選取其它屬性加入核中形成新的集合RED,直至剩下的所有屬性的重要性為零,得到的集合REDn即為屬性約簡。粗糙集的基本理論[1-2]
定義1設 是一個信息系統(tǒng),其中 是對象的非空有限集合,即;是屬性的非空有限集合;,是屬性 的值域;是一個信息函數(shù),即每個對象在每個屬性上對應的信息值。若,其中 為非空有限條件屬性集合,為非空有限決策屬性集合,且,則稱信息系統(tǒng)為決策表。
定義2對決策表,,考慮單決策屬性的情況,即,則的分辨矩陣是一個 矩陣,其中的元素定義如下:
定義3對分辨矩陣中每個,用布爾函數(shù) 來表示,若,則決策表的分辨函數(shù) 可定義為:。基于粗糙集的數(shù)據(jù)挖掘的屬性約簡算法[3-4]
2.1 算法分析
第一步:求核。通過求條件屬性C中的每個屬性a對在整個條件屬性集C的重要性SigC(x)來確定屬性核CORE(x),重要性SigC(x)>0的屬性為核屬性。
第二步:通過向屬性核CORE(x)中依次加入重要性大的屬性來確定屬性集x的最小約簡,詳細步驟如下:(1)把a加入到屬性集R 中,計算重要性,選擇重要性最大的屬性;(2)如果兩個屬性有相同的重要性,取離散值小的屬性。
2.2 算法復雜度
通過算法的分析,在對決策表進行劃分的時間復雜度為O(n2)。而計算條件屬性的重要性也是滿足劃分的線性關系,因此所求屬性核的時間復雜度為O(n2),依次添加次重要度的屬性也沒有增加額外的開銷,因此整個時間復雜度還是O(n2)。
2.3 實例及分析
為了進一步驗證算法的可行性,下面以表1中的決策表為例進行分析說明,其中對象集,條件屬性集,決策屬性。
以上對計算出的實驗數(shù)據(jù)的重要性進行統(tǒng)計得出信息系統(tǒng)的兩個約簡為{c1,c4}和{c2,c4}。結語
本文針對屬性約簡算法中的屬性重要度的計算來確定核,適合對海量數(shù)據(jù)的挖掘,不僅節(jié)省了存儲空間,而且在時間復雜度開銷少,通過實驗分析驗證了算法的可行性與有效性,為決策表的屬性約簡提供了一條高效的途徑。
參考文獻:
[1]張文修,吳偉志.粗糙集理論與方法[M].北京:科學出版社,2001:18-19
[2]周獻中,黃兵,李華雄,等.不完備信息系統(tǒng)知識獲取的粗糙集理論與方法[M].南京:南京大學出版社,2010:10-11
[3]饒泓,夏葉娟,李娒竹.基于分辨矩陣和屬性重要度的規(guī)則提取算法[J].計算機工程與應用,2008,44(3):163-165
[4]黃國順,劉云生.一種改進的決策表屬性重要性及其快速約簡算法[J].計算機工程與應用,2007,43(28):173-176