R 資料探勘演算法/聚類/自組織對映 (SOM)
Kohonen 自組織特徵對映 (SOFM 或 SOM) 是一種基於神經網路觀點的聚類和資料視覺化技術。與其他型別的基於中心點的聚類一樣,SOM 的目標是找到一組中心點(在 SOM 術語中稱為參考向量或碼本向量)並將資料集中每個物件分配給最能近似該物件的中心點。在神經網路術語中,每個中心點都與一個神經元相關聯 [1].
與增量式 K 均值一樣,資料物件一次處理一個,並且更新最接近的中心點。與 K 均值不同的是,SOM 對中心點施加了地形排序,並且也會更新附近的中心點。點的處理會持續進行,直到達到某個預定的限制或中心點不再發生太大變化。SOM 技術的最終輸出是一組隱式定義叢集的中心點。每個叢集包含最接近特定中心點的點 [1].
SOM 是一種聚類技術,它對生成的叢集中心點實施鄰域關係。因此,相鄰的叢集比不相鄰的叢集彼此更相關。這種關係有利於解釋和視覺化聚類結果。實際上,SOM 的這一方面已在許多領域得到利用,例如視覺化 Web 文件或基因陣列資料 [1].
SOM 的一個區別特徵是它對中心點(神經元)施加了地形(空間)組織。圖 1 顯示了一個二維 SOM 的示例,其中中心點由以矩形網格組織的節點表示。每個中心點都被分配了一對座標(i,j)。有時,這樣的網路以相鄰節點之間的連結繪製,但這可能具有誤導性,因為一箇中心點對另一箇中心點的影響是透過一個以座標定義的鄰域來實現的,而不是透過連結。SOM 神經網路有很多型別,但重點將放在二維 SOM 上,其中心點以矩形或六邊形組織 [1].
圖 1:二維 3x3 矩形 SOM 神經網路 [1].
儘管 SOM 與K 均值相似,但存在根本區別。SOM 中使用的中心點具有預定的地形排序關係。在訓練過程中,SOM 使用每個資料點來更新最接近的中心點以及地形排序中附近的中心點。透過這種方式,SOM 為任何給定的資料集生成一組有序的中心點。換句話說,SOM 網格中彼此靠近的中心點比彼此更遠的中心點彼此更相關。由於這個約束,二維 SOM 的中心點可以被視為位於試圖儘可能好地擬合 n 維資料的二維表面上。SOM 中心點也可以被認為是非線性迴歸相對於資料點的結果。在高級別上,使用 SOM 技術的聚類包含以下演算法中描述的步驟 [1]
1: Initialize the centroids. 2: repeat 3: Select the next object. 4: Determine the closest centroid to the object. 5: Update this centroid and the centroids that are close, i.e., in a specified neighborhood. 6: until The centroids don't change much or a threshold is exceeded. 7: Assign each object to its closest centroid and return the centroids and clusters.
對於 R(R 開發核心團隊 2007 年),從綜合 R 檔案網路 (CRAN) 可以獲得三個軟體包,這些軟體包實現了標準 SOM [2]
- kohonen 軟體包實現了自組織對映以及一些用於監督模式識別和資料融合的擴充套件。
- som 軟體包提供了用於自組織對映的函式。
- wccsom 軟體包用於比較具有峰值偏移的模式的 SOM 網路。
在本討論中,重點放在kohonen 軟體包上,因為它提供了 SOM 標準功能和順序擴充套件。R 軟體包kohonen 提供了用於自組織對映的函式。它還提供了兩個擴充套件,允許將 SOM 用於分類和迴歸任務以及資料探勘任務。它特別強調視覺化。基本函式是:用於自組織對映的通常無監督形式的som;xyf 用於監督自組織對映和 XY 融合對映,當所有物件都具有額外資訊(例如,類別變數)時,這很有用;bdk,一種稱為雙向 Kohonen 對映的替代公式;最後,從 2.0.0 版本開始,xyf 對映到超過兩層資訊的泛化,在函式supersom 中。這些函式可用於定義訓練集中物件到對映單元的對映 [3].
kohonen 軟體包中包含多個數據集:來自 UCI 機器學習資源庫[4] 的葡萄酒資料,來自 Wülfert 等人 (1998) [5] 描述的乙醇、水和異丙醇三元混合物的近紅外光譜,在不同溫度下測量,最後是一組微陣列資料,來自 Spellman 等人 (1998) [6] 的酵母資料。葡萄酒資料集包含有關來自三種不同葡萄品種的 177 個義大利葡萄酒樣本的資訊;已測量了 13 個變數(例如,酒精和黃酮類化合物的濃度,以及色調)。酵母資料是原始資料集的子集,包含 6178 個基因,這些基因被認為與酵母細胞週期有關。該資料集包含 800 個基因,使用六種不同的同步方法測量了這些基因的時間依賴性表達 [3].
不同型別的自組織對映可以透過呼叫函式som、xyf、bdk 或supersom 來獲得,並將適當的資料表示作為第一個引數。其他幾個引數提供了其他引數,例如對映大小、迭代次數等。返回的物件隨後可用於檢查、繪圖、對映和預測。下面將展示軟體包中提供的函式。視覺化函式將在視覺化主題中進行討論 [3].
函式som 實現了自組織對映的標準形式 [7].
som(data, grid=somgrid(), rlen = 100, alpha = c(0.05, 0.01), radius = quantile(nhbrdist, 0.67) * c(1, -1), init, toroidal = FALSE, n.hood, keep.data = TRUE)
引數是
- data: 一個矩陣,其中每行表示一個物件。
- grid: 代表的網格。
- rlen: 將完整資料集呈現給網路的次數。
- alpha: 學習率,一個包含兩個數字的向量,指示變化量。預設情況下,從 0.05 線性下降到 0.01,跨越 rlen 次更新。
- 半徑: 鄰域的半徑,可以是單個數字或向量(開始,結束)。 如果以單個數字給出,半徑將從給定的數字執行到該數字的負值; 一旦鄰域小於 1,只有獲勝單元將被更新。 預設值為覆蓋所有單元到單元距離的 2/3 的值。
- init: 初始代表,表示為矩陣。 如果缺失,則從“data”中隨機選擇(不放回)。
- toroidal: 如果為 TRUE,則地圖的邊緣相連。 請注意,在六邊形環形地圖中,行數必須為偶數。
- n.hood: 鄰域的形狀,可以是“circular”或“square”。 後者是矩形地圖的預設值,前者是六邊形地圖的預設值。
- keep.data: 將資料儲存在返回值中。
返回一個類為“kohonen”的物件,包含以下元件
- data: 資料矩陣,僅在 keep.data == TRUE 時返回。
- grid: 網格,一個類為“somgrid”的物件。
- codes: 程式碼向量的矩陣。
- changes: 程式碼向量平均偏差的向量。
- unit.classif: 所有資料物件的獲勝單元,僅在 keep.data == TRUE 時返回。
- distances: 物件與其對應獲勝單元之間的距離,僅在 keep.data == TRUE 時返回。
- toroidal: 是否使用環形地圖。
- method: som 的型別,這裡為“som”。
函式 xyf 是自組織對映的監督版本,用於將高維光譜或模式對映到 2D [7]。
xyf(data, Y, grid=somgrid(), rlen = 100, alpha = c(0.05, 0.01), radius = quantile(nhbrdist, 0.67) * c(1, -1), xweight = 0.5, contin, toroidal = FALSE, n.hood, keep.data = TRUE)
引數是
- data: 一個矩陣,其中每行表示一個物件。
- Y: 要建模的屬性。 在分類的情況下,Y 是一個零矩陣,每行只有一個“1”,表示該類。 對於連續屬性的預測,Y 是一個向量。 也可以進行組合,但應注意適當的縮放。
- grid: 代表的網格。
- rlen: 將完整資料集呈現給網路的次數。
- alpha: 學習率,一個包含兩個數字的向量,指示變化量。預設情況下,從 0.05 線性下降到 0.01,跨越 rlen 次更新。
- radius: 鄰域的半徑,可以是單個數字或向量 start, stop)。 如果以單個數字給出,半徑將從給定的數字執行到該數字的負值; 一旦鄰域小於 1,只有獲勝單元將被更新。 預設值為覆蓋所有單元到單元距離的 2/3 的值。
- xweight: 在計算更新 Y 的距離時賦予 X 地圖的權重。 預設值為 0.5。
- contin: 引數指示 Y 是連續的還是分類的。 預設值為檢查 Y 的所有行和是否等於 1:在這種情況下,contin 為 FALSE。
- toroidal: 如果為 TRUE,則地圖的邊緣相連。 請注意,在六邊形環形地圖中,行數必須為偶數。
- n.hood: 鄰域的形狀,可以是“circular”或“square”。 後者是矩形地圖的預設值,前者是六邊形地圖的預設值。
- keep.data: 將資料儲存在返回值中。
返回一個類為“kohonen”的物件,包含以下元件
- data: 資料矩陣,僅在 keep.data == TRUE 時返回。
- Y: Y,僅在 keep.data == TRUE 時返回。
- contin: 引數指示 Y 是連續的還是分類的。
- grid: 網格,一個類為“somgrid”的物件。
- codes: 包含 X 和 Y 程式碼簿向量的兩個矩陣的列表。
- changes: 包含兩列程式碼向量平均偏差的矩陣。 第 1 列包含用於更新 Y 的偏差; 第 2 列包含用於更新 X 的偏差。
- toroidal: 是否使用環形地圖。
- unit.classif: 所有資料物件的獲勝單元,僅在 keep.data == TRUE 時返回。
- distances: 物件與其對應獲勝單元之間的距離,僅在 keep.data == TRUE 時返回。
- method: som 的型別,這裡為“xyf”。
自組織對映的監督版本,用於將高維光譜或模式對映到 2D:雙向 Kohonen 地圖 [7]。
bdk(data, Y, grid=somgrid(), rlen = 100, alpha = c(0.05, 0.01), radius = quantile(nhbrdist,0.67) * c(1, -1), xweight = 0.75, contin, toroidal = FALSE, n.hood, keep.data = TRUE)
引數是
- data: 一個矩陣,其中每行表示一個物件。
- Y: 要建模的屬性。 在分類的情況下,Y 是一個矩陣,每行只有一個“1”表示該類,其他地方為零。 對於連續屬性的預測,Y 是一個向量。 也可以進行組合,但應注意適當的縮放。
- grid: 代表的網格。
- rlen: 將完整資料集呈現給網路的次數。
- alpha: 學習率,一個包含兩個數字的向量,指示變化量。預設情況下,從 0.05 線性下降到 0.01,跨越 rlen 次更新。
- 半徑: 鄰域的半徑,可以是單個數字或向量(開始,結束)。 如果以單個數字給出,半徑將從給定的數字執行到該數字的負值; 一旦鄰域小於 1,只有獲勝單元將被更新。 預設值為覆蓋所有單元到單元距離的 2/3 的值。
- xweight: 在計算更新 Y 的距離時賦予 X 地圖的初始權重,以及在更新 X 時賦予 Y 地圖的初始權重。 此權重將在訓練期間線性降至 0.5。 預設值為 0.75。
- contin: 引數指示 Y 是連續的還是分類的。 預設值為檢查 Y 的所有行和是否等於 1:在這種情況下,contin 為 FALSE。
- toroidal: 如果為 TRUE,則地圖的邊緣相連。 請注意,在六邊形環形地圖中,行數必須為偶數。
- n.hood: 鄰域的形狀,可以是“circular”或“square”。 後者是矩形地圖的預設值,前者是六邊形地圖的預設值。
- keep.data: 將資料儲存在返回值中。
返回一個類為“kohonen”的物件,包含以下元件
- data: 資料矩陣,僅在 keep.data == TRUE 時返回。
- Y: Y,僅在 keep.data == TRUE 時返回。
- contin: 引數指示 Y 是連續的還是分類的。
- grid: 網格,一個類為“somgrid”的物件。
- codes: 包含 X 和 Y 程式碼簿向量的兩個矩陣的列表。
- changes: 包含兩列程式碼向量平均偏差的矩陣。 第 1 列包含用於更新 Y 的偏差; 第 2 列包含用於更新 X 的偏差。
- toroidal: 是否使用環形地圖。
- unit.classif: 所有資料物件的獲勝單元,僅在 keep.data == TRUE 時返回。
- distances: 物件與其對應獲勝單元之間的距離,僅在 keep.data== TRUE 時返回。
- method: som 的型別,這裡為“bdk”。
xyf 地圖的擴充套件,用於多個數據層,這些資料層可能具有不同的變數數量(但物件數量相同) [7]。
supersom(data, grid=somgrid(), rlen = 100, alpha = c(0.05, 0.01), radius = quantile(nhbrdist, 0.67) * c(1, -1), contin, toroidal = FALSE, n.hood, whatmap = NULL, weights = 1, maxNA.fraction = .5, keep.data = TRUE)
引數是
- data: 資料矩陣的列表。
- grid: 代表的網格:參見 somgrid。
- rlen: 將完整資料集呈現給網路的次數。
- alpha: 學習率,一個包含兩個數字的向量,指示變化量。預設情況下,從 0.05 線性下降到 0.01,跨越 rlen 次更新。
- 半徑: 鄰域的半徑,可以是單個數字或向量(開始,結束)。 如果以單個數字給出,半徑將從給定的數字執行到該數字的負值; 一旦鄰域小於 1,只有獲勝單元將被更新。 預設值為覆蓋所有單元到單元距離的 2/3 的值。
- contin: 引數指示資料是連續的還是分類的。 預設值為檢查所有行和是否等於 1:在這種情況下,contin 為 FALSE。
- toroidal: 如果為 TRUE,則地圖的邊緣相連。 請注意,在六邊形環形地圖中,行數必須為偶數。
- n.hood: 鄰域的形狀,可以是“circular”或“square”。 後者是矩形地圖的預設值,前者是六邊形地圖的預設值。
- whatmap: 對於 supersom 地圖:在對映中使用哪些層。
- weights: 賦予各個層的權重。 預設值為 1/n,其中 n 是層的數量。
- maxNA.fraction: 允許為 NA 的值的最大比例,以防止刪除行或列。
- keep.data: 將資料儲存在返回值中。
返回一個類為“kohonen”的物件,包含以下元件
- data: 資料矩陣,僅在 keep.data == TRUE 時返回。
- contin: 引數指示資料元素是連續的還是分類的。
- na.rows: 由於至少一個層具有太多 NA,因此刪除的物件(行)的索引。
- unit.classif: 所有資料物件的獲勝單元,僅在 keep.data == TRUE 時返回。
- distances: 物件與其對應獲勝單元之間的距離,僅在 keep.data == TRUE 時返回。
- grid: 網格,一個類為 somgrid 的物件。
- codes: 包含程式碼簿向量的矩陣列表。
- changes: 程式碼向量平均偏差的矩陣; 每張地圖對應一列。
- toroidal: 是否使用環形地圖。
- n.hood: 鄰域的形狀,可以是“circular”或“square”。 後者是
- 矩形地圖的預設值,前者是六邊形地圖的預設值。
- weights: 對於 supersom 地圖:對映中使用的層的權重。
- whatmap: 對於 supersom 地圖:在對映中使用哪些層。
- method: 地圖型別,這裡為“supersom”。
將物件對映到訓練過的 Kohonen 地圖,併為每個物件返回與其對應獲勝單元相關的屬性 [7]。
## S3 method for class 'kohonen': predict(object, newdata, trainX, trainY, unit.predictions, threshold = 0, whatmap = NULL, weights = 1, ...)
引數是
- object: 訓練過的網路。
- newdata: 要進行預測的資料矩陣。 如果未給出,則預設為訓練資料(如果可用)。
- trainX: 用於獲取無監督地圖預測的訓練資料; 對於使用 keep.data = FALSE 選項訓練的 som 地圖來說是必需的。
- trainY: 訓練資料的因變數的值; 對於 som 和 supersom 地圖來說是必需的。
- unit.predictions: 每個單元預測值的可能覆蓋。
- threshold: 在類預測中使用; 參見 classmat2classvec。
- whatmap: 對於 supersom 地圖:在對映中使用哪些層。
- weights: 對於 supersom 地圖:對映中使用的層的權重。
- ...: 目前未使用。
返回一個包含以下元件的列表
- prediction: 對感興趣屬性的預測值。 當預測多個值時,此元素是一個列表,否則是一個向量或矩陣。
- unit.classif: 資料矩陣中物件對映到的單元編號。
- unit.predictions: 與地圖單元相關的平均值。 再次,當預測多個屬性時,這是一個列表。
將分類向量轉換為矩陣或反之亦然 [7]。
classvec2classmat(yvec) classmat2classvec(ymat, threshold=0)
引數是
- yvec: 類向量。 通常是整數值,但也允許其他型別。
- ymat: 類矩陣:每列對應一個類。
- threshold: 僅在機率大於此閾值時才分類到一個類中。
返回
- classvec2classmat: 返回分類矩陣,其中每列由零和一組成。
- classmat2classvec: 返回一個類向量(整數)。
檢查 whatmap 引數的有效性 [7]。
check.whatmap(x, whatmap)
引數是
- x: 或者是一個來自 supersom 的 kohonen 物件,或者是一個可以作為 supersom 輸入資料的 data 矩陣列表。
- whatmap: 資料子集的指示; 可以透過命名元素或給出索引來實現。 如果 whatmap 等於 NULL,則不執行任何選擇。
返回
- 返回一個包含所選層的索引的數值向量。
將資料矩陣對映到訓練過的 SOM [7]。
## S3 method for class 'kohonen': map(x, newdata, whatmap = NULL, weights, scale.distances = (nmaps > 1), ...)
引數是
- x: 來自函式 som、xyf 或 bdk 的訓練過的監督或無監督 SOM。
- newdata: 資料矩陣,行對應於物件。
- whatmap: 對於 supersom 地圖:要考慮的層。
- weights: 對於 supersom 地圖:用於對映的層的權重。
- scale.distances: 如果使用超 SOM 地圖,是否按層重新縮放距離(預設):如果為 TRUE,則每層的最大距離等於 1。如果應使用每層的距離的絕對值,則此引數應設定為 FALSE。請注意,在這種情況下,當對映訓練資料時,由 map.kohonen 返回的結果將與地圖中存在的對映不同。
- ...: 目前忽略。
返回一個包含以下元素的列表
- unit.classif: 與資料矩陣中的物件最接近的單元的向量。
- dists: 物件到單元的距離(目前僅限歐幾里得距離)。
- whatmap,weights,scale.distances: 用於這些引數的值。
函式 unit.distances
[edit | edit source]計算 SOM 中單元之間的距離[7]。
unit.distances(grid, toroidal)
引數是
- grid: somgrid 類的物件。
- toroidal: 如果為真,則地圖的邊緣連線起來,使拓撲成為環面。
返回
- 返回一個包含距離的(對稱)矩陣。當 grid$n.hood 等於“circular”時,使用歐幾里得距離;對於 grid$n.hood 為“square”則為最大距離。如果 toroidal 等於 TRUE,則地圖在邊緣連線,併為最短路徑計算距離。
函式 tricolor
[edit | edit source]該函式以這樣一種方式為 SOM 單元提供顏色值,即顏色在每個方向上平滑變化[7]。
tricolor(grid, phis = c(0, 2 * pi/3, 4 * pi/3), offset = 0)
引數是
- grid: somgrid 類的物件,例如 kohonen 物件中的網格元素。
- phis: 三個旋轉角度的向量。分別使用這些三個角度旋轉後,單元的 y 座標給出紅色、綠色和藍色的值。預設值對應於頂行中間單元的(近似)紅色,以及底部左側和右側單元的純綠色和藍色。如果是三角形地圖,則頂部的單元為純紅色。
- offset: 定義 RGB 顏色定義中的最小值(預設值為 0)。透過提供 [0, .9] 範圍內的值,提供類似柔和的顏色。
返回
- 返回一個包含三列的矩陣,分別對應於紅色、綠色和藍色。這可以在 rgb 函式中使用,為單元提供顏色。
檢視
[edit | edit source]在訓練階段之後,可以使用多個繪圖函式進行視覺化;該包可以顯示物件的對映位置,具有多種視覺化地圖單元程式碼本向量的選項,並提供評估訓練進度的方法。所有 SOM 型別都存在摘要函式。此外,可以輕鬆地將新資料投影到訓練過的地圖中;這提供了屬性估計的可能性[3]。
函式 summary 和 print
[edit | edit source]kohonen 物件的 summary 和 print 方法。print 方法顯示地圖的維度和拓撲;如果包含有關訓練資料的的資訊,則 summary 方法還會列印有關資料大小和物件與其最接近的程式碼本向量的平均距離的資訊,這是對映質量的指標[7]。
## S3 method for class 'kohonen': summary(object, ...) ## S3 method for class 'kohonen': print(x, ...)
引數是
- x, object: 一個 kohonen 物件
- ...: 未使用。
返回
圖 2:函式 print 返回的有關葡萄酒資料的的資訊
圖 3:函式 summary 返回的有關葡萄酒資料的的資訊
函式 plot.kohonen
[edit | edit source]繪製從 kohonen 函式獲得的自組織地圖。支援多種型別的繪圖[7]。
## S3 method for class 'kohonen':
plot(x, type = c("codes", "changes", "counts", "dist.neighbours", "mapping", "property", "quality"), classif = NULL,
labels = NULL, pchs = NULL, main = NULL, palette.name = heat.colors, ncolors, bgcol = NULL, zlim = NULL, heatkey = TRUE,
property, contin, whatmap = NULL, codeRendering = NULL, keepMargins = FALSE, heatkeywidth = .2, ...)
引數是
- x: kohonen 物件。
- type: 繪圖型別。
- classif: 分類物件(由 predict.kohonen 返回)或單元編號向量。僅當 type 等於“mapping”和“counts”時才需要。
- labels: 當 type 等於“mapping”時要繪製的標籤。
- pchs: 當 type 等於“mapping”時要繪製的符號。
- main: 繪圖的標題。
- palette.name: 用作“codes”、“counts”、“prediction”、“property”和“quality”繪圖型別中單元背景的顏色。
- ncolors: 用於單元背景的顏色數量。對於連續資料,預設為 20;對於分類資料,預設為不同值的個數(如果少於 20)。
- bgcol: 可選引數,用於為“mapping”和“codes”繪圖型別中的單元背景著色。分別預設為“gray”和“transparent”。
- zlim: 單元背景顏色編碼的可選範圍。
- heatkey: 是否在“property”和“counts”繪圖型別中在繪圖的左側生成熱鍵。
- property: 與“property”繪圖型別一起使用的值。
- contin: 資料是否應被視為離散的(即類別)或連續的。僅與監督網路的繪圖的顏色鍵相關。
- whatmap: 對於超 SOM 地圖和“codes”繪圖:要顯示的地圖。
- codeRendering: 如何顯示程式碼。可能的選項:“segments”、“stars”和“lines”。
- keepMargins: 如果為 FALSE(預設),則在繪製 kohonen 地圖後恢復原始圖形引數。如果為 TRUE,則保留地圖座標系,以便可以使用 identify 函式向繪圖新增符號或對映單元編號。
- Heatkeywidth: 顏色鍵的寬度;預設為 0.2,在大多數情況下應該可以工作,但在某些情況下(例如,繪製多個圖形時)可能需要調整。
- ...: 其他圖形引數,例如“mapping”繪圖型別中的標籤顏色或繪圖符號。
支援多種型別的繪圖
- "changes": 顯示訓練過程中與最接近的程式碼本向量的平均距離。
- "codes": 顯示程式碼本向量。
- "counts": 顯示對映到各個單元的物件數量。空單元用灰色表示。
- "dist.neighbours": 顯示到所有直接鄰居的距離之和。這種視覺化也被稱為 U 矩陣圖。可以預期類邊界附近的單元與其鄰居的平均距離更大。目前僅適用於“som”和“supersom”地圖。
- "mapping": 顯示物件的對映位置。它需要“classif”引數,以及“labels”或“pchs”引數。
- "property": 可以計算每個單元的屬性並用顏色程式碼顯示。它可以用來視覺化一個特定物件與地圖中所有單元的相似性,顯示所有單元和對映到它們的物件的平均相似性等等。引數 property 包含數值。
- "quality": 顯示對映到一個單元的物件與其程式碼本向量的平均距離。距離越小,物件在程式碼本向量中表示的越好。
返回
圖 4:左側:使用 type 為“counts”呼叫該函式。右側:使用 type 為“quality”呼叫該函式[3]。
圖 5:使用 type 為“property”呼叫函式 Plot[3]。
圖 6:使用 type 為“codes”呼叫函式 Plot[3]。
圖 7:使用 type 為“mapping”呼叫函式 Plot[3]。
圖 8:使用 type 為“changes”呼叫函式 Plot[3]。
案例研究
[edit | edit source]在本節中,我們將說明使用 Kohonen 包的案例研究。
場景
[edit | edit source]自組織地圖的標準形式在 som 函式中實現。要將 177 個樣本的葡萄酒資料集對映到一個 5x4 的六邊形單元地圖上,可以使用 som 函式。首先,載入包(從現在開始,我們假設包已載入),然後載入資料,隨後進行自動縮放,因為範圍差異很大(特別是脯氨酸濃度,變數 13,有偏差)。第十四個變數是一個類別變數,不在對映中使用;它將在稍後用於視覺化目的[3]。
輸入資料
[edit | edit source]作為輸入資料,我們使用 kohonen 包中包含的 wine 資料集。該資料集包含 177 行和 13 列;物件 vintages 包含類別標籤。為了與舊版本的包相容,變數 wine.classes 也被保留下來。這些資料是化學分析結果,分析了在義大利同一地區(皮埃蒙特)種植的葡萄酒,但來自三種不同的葡萄品種:內比奧羅、巴巴雷斯科和格里尼奧利諾。用內比奧羅葡萄釀造的葡萄酒被稱為巴羅洛。這些資料包含在三種葡萄酒中發現的多種成分的含量,以及一些光譜變數[3]。
以下程式碼可用於從資料集建立地圖。請注意,首先,您需要載入包,然後載入資料集。
> library("kohonen")
Loading required package: class
> data("wines")
> wines.sc <- scale(wines)
> set.seed(7)
> wine.som <- som(data = wines.sc, grid = somgrid(5, 4, "hexagonal"))
> plot(wine.som, main = "Wine data")
結果如圖 9 所示。碼本向量在段圖中視覺化,這是預設的繪圖型別。例如,高酒精含量與投影在地圖右下角的葡萄酒樣本相關聯,而顏色強度在左下角最大 [3].
圖 9:5x4 對映的葡萄酒資料碼本向量的圖 [3].
訓練結果,wine.som 物件,是一個列表。最重要的元素是 codes 元素,它包含碼本向量作為行。另一個值得檢查的元素是 changes,這是一個向量,指示訓練期間對碼本向量的適應大小。這可以用來評估迭代次數是否足夠 [3].
下面顯示了使用包中包含的 NIR 資料的示例:對於每種三元混合物,我們都有一個近紅外光譜,以及三種化學物質的濃度(總和為 1)。此外,每個樣品在五個不同的溫度下測量。下面示例的目標是對水含量(三種濃度中的第二種)進行建模。在三種化學物質中,水對 NIR 光譜的影響最大。我們首先載入資料並附加資料框,以便 spectra、composition 和 temperature 物件直接可用。引數 xweight 指示賦予 X 多大重要性;這裡它設定為 0.5(X 和 Y 同樣重要),也是 xyf 中的預設值 [3].
> data("nir")
> attach(nir)
> set.seed(13)
> nir.xyf <- xyf(data = spectra, Y = composition[,2], xweight = 0.5, grid = somgrid(6, 6, "hexagonal"))
> par(mfrow = c(1, 2))
> plot(nir.xyf, type = "counts", main = "NIR data: counts")
> plot(nir.xyf, type = "quality", main = "NIR data: mapping quality")
這導致如圖 4 所示的輸出。在左側圖中,單元的背景顏色對應於對映到該特定單元的樣本數量;它們在整個地圖上合理地分佈。四個單元是空的:沒有樣本被對映到它們。右側圖顯示了對映到特定單元的物件到該單元碼本向量的平均距離。一個好的對映應該在整個地圖上顯示很小的距離 [3].
- ↑ a b c d e f Pang-Ning Tan、Michael Steinbach 和 Vipin Kumar。資料探勘導論。Addison Wesley;美國版。2005 年 5 月 12 日。
- ↑ Katharine Mullen 和 Ron Wehrens。CRAN 任務檢視:化學計量學和計算物理學。2010-11-02。URL [1].
- ↑ a b c d e f g h i j k l m n o p Ron Wehrens 和 Lutgarde M. C. Buydens。R 中的自組織對映和超組織對映:kohonen 包。統計軟體雜誌,21(5):1-19, 10 2007。URL [2].
- ↑ Frank, A. & Asuncion, A. (2010)。UCI 機器學習資源庫 [3]。加州爾灣:加州大學資訊與計算機科學學院。
- ↑ Wülfert F, Kok WT, Smilde AK (1998)。溫度對振動光譜的影響及其對多元模型的影響。分析化學,70,1761–1767。
- ↑ Spellman PT, Sherlock G, Zhang MQ, Iyer VR, Anders K, Eisen MB, Brown PO, Botstein D, Futcher B (1998)。透過微陣列雜交全面識別釀酒酵母細胞週期調控基因。細胞分子生物學,9,3273–3297。
- ↑ a b c d e f g h i j k l Ron Wehrens 和 Lutgarde M. C. Buydens。R 中的自組織對映和超組織對映:kohonen 包。統計軟體雜誌,21(5):1-19, 10 2007。








