1. 程式人生 > >資料相似性的度量方法總結

資料相似性的度量方法總結

現實中,我們需要處理的資料具有著不同的形式和特徵。而對資料相似性的度量又是資料探勘分析中非常重要的環節。針對這些不同形式的資料,不可能找到一種具備普遍意義的相似性度量演算法,甚至可以說,每種型別的資料都有它對應的相似度度量標準。這些標準很多,也比較雜亂,有必要作以總結。

廢話不多說了,直接進入正題。

資料屬性分類

現實世界,任何事物其實都可以描述成一個物件。這個概念其實跟面向物件程式設計中物件的含義是一致的。物件有很多屬性,屬性的型別當然也有所不同。打個比方說,如果把我看做一個物件,那我就基本擁有“姓名”、“性別”、“年齡”、“籍貫”等等,這些都是我的屬性,和起來就是一條資料,也就是戶籍部門拿到的關於我這個物件的資料。同理,如果把一張圖片看做一個物件,那麼“畫素值”,“亮度”、“對比度”,“飽和度”等等就是圖片的屬性。處理影象資料,當然要從這些屬性入手。

所以,看到這裡,我們大概能總結出來2點:
1. 一般情況下的資料探勘工作,其實就是針對1個或多個物件及其屬性做的運算,而資料一般就被表示為:object: attributes的形式。
2. 不同物件(甚至相同物件在不同的應用場景下)的屬性型別不同。需要分類討論。

標稱屬性

屬性值一般是一些符號或事物的名稱。比如說,對相親網站的註冊使用者,系統可會記錄如下資訊:性別,年齡,職業,地點,學歷等等。這些資料都是通過名稱來描述的。

二元屬性

這個好理解了,所有屬性都可以通過最簡單的0,1描述。一般常用來表示存在性。比如說,一個感冒患者一般會用是否存在“發燒”、“流涕”、“咽痛”等症狀來做記錄,存在這些狀況,記錄為1,不存在,記錄為0。當一個患者來看病時,當然就可以通過這些屬性值是否為1來做出診斷的結果。

序數屬性

屬性值是由有意義的排序數決定的。例如,對一部電影評價,可以分為“劇情”、“演員”、“音樂”、“特技”等幾個方面評價,而每個方面都有“好”、“中”、“差”3個選項供選擇。而這些有排序意義的選擇之間我們是無法說明具體差距的。也就是說,是定性,而非定量。

到此為止,上面的3種屬性都是定性的,而非定量的。

數值屬性

那麼對於屬性可以定量的這種屬性型別,只怕也是我們生活中遇到情況最多的了,這種屬性,就叫“數值屬性”,有關於這些屬性值的分析可以說是最多的,常見的平均數,眾數、中位數等等,就是處理這些屬性的。後面我們還可以看到,對於擁有數值屬性的物件相似度的度量,也有著相應的方法。

相似性度量

我們分別就剛才所說的4種屬性,看看當一個物件擁有不同型別的屬性時,應該用什麼方法度量。其實,我個人認為,沒有人能告訴你一種物件到底該用什麼樣的方法度量其相似性,因為現實中,可能很多情況下你所需要測量的資料是非常複雜的,所以這裡也只是給出一些常見的處理方法,具體問題還要具體分析。

另外,說一下,我本文的工作大多參考了韓家煒先生的大作《資料探勘》,韓先生是此道大師,希望大家有空了多去看看他的文章。

標稱屬性相似度度量

很簡單,拿兩個物件O1,O2舉例,直接看這兩個物件每種屬性的屬性值的匹配數。

假設這一類物件一共有n個屬性(每個物件都有這n個屬性),兩個物件O1,O2匹配的屬性數為m,那麼相似度為匹配數佔總屬性數的總數。

sim(O1,O2)=mn

二元屬性相似度度量

總的來說,和標稱屬性是類似的,但是情況稍微複雜一點。要分成對稱和非對稱2種形式。

(1)對稱二元屬性

先看對稱的情況,所謂對稱,是說物件的所有屬性都是一樣重要的。這就和標稱屬性類似了,用所有具有相同屬性值的屬性個數除總的屬性數。公式和標稱屬性一致:

sim(O1,O2)=m1+m2n

需要注意的是,這裡的m1代表物件O1,O2的所有屬性中,全都是1的屬性數,m2代表全都是0的屬性數。m1+m2就是2個物件所有屬性值相同的屬性的數量了。可見,基本與標稱屬性的度量演算法是一致的。

(2)非對稱二元屬性

所謂非對稱,是說我們只關心“正匹配”的情況,也就是隻關心兩個物件屬性中,都是1的情況。公式如下:

sim(O1,O2)=m1n

m1的意義與上面的相同。其實,如果把2個物件看做是2個集合的話,相當於就是2個集合的交比2個集合的並。所以,這個公式不僅可以應用於二元屬性,也可以應用於對2個集合相似度的度量,這個公式也被叫做Jaccard係數。比較普遍的寫法是:

sim(U,V)=UVUV

U,V代表2個集合,不一定非要是相同元素數量的。

數值屬性相似度度量

當然,我們還有序數屬性的相似度沒講。但是序數屬性的相似性測量與數值屬性確是有一定聯絡的,所以,先看數值屬性物件如何度量其相似度。

對於數值屬性的相似度度量有一套完整的方法,那就是大名鼎鼎的“閔可夫斯基”距離,也叫Lp範數。

(1) 歐氏距離

因為數值屬性一般都是以數值向量表示的。所以,當然也要從數值向量上下功夫。最常見的判斷兩個向量距離的方法就是我們熟知的歐氏距離,公式如下:

sim(v1,v2)=(v11v21)2+(v12v22)2++(v1nv2n)2

v1,v2代表2個向量,也就是兩個由數值屬性描述的物件。這兩個向量的維度都是n,代表有多少種屬性。

(2) 曼哈頓距離

除了歐氏距離,還有一種方法叫曼哈頓距離,起名的由來是計量由方塊形構成的曼哈頓街區的距離,因為街區不能橫穿,只能按照方格走到。所以,這種距離的度量方式也就很清晰了,就是兩個向量之間各個維度的差的絕對值之和,公式如下:

sim(v1,v2)=|v11v21|+|v12v22|++|v1nv2n|

(3) 閔可夫斯基距離

將曼哈頓距離與歐氏距離推廣,可以得到閔可夫斯基距離,也叫Lp範數。公式如下:

sim(v1,v2)=|v11v21|p+|v12v22|p++|v1n<