1. 程式人生 > >白話機器學習演算法(五)自組織對映SOM

白話機器學習演算法(五)自組織對映SOM

聚類演算法可以簡化為一個找聚類中心的問題,比如k-means,而對於輸入向量空間,找他的聚類中心,可以用統計學的方法,比如GMM,也可以用向量量化的方法。

自組織對映,可以理解為一種向量量化網路,相當於我們的選人大代表,一類相近的人可以選一個代表,SOM就是這樣的思想,有了這些代表,聚類問題就變成了分類問題,剩下的便是讓這些輸入向量站隊了。呵呵

還是打個比方,現在怎麼選人大代表呢?如圖:


你可以想象這是一塊操場空地,為了方便演示,黑點代表群眾,空圈就是人大代表,乍一看這些圈圈離群眾都好遠,怎麼行呢,人大代表當然要深入群眾了,這樣才能代表群眾,現在的問題是怎麼樣讓這些圈圈走到群眾中去?

現在進行一個策略,每次讓一個群眾在原地大喊:“代表向我靠攏!”,這樣圖上四個代表就根據聲音的方向,向這個群眾移動,這裡有個問題,到底是四個“人大代表”都向這個群眾移動呢,還是隻有少數幾個“人大代表”移動,我們可以認為聲音傳播越遠越弱,距離那位群眾越遠的人大代表聽的聲音越弱,甚至聽不見,“代表”聽到的聲音越強,移動的距離越長,反之移動越短,甚至不移動;

根據以上的策略,如下圖,我們可以看到當所有的群眾都喊了若干次後,四個人大代表都站到群眾中間去了,這些代表就是各自的聚類中心;

自組織對映,就是這個原理,上面的黑圈圈就是所謂的神經元,即權值矩陣,我們通過最後收斂的權值矩陣來完成分類;但是你可能會困惑,說了這麼多,跟對映有什麼關係呢,其實這個對映就是資料空間到神經元的對映,神經元分佈密集的地方說明那裡的資料分佈也很密集!就像上面如果某個區域人稀疏的話,代表也沒法去嘛,因為沒人叫他去啊!

當資料很大的時候,我們沒法一次性處理,我們可以將資料分塊,比如分成4塊,分別進行SOM聚類,這裡假設每塊分5類,然後就有4*5=20個模式向量,對於總的塊來說就是有20類,然後用他們的模式向量進行一次層次聚類,就能對整個資料進行聚類了;

神經網路用相對很簡單的策略來實現有些很複雜的問題,並且效果都還不錯。關於上面som的實現,要搜尋最近的向量,如果搜尋整個輸入空間是很費時的事情,這裡又要提到kd樹了,有興趣的可以看看;

任何一種基於大資料的演算法,首先要考慮的就是效率,可行性。