1

我正在處理社交網絡配置文件的聚類問題,並且每個配置文件文檔都由配置文件描述中'感興趣的條款發生'次數表示。爲了有效地進行聚類,我試圖在兩個配置文件之間找到正確的相似性度量(或距離函數)。計算兩個配置文件之間的共同特徵數量之間的相似度

所以可以說我有以下模式

  basketball cricket python 
profile1  4   2  1 
profile2  2   1  3 
profile3  2   1  0 

表現在,通過計算歐氏距離下去,我得到

distance (profile1,profile2) = 3 
distance (profile2,profile3) = 3 
distance (profile3,profile1) = 2.45 

現在,這是好的,但也有來兩個問題我的想法

在這裏我們忽略了很多常見的功能,例如,即使簡檔1和簡檔3是最近的,依靠人類的直覺,簡介1a nd個人資料2至少在所有三個利益 - 籃球,板球和蟒蛇中都具有一定的價值,因此這兩個檔案可能更爲相似,而不是檔案1和檔案3,其中一個檔案(檔案3)沒有提到檔案中的蟒蛇。我也不希望只計算距離的相似特徵,這會產生肯定錯誤的結果。

我的第一個問題 - 有沒有什麼辦法可以通過任何已建立的方式來適應這種直覺?

我的第二個問題 - 可能有一些配置文件作者比其他人更詳細,如何調整?因爲具有4次python的配置文件的詳細作者可能與較少詳細作者相同的python 2次出現相同。

我無法拿出這個問題的好標題。所以很抱歉,如果它令人困惑。

回答

1

首先,按照您的計算方式計算您的配置文件。那麼關鍵的一步就是某種正常化。你可以將數字除以它們的總數,使得數字總和爲1,或者你可以將它們除以它們的歐幾里得範數,以使它們具有歐幾里得範數1.例如,使用總和歸一化,第一個簡檔將會成爲(四捨五入)

0.57, 0.29, 0.14 

,並利用歐氏正常化,這將成爲

0.87, 0.44, 0.22 

這將確保所有剖面,在相同的數字範圍表示,將採取「過於冗長的護理配置文件作者「。


下面是一個例子IPython的會話顯示如何通過行總和以及如何計算歸一化的行之間的歐幾里得距離來歸一化的行。你會發現,在規範化之後,配置文件1和3更接近,就像你期望的那樣。

In [22]: p = array([[4,2,1],[2,1,3],[2,1,0]]) 

In [23]: p 
Out[23]: 
array([[4, 2, 1], 
     [2, 1, 3], 
     [2, 1, 0]]) 

In [24]: p = p/p.sum(axis=1)[:,newaxis] 

In [25]: p 
Out[25]: 
array([[ 0.57142857, 0.28571429, 0.14285714], 
     [ 0.33333333, 0.16666667, 0.5  ], 
     [ 0.66666667, 0.33333333, 0.  ]]) 

In [26]: p.sum(axis=1) 
Out[26]: array([ 1., 1., 1.]) 

In [27]: norm(p[0] - p[1]) # distance 1-2 
Out[27]: 0.44543540318737401 

In [28]: norm(p[0] - p[2]) # distance 1-3 
Out[28]: 0.17817416127494959 

In [29]: norm(p[1] - p[2]) # distance 2-3 
Out[29]: 0.62360956446232352 

最後,如果你想更加看重個人資料是否提到的一切,與其說它是如何經常提到它的興趣,你可以做歸一化之前的額外步驟:簡單地計算pow(x, alpha)爲您的個人資料矢量中的每個元素x,其中alpha是介於0和1之間的參數。在這裏,1意味着像以前一樣的標準線性加權,並且當alpha使得α接近於0時,這意味着僅提及利息計數,而不是提及頻率。例如,對於alpha = 0.5(以輪廓的平方根),我們得到:

In [32]: p = array([[4,2,1],[2,1,3],[2,1,0]]) 

In [33]: p = sqrt(p) 

In [34]: p 
Out[34]: 
array([[ 2.  , 1.41421356, 1.  ], 
     [ 1.41421356, 1.  , 1.73205081], 
     [ 1.41421356, 1.  , 0.  ]]) 

In [35]: p = p/p.sum(axis=1)[:,newaxis] 

In [37]: norm(p[0] - p[1]) # distance 1-2 
Out[37]: 0.2353133053319465 

In [38]: norm(p[0] - p[2]) # distance 1-3 
Out[38]: 0.27881275777438091 

In [39]: norm(p[1] - p[2]) # distance 2-3 
Out[39]: 0.51412606310632747 

現在型材1和2是最接近的匹配,因爲我們更加強調的事實,他們都提到Python的,沒有那麼他們多頻繁地提到它。

+0

好的。但是問題1呢?如何考慮常見功能和距離的數量? – Yantraguru

+1

@Kognizant:這會照顧到這兩個問題。只需計算這些歸一化向量的距離即可。 – cfh

+0

抱歉,但我不明白。請您詳細說明它如何解決第一個問題? – Yantraguru

相關問題