數據挖掘中的相似性和相異性是什麼?怎麼度量?「必須掌握」

相似性和相異性是數據挖掘中非常重要的概念,在聚類、KNN、異常檢測甚至推薦系統中都有廣泛的應用。在某些應用場景中,我們需要的就是數據間的相似度或相異性數據而非原始數據。

比如在推薦系統中常用的一個算法是協同過濾,在協同過濾中我們需要計算物品或用戶間的相似度矩陣,在得到相似度矩陣之後,我們就可以直接捨棄原始數據了,接下來我們會直接根據相似度矩陣對用戶做個性化推薦。

一、相似度和相異度簡介

相似度是對兩個對象間相似程度的量化,對象間越相似,相似度就越高。

相異度則是對兩個對象間相異程度的量化,對象間越相似,相異度就越低。

可以看到,相似度和相異度之間既相互對立,又存在著不可分割的聯繫。一般來說,它們之間存在某種變換關係,是否進行變換以及將它們變換到什麼區間範圍內,取決於算法的需要和我們的判斷。

變換數值範圍

通常情況下,相似度的取值範圍在[0,1]之間。假如我們的相似度數據是在[1,10]之間,我們應該如何將它們變換到我們需要的[0,1]範圍內呢?一個非常實用的方法是使用“0-1標準化”手段。設min和max分別是相似度數據中的最小值和最大值,那麼針對每個相似度s,我們可以通過s′=(s−min)/(max−min)來完成轉換。不過有些時候相似度的取值範圍可能在[-1,1]之間,這時正負號包含了一定的信息,它們可能是重要的,這種情況下我們可能會保留其符號,而非強行轉換到[0,1]之間。

相異度的轉換有些複雜,這是因為其取值範圍往往在[0,∞]之間,要轉換到[0,1]之間的話往往會損失一些信息,甚至其尺度會發生一些變化。這個過程往往需要我們結合算法需要以及具體的場景來仔細斟酌判斷。

相似度和相異度之間的轉換

相似度和相異度之間是可以相互轉換的。比如在相似度取值範圍在[0,1]之間時,我們可以用d=1−s來從相似度數據中得到相異度,這時相異度越接近1,代表數據間距離越遠;相異度越接近0,代表數據間距離越近。另一種操作方法是直接對相似度取負。一般來說,單調減函數都可以用來完成相似度和相異度間的轉換。

單個屬性的相似度和相異度

當我們要計算單個屬性的相似度和相異度時,針對不同的數據類型,常用如下的計算方式。針對含有多個屬性的樣本間的相似度和相異度的計算,我們將在下邊更詳細地展開。

數據挖掘中的相似性和相異性是什麼?怎麼度量?「必須掌握」

二、相異度

距離

我們常用距離來作為相異度的衡量指標。針對單個屬性時,兩個樣本間的距離就是它們之間差值的絕對值;針對多個屬性時,有多重衡量方法,其中最常用的就是歐幾里得距離。

歐幾里得距離是兩個樣本中的每個屬性之間的差值的平方和的平方根,公式如下:

數據挖掘中的相似性和相異性是什麼?怎麼度量?「必須掌握」

它代表了兩個點之間線段的長度。比如x座標為(0,0),y座標為(1,2)那麼它們之間的歐幾里得距離為:

數據挖掘中的相似性和相異性是什麼?怎麼度量?「必須掌握」

我們可以將歐幾里得距離推廣得到閔可夫斯基距離:

數據挖掘中的相似性和相異性是什麼?怎麼度量?「必須掌握」

其中:

  • r=1時,曼哈頓距離;
  • r=2時,歐幾里得距離;
  • r=∞時,上確界距離。

除了距離以外,針對不同的數據類型,我們還有其他的相異度衡量方式,比如集合差或者時間等。

三、相似度

相似度的衡量有多種方式,常用的有簡單匹配係數、Jaccard係數和Tanimoto係數、餘弦相似度、相關性等。

簡單匹配係數

簡單匹配係數適合作為僅包含二元屬性(屬性僅有兩個取值,比如0和1)的數據之間的相似性度量。

假設我們有兩個樣本x和y,其中:

