R語言kohonen包主要函式介紹

elraymond發表於2020-04-20

最近準備寫一篇關於自組織對映 (Self-organizing map)的文章。SOM的程式碼很多,研究了一圈之後目前使用最順手的是R語言的kohonen包。

這個kohonen包功能很豐富,但是介面不是特別合理。R語言包大部分是統計學家寫的,功能強大,數學上嚴謹,但是不怎麼考慮程式碼的規範和簡潔。

kohonen最重要的四個函式:

  1. som
  2. xyf
  3. supersom
  4. somgrid

這個命名的隨意性容易讓程式設計師抓狂。簡單說,somxyfsupersom的封裝版本,分別對應單層SOM和雙層SOM,如果是兩層以上的多層SOM,必須使用supersom。這裡需要注意一下函式的輸入引數。

主要函式

som(X,...)
xyf(X, Y, ...)
supersom(data, grid=somgrid(), rlen = 100, alpha = c(0.05, 0.01),
         radius = quantile(nhbrdist, 2/3), 
         whatmap = NULL, user.weights = 1, maxNA.fraction = 0L,
         keep.data = TRUE, dist.fcts = NULL,
         mode = c("online", "batch", "pbatch"), cores = -1, init,
         normalizeDataLayers = TRUE)

som中的引數X是輸入的資料集,可以是矩陣,不能是data frame。需要注意,xyf中的XY都是輸入的資料集,並不是指輸入和輸出。xyf用於雙層SOM,所以X和Y分別對應各自的Layer層。

supersom中的data引數應對輸入的資料庫,如果是多層SOM,data是一個列表list,每個元素都是一個資料庫。

somgrid函式

主要函式中,除了資料集以外,另外主要引數是somgrid()函式,用於建立SOM網路。其他引數可以使用預設值,但是somgrid()必須給定。

somgrid(xdim = 8, ydim = 6, topo = c("rectangular", "hexagonal"),
        neighbourhood.fct = c("bubble", "gaussian"), toroidal = FALSE)

xdimydimtopo是SOM網路的最基本拓撲資訊,包括網路大小和拓撲形狀。 neighbourhood.fct是鄰域函式,可以選高斯函式和“泡泡”bubble函式。 高斯函式和bubble函式的區別會在另一篇文章中詳細介紹。toroidal函式設定為TRUE可以把預設的SOM拓撲圖變成環形。此時的SOM拓撲相當於是把環形切割後並展開。toroidal的作用看情況,它主要改變的是SOM的拓撲關係,對訓練結果本身並沒有影響。

視覺化

plot(x, type = c("codes", "changes", "counts",
                       "dist.neighbours", "mapping", "property", "quality"),
                       whatmap = NULL, classif = NULL, labels = NULL,
                       pchs = NULL, main = NULL, palette.name = NULL,
                       ncolors, bgcol = NULL, zlim = NULL,
                       heatkey = TRUE, property, codeRendering = NULL,
                       keepMargins = FALSE, heatkeywidth = .2,
                       shape = c("round", "straight"), border = "black",
                       na.color = "gray", …)

SOM會呼叫系統的plot函式,x是訓練好的SOM,type是畫圖型別,比如

changes:訓練過程中the mean distance to the closest codebook vector
codes:SOM中的codebook vector
counts:SOM中每個單元對應的sample數量



實際使用中,習慣把counts圖中的顏色反過來,即越深的單元表示上面的sample越多。

相關文章