您好,登錄后才能下訂單哦!
如何衡量數據點之間的相似或相異程度是聚類算法的基礎問題,會直接影響聚類分析的效果,最直觀的方法是使用距離函數或者相似性函數。
常見的相似或相異程度計算方法。
很多距離計算方法都可以歸結為基于向量p范數的距離,即Minkowski distance。
dij=(sumsh=1|xihxjh|p)1/pdij=(sumh=1s|xihxjh|p)1/p
參數p = 2,Minkowski distance退化為Euclidean distance,使用Euclidean distance的聚類算法大多只能發現低維空間中呈超球分布的數據,并且對數據集中的噪聲比較敏感。
dij=(sumsh=1|xihxjh|2)1/2dij=(sumh=1s|xihxjh|2)1/2
參數p = 1,Minkowski distance演變為City-block distance,City-block distance可以有效提高模糊聚類算法對噪聲或者孤立點的魯棒性。
dij=sumsh=1|xihxjh|dij=sumh=1s|xihxjh|
參數p = 無窮,Minkowski distance演變為Sup distance。
dij=maxh|xihxjh|dij=maxh|xihxjh|
sij=xTixj||xi||||xj||sij=xiTxj||xi||||xj||
Mahalanobis distance為原特征空間中的數據在線性投影空間歐式距離,使用Mahalanobis distance能夠使得聚類算法成功發現數據集里成超橢球型分布的類簇,但是Mahalanobis distance會帶來較大的計算量。
dij=(xixj)TS1(xixj)dij=(xixj)TS1(xixj)
Alternative distance對數據集里的噪聲不敏感。
dij=1exp(β||xixj||2)dij=1exp(β||xixj||2)
dij=(sumsh=1wah|xihxjh|)1/2dij=(sumh=1swha|xihxjh|)1/2
代碼,
import numpy as np a = np.array([1,2,3,4]) b = np.array([4,3,2,1])print aprint b#Euclidean distancedistEu = np.sqrt(np.sum((a-b)**2))print "Euclidean distance = ",distEu#City-block distancedistCb = np.sum(np.abs(a-b))print "City-block distance = ",distCb#Sup distancedistSup = max(np.abs(a-b))print "Sup distance = ",distSup#Cosine similaritycosineSimi = np.dot(a,b) / (np.sqrt(np.sum(a**2)) * np.sqrt(np.sum(b**2)))print "Cosine similarity = ",cosineSimi#Alternative distancebeta = 0.5distAlter = 1 - np.exp(-beta * np.sqrt(np.sum((a - b)**2)))print "Alternative distance = ",distAlter#Feature weighted distanceweigh = np.array([0.5,0.3,0.1,0.1]) distFea = np.sqrt(np.dot(weigh,np.abs(a-b)))print "Feature weighted distance = ",distFea
輸出,
[1 2 3 4] [4 3 2 1]Euclidean distance = 4.472135955City-block distance = 8Sup distance = 3Cosine similarity = 0.666666666667Alternative distance = 0.89312207434Feature weighted distance = 1.48323969742
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。