數據挖掘中的相似性和相異性是什麼?怎麼度量?「必須掌握」

則,簡單匹配係數(SMC)的計算公式為:

數據挖掘中的相似性和相異性是什麼?怎麼度量?「必須掌握」

也就是說,簡單匹配係數是指兩個樣本中屬性取值相同的個數除以屬性總數(屬性取值相同的個數+屬性取值不同的個數)。

Jaccard係數

有些時候,兩個屬性取值相同也許不能代表任何含義。舉個例子,有一萬種商品,小明購買了一件商品A,小紅購買了一件商品B,那麼在我們理解,他們之間是沒有任何相似性的。但是假如我們使用簡單匹配係數來衡量,他們之間的相似度卻高達0.9998。

為了應對這種0-0匹配無意義的情況,我們可以使用Jaccard係數

數據挖掘中的相似性和相異性是什麼?怎麼度量?「必須掌握」

針對前邊我們提到的例子,小明和小紅間的Jaccard係數為:

數據挖掘中的相似性和相異性是什麼?怎麼度量?「必須掌握」

廣義Jaccard係數

廣義Jaccard係數又稱Tanimoto係數,該係數用EJ表示:

數據挖掘中的相似性和相異性是什麼?怎麼度量?「必須掌握」

廣義Jaccard係數可以應對非二元的屬性,當所有屬性均為二元屬性時,它可以被歸約為Jaccard係數。它也可以用於文檔數據。

餘弦相似度

一般來說,文檔用向量表示,向量的每個屬性代表了一個特定的詞在文檔中出現的頻率。很容易想到,這裡的文檔向量大多數都是稀疏的,因為大部分文檔都僅僅包含了一部分詞,剩下的那些沒出現的詞都以0值出現在向量中。在這裡,沒有出現的詞是不應該作為相似性的成分的,否則可能大部分文檔之間都存在較高的相似度。

餘弦相似度是文檔相似性中最常用的度量之一,同時,它還經常用於電商平臺計算用戶相似度、商品相似度(它們是協同過濾推薦的基礎)。相對於Jaccard係數,餘弦相似度的一個優點是可以處理非二元的向量(比如這裡的詞頻不可能僅有0和1)。餘弦相似度的計算公式為:

數據挖掘中的相似性和相異性是什麼?怎麼度量?「必須掌握」

由於這裡不可能有負值,所以餘弦相似度的取值範圍是[0, 1],當兩個向量的方向完全一致時,它們在座標系中的夾角為0,其餘弦相似度就為1;當它們方向相互垂直時,它們的夾角為90度,餘弦相似度為0。

公式中,很容易發現,x′和y′分別是x向量方向和y向量方向上的單位向量。也就是說,餘弦相似度並不在意向量的大小(長度),僅在意他們之間的夾角。

相關性

我們還可以用Pearson相關係數來衡量數據間的相似度,它既可以應對二元變量,也可以應對連續變量。它的計算方法是兩組數據的協方差除以它們各自標準差的乘積:

數據挖掘中的相似性和相異性是什麼?怎麼度量?「必須掌握」

在這裡,協方差的計算公式為:

數據挖掘中的相似性和相異性是什麼?怎麼度量?「必須掌握」

標準差的計算公式為:

數據挖掘中的相似性和相異性是什麼?怎麼度量?「必須掌握」

我們曾經專門介紹過皮爾遜相關係數,這裡就不再贅述了,感興趣的可以關注我的歷史文章。

另外,常用的相似度還有對數似然相似度(LogLikelihood)、Spearman相關係數等,感興趣的可以搜索相關文章自行探索,也可以在下方留言,如果感興趣的人比較多,我會另外寫文章來講解。

四、如何選擇

一般來說,對於稠密、連續的數據,我們常使用距離度量,比如歐幾里得距離。對於稀疏數據(包含大量0-0匹配的數據),我們常用餘弦相似度、Jaccard係數和廣義Jaccard係數。

當然,在實際應用過程中,我們還需要考慮更多因素,比如某種度量是否已經得到大規模應用、某種度量是否在使用的軟件包中得到良好支持等。

相似性和相異性的概念在數據挖掘中非常重要,希望大家都能夠熟練掌握。


分享到:


相關文章: