七、度量数据的相似性和想异性
生活随笔
收集整理的這篇文章主要介紹了
七、度量数据的相似性和想异性
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.相似性和想異性度量
度量數(shù)據(jù)的相似性和相異性主要包括以下方面的內(nèi)容:
- 數(shù)數(shù)據(jù)矩陣和相異性矩陣;
- 標(biāo)稱屬性的臨近性度量;
- 二元屬性的臨近性度量;
- 數(shù)值屬性的相異性:閔科夫斯基距離
2 數(shù)據(jù)矩陣和相異性矩陣
- 數(shù)據(jù)矩陣
數(shù)據(jù)矩陣或稱對象-屬性結(jié)構(gòu):這種數(shù)據(jù)結(jié)構(gòu)用關(guān)系表的形式或n×𝑝矩陣存放n個數(shù)據(jù)對象:
每行對應(yīng)于一個對象。在記號中,我們可能使用𝑓作為遍歷p個屬性的下標(biāo)。 - 相異性矩陣
相異性矩陣或稱對象-對象結(jié)構(gòu):存放n個對象兩兩之間的臨近度,通常用一個n×𝑛的矩陣表示:
相似性度量可以表示成相異性度量的函數(shù)。例如對于標(biāo)稱數(shù)據(jù):
3 標(biāo)稱屬性的臨近性度量
- 標(biāo)稱屬性臨近性
標(biāo)稱屬性可以取兩個或多個狀態(tài)。例如,map_color是一個標(biāo)稱屬性,他可以有比如說5狀態(tài):紅、黃、綠、粉紅和藍(lán)。
設(shè)一個標(biāo)稱屬性的狀態(tài)數(shù)目是M。這些狀態(tài)可以用字母、符號或者一組整數(shù)表示。這些整數(shù)只是用于數(shù)據(jù)處理,并不代表任何特點的順序。
m: 匹配的數(shù)目(即i和j取值相同狀態(tài)的屬性數(shù)) p: 刻畫對象的屬性總數(shù) - 標(biāo)稱屬性之間的相異性
假設(shè)我們有表2.2種中的樣本數(shù)據(jù),不過只有對象標(biāo)識符和屬性test-1是可用的,其中test-1是標(biāo)稱的。
- 標(biāo)稱屬性的相異性
由于我們只有一個標(biāo)稱屬性test-1,我們令皮p=1,使得當(dāng)對象i和j匹配時,d(i,j)=0,當(dāng)對象不同時, d(i,j)=1。于是,我們得到:
相似性可以表示為:
4 二元屬性的臨近性度量
- 二元屬性
二元屬性只有兩種狀態(tài):0或1,其中0表示該屬性不出現(xiàn),1表示出現(xiàn)。我們可以使用對稱和非對稱二元屬性刻畫對象間的相異性和相似性度量。 - 對稱的二元屬性
- 非對稱的二元屬性
非對稱的二元屬性,兩個狀態(tài)不是同等重要的;如病理化驗的陽性(1)和陰性(1)結(jié)果。給定兩個非對稱的二元屬性,兩個都取值1的情況(正匹配)被認(rèn)為比兩個都取值0(負(fù)匹配)的情況更有意義。
對于非對稱的二元屬性,兩個狀態(tài)不是同等重要的。此時,i與j的相異性表示為:
對象i與j之間的非對稱的二元相似性可以用下式計算:
5 數(shù)值屬性的相異性
5.1距離的計算
- 歐幾里得距離
- 曼哈頓距離
- 閔科夫斯基距離
其中,p是一個參量,p選取不同的值,表示不同的距離:
p=1時,表示曼哈頓距離;
p=2時,表示歐式距離;
p→∞ 時,表示切比雪夫距離
- 余弦相似性
對于稀疏矩陣,例比較文檔或針對給定的查詢詞向量對文檔排序,可以對文檔向量或詞頻向量計算余弦相似性計算文檔的相似距離。
6 代碼實戰(zhàn)
6.1 計算動物之間的閔科夫斯基距離
# 閔科夫斯基距離 def minkowskiDist(v1, v2, p):"""假設(shè)v1和v2是兩個等長的數(shù)值型數(shù)組返回v1和v2之間階為p的閔可夫斯基距離"""dist = 0.0for i in range(len(v1)):dist += abs(v1[i] - v2[i])**preturn dist**(1/p)6.2 計算動物之間的相似性
# 余弦相似度 def cos_sim(vector_a, vector_b):"""計算兩個向量之間的余弦相似度:param vector_a: 向量 a:param vector_b: 向量 b:return: sim"""vector_a = np.mat(vector_a)vector_b = np.mat(vector_b)num = float(vector_a * vector_b.T)denom = np.linalg.norm(vector_a) * np.linalg.norm(vector_b)cos = num / denomsim = 0.5 + 0.5 * cosreturn sim7 完成代碼
# *-* coding:utf-8 *-* import numpy as np # 閔科夫斯基距離 def minkowskiDist(v1, v2, p):"""假設(shè)v1和v2是兩個等長的數(shù)值型數(shù)組返回v1和v2之間階為p的閔可夫斯基距離"""dist = 0.0for i in range(len(v1)):dist += abs(v1[i] - v2[i])**preturn dist**(1/p)# 余弦相似度 def cos_sim(vector_a, vector_b):"""計算兩個向量之間的余弦相似度:param vector_a: 向量 a:param vector_b: 向量 b:return: sim"""vector_a = np.mat(vector_a)vector_b = np.mat(vector_b)num = float(vector_a * vector_b.T)denom = np.linalg.norm(vector_a) * np.linalg.norm(vector_b)cos = num / denomsim = 0.5 + 0.5 * cosreturn sim # 主方法 if __name__ == '__main__':rattle_snake = [1, 1, 1, 1, 0]dart_frog = [1, 0, 1, 0, 4]m_distance = minkowskiDist(rattle_snake, dart_frog, 2)c_distance = cos_sim(rattle_snake, dart_frog)print("閔科夫斯基距離: ", m_distance)tance = minkowskiDist(rattle_snake, dart_frog, 2)
c_distance = cos_sim(rattle_snake, dart_frog)
總結(jié)
以上是生活随笔為你收集整理的七、度量数据的相似性和想异性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 六、数据的基本统计描述
- 下一篇: 八、探索性数据分析——数字化探索