相似度分析任務:
實驗室實習期間,要做乙個基於相似度的句子無監督聚類。所有句子一共有130w個,從一開始讀資料就遇到了一些問題,以此記錄整個流程。
一開始很無知的建立了乙個130萬*130萬的矩陣,結果我的小電腦就直接終止了這個程序,還好不是在實驗室的gpu上跑的,於是需要考慮如何有效的構建這樣的矩陣。
在學長的建議下,先進行小規模測試,即選出和3000個以上句子都有相似度的句子,這樣經過過濾整個句子就從130w變成了僅有4000多個句子,減少了很大的計算量,可以在自己的小電腦上跑一下驗證,再在實驗室的gpu上跑結果,也算是學到了。
由於矩陣形式是兩個句子之間的jaccard相似度即,例 第乙個句子與第1000個句子相似度為0.5,與第二個句子相似度為0.3等等。
首先這些不是乙個距離度量,因此直接基於距離kmeans演算法並不能直接使用,如果要使用kmeas演算法必須得把這個矩陣轉換成乙個距離的問題。
基於相似度矩陣的話,可以利用譜聚類進行聚類分析,譜聚類原本是一種基於圖結構的聚類方法,其在圖中的使用相當於乙個切分子圖的方法,在子圖中其相當於兩個圖之間的邊的權重值,在這裡就對應了兩個事件之間的相似度。
首先考慮這是乙個無向圖,即1和2與2和1之間的相似度是相同的。
定義乙個nxn矩陣
而任意兩個點之間的權值又可以構成我們的鄰接矩陣
laplace矩陣:
定義非常的簡單:
而對稱陣具有很多良好的性質:首先特徵值沒有虛數,然後對於任意的對稱矩陣我們都可以對其進行分解,同時該矩陣是正定陣。
無向圖切圖方法:
如若考慮為乙個無向圖,我們要把該圖切為合適大小。
子圖切割
我們可以看到smallest cut是不合理切圖,best cut是乙個合理切圖。
為了研究切圖我們定義如下:
假定有n個子圖
對於圖
可以看到這個權重的計算方法,i在a中j在b中,假設圖a包括點k和點o,圖b包括點l,那麼就是
而當是n個子圖的時候:
其中 是除開集合a以外其它子集的並集。
那麼我們切圖無非就是要做到以下任務:子圖間的cut值很小,而圖內的權值合很高
然而單純只考慮這一點會就會造成無法最好切割,我們注意到smallest cut是不合理的,合理的cut子圖不應該只包含乙個節點,因此我們對節點進行約束,有以下兩種方案:
ratiocut和ncut
ratiocut,我們切圖的時候不僅需要考慮cut的值,同時還要考慮到切圖之後的子圖內節點數量問題。
定義 為子圖內的節點個數。
將這個函式表示為:
那麼無非就是要最小化這個函式就對了,最小化這個函式我們就可以得到乙個合理的圖分割,該分割中還考慮的分割後的子圖大小。
但是問題是如何表示這樣乙個函式呢,我們要的表示已經有了,如何轉化成代數的或者數學的方法來表示呢。為此我們要引入指示向量
對於其中任意乙個向量其長度與我們的資料樣本個數相同而k是要聚類的樣本個數是乙個超引數。那麼任意乙個
的意思就是,在第i個子圖中的第k的節點的h值,當k節點不屬於i圖時為0,當k節點屬於i圖時值為
那麼 為對於子圖i的ratiocut那麼我們就成功的找到了乙個數學表示。
那麼對於所有的圖的表示呢:
可知ratiocut就是該矩陣的跡,那麼我們就是要最小化這個跡值即可。
了解到,對於其中的每乙個子圖的優化目標
,由h定義可知其為正交的,而l又是對稱矩陣,而由矩陣乘法中,最大的特徵值將主導矩陣乘法的值,而矩陣特徵值所構成的特徵向量是相互正交的,而特徵值最小的代表了最無關的分量,那麼對於兩個圖而言,最無關的分量就代表了乙個最優的割集,那麼n個最小的特徵值就構成了n個最優割之後的子圖。而對於130萬的資料而言,我們要聚類的數目是遠遠小於130萬這個值的,因此還可以藉此方法對資料進行大量的降維。而由這個n特特徵值重建的n個特徵向量就是我們的
,隨後對h進行標準化,然後對矩陣
進行聚類。
看原理介紹的時候,對其中的乙個東西產生了疑惑,我們adajency matrix即我們事件的成對相似度,即我們還需要再adajency matrix的基礎上構建affinity matirx。(錯誤)
相似度矩陣就是affinity matrix,不需要進行任何的改動。只有我們尚且沒有對資料的距離,相似度進行度量的時候,我們才需要構建affinity matrix,比如在二維座標中,我們只有各個座標的點,因此我們需要在資料上構建affinity matrix,而當我們有了成對相似度之後,成對相似度就相當於乙個距離度量,因此我們也就不用構建affinitiy matrix了。
但是在資料很大的時候,譜聚類往往是乙個很爛的選擇,而且當圖聚類不是全連線或者不是稠密圖形的時候,譜聚類的效果也不是特別的理想。實驗室130萬條資料,非常的稀疏,要找到乙個合適的聚類數目難於登天,如果真要除錯聚類數目的話可以除錯一輩子。這個時候就需要能夠自適應聚類數目的聚類方法,例如affinity clustering,至少在這種方法上可以不用手動調聚類數目了,有時間再繼續寫affinity clustering的方法。
jaccard相似度演算法
jaccard index,又稱為jaccard相似係數 jaccard similarity coefficient 用於比較有限樣本集之間的相似性與差異性。jaccard系數值越大,樣本相似度越高。兩個集合a和b交集元素的個數在a b並集中所佔的比例,稱為這兩個集合的傑卡德係數,用符號 j a,...
相似度演算法之余弦相似度
余弦距離,也稱為余弦相似度,是用向量空間中兩個向量夾角的余弦值作為衡量兩個個體間差異的大小的度量。余弦值越接近1,就表明夾角越接近0度,也就是兩個向量越相似,這就叫 余弦相似性 上圖兩個向量a,b的夾角很小可以說a向量和b向量有很高的的相似性,極端情況下,a和b向量完全重合。如下圖 如上圖二 可以認...
相似度計算之余弦相似度
一 定義及概念 余弦取值範圍為 1,1 求得兩個向量的夾角,並得出夾角對應的余弦值,此余弦值就可以用來表徵這兩個向量的相似性。夾角越小,趨近於0度,余弦值越接近於1,它們的方向更加吻合,則越相似。當兩個向量的方向完全相反夾角余弦取最小值 1。當余弦值為0時,兩向量正交,夾角為90度。因此可以看出,余...