SOM 的禿頭之旅

2021-09-27 09:55:34 字數 754 閱讀 5312

演算法流程摘自:

第一步:與其他神經網路相同,需要將weighs初始化為很小的隨機數

第二步:隨機取乙個 輸入樣本xi

第三步:

遍歷競爭層中每乙個節點:計算xi與節點之間的相似度(通常使用歐式距離)

選取距離最小的節點作為優勝節點(winner node),有的時也叫bmu(best matching unit)

第四步:根據鄰域半徑σ(sigma)確定優勝鄰域將包含的節點;並通過neighborhood function計算它們各自更新的幅度(基本思想是:越靠近優勝節點,更新幅度越大;越遠離優勝節點,更新幅度越小)

第五步:更新優勝鄰域內節點的weight:

w_v(s+1) = w_v(s) + θ(u,v,s) · α(s) · (d(t) - w_v(s))

θ(u,v,s)是對更新的約束,基於離bmu的距離 即neighborhood function的返回值

w_v(s)是節點v當前的wight

第六步:完成一輪迭代(迭代次數+1),返回第二步,直到滿足設定的迭代次數

害!看了很多部落格還有一些**,發現som演算法其實就是用比原始資料維度較低的具有網格形狀的神經結點,來擬合樣本資料的資料分布,並記錄每個輸入樣本的優勝節點,作為對映的低維樣本點。聚類其實就是衡量輸入和各個神經結點的距離,離的最近的那個神經結點的類別就是輸入的類別。其實一定程度上來講,som和k近鄰演算法有一定的相似之處。mark一下吧,下次再遇到不會半天想不通樣本怎麼少了的問題。。。

禿頭的一天

在 windows 下可以不寫第一行注釋 usr bin python3第一行注釋標的是指向 python 的路徑,告訴作業系統執行這個指令碼的時候,呼叫 usr bin 下的 python 直譯器。usr bin env python3這種用法先在 env 環境變數 設定裡查詢 python 的安...

禿頭的一天

使用內建 enumerate 函式進行遍歷 forindex,item inenumerate sequence process index,item sequence 12,34,34,23,45,76,89 fori,j inenumerate sequence print i,j 012134...

禿頭的一天

字典的鍵值是 唯讀 的,所以不能對鍵和值分別進行初始化,即以下定義是錯的 dic dic.keys 1,2,3,4,5,6 traceback most recent call last file line 1,inattributeerror dict objectattribute keys i...