拓端tecdat|R語言中的SOM(自組織映射神經(jīng)網(wǎng)絡)對NBA球員聚類分析
原文鏈接:http://tecdat.cn/?p=19077
導入
自組織映射?(SOM)是一種工具,通過生成二維表示來可視化高維數(shù)據(jù)中的模式,在高維結構中顯示有意義的模式。通過以下方式使用給定的數(shù)據(jù)(或數(shù)據(jù)樣本)對SOM進行“訓練”:
定義了網(wǎng)格的大小。
網(wǎng)格中的每個單元都在數(shù)據(jù)空間中分配了一個初始化向量。
例如,如果要創(chuàng)建22維空間的地圖,則會為每個網(wǎng)格單元分配一個22維向量。
數(shù)據(jù)被反復輸入到模型中進行訓練。每次輸入訓練向量時,都會執(zhí)行以下過程:
識別具有最接近訓練向量的代表向量的網(wǎng)格單元。
隨著訓練向量的多次輸入,收斂的參數(shù)使調整變得越來越小,從而使地圖穩(wěn)定。
該算法賦予SOM的關鍵特征:數(shù)據(jù)空間中接近的點在SOM中更接近。因此,SOM可能是表示數(shù)據(jù)中的空間聚類的好工具。
Kohonen映射類型
下面的示例將使用2015/16 NBA賽季的球員統(tǒng)計數(shù)據(jù)。我們將查看每36分鐘更新一次的球員統(tǒng)計信息。這些數(shù)據(jù)可從?http://www.basketball-reference.com/獲得。我們已經(jīng)清理了數(shù)據(jù)。
NBA <- read.csv("NBA_cleaned.csv",
sep = ",", header = T, check.names = FALSE)
基本SOM
在創(chuàng)建SOM之前,我們需要選擇要在其中搜索模式的變量。
colnames(NBA)
## ?[1] "" ? ? ? "Player" "Pos" ? ?"Age" ? ?"Tm" ? ? "G" ? ? ?"GS"
## ?[8] "MP" ? ? "FG" ? ? "FGA" ? ?"FG%" ? ?"3P" ? ? "3PA" ? ?"3P%"
## [15] "2P" ? ? "2PA" ? ?"2P%" ? ?"FT" ? ? "FTA" ? ?"FT%" ? ?"ORB"
## [22] "DRB" ? ?"TRB" ? ?"AST" ? ?"STL" ? ?"BLK" ? ?"TOV" ? ?"PF"
## [29] "PTS"
我們從簡單示例開始:
som(scale(NBA[res1], grid = somgrid(6, 4, "rectangular")

請注意,我們標準化了訓練數(shù)據(jù),并定義了網(wǎng)格大小。標準SOM圖可為網(wǎng)格單元的代表矢量創(chuàng)建這些餅圖表示,其中半徑對應于特定維度上的大小。
熱圖SOM
我們可以通過將每個球員分配到具有最接近該球員狀態(tài)的代表向量來識別地圖?!坝嫈?shù)”類型的SOM根據(jù)球員數(shù)量創(chuàng)建了一個熱圖。
# 色帶
colors <- function(n, alpha = 1) {
rev(heat.colors(n, alpha))
}
繪圖點
您可以使用“映射”類型的SOM將球員繪制為網(wǎng)格上的點。我們與常規(guī)SOM進行可視化比較。
每個地圖單元格的代表性矢量顯示在右側。左側是根據(jù)其狀態(tài)與這些代表向量的接近程度繪制的球員圖表。
環(huán)形SOM
下一個示例是一種更改幾何形狀的方法。在為上述示例訓練SOM時,我們使用了矩形網(wǎng)格。由于邊緣(尤其是拐角處)的單元比內部單元具有更少的鄰居,因此傾向于將更多的極端值推到邊緣。
par(mfrow = c(1, 2))
plot(NBA.SOM2, type = "mapping", pchs = 20, main = "Mapping Type SOM")
plot(NBA.SOM2, main = "Default SOM Plot")
映射距離
當用繪制時?type = "dist.neighbours"
,單元格將根據(jù)與它們最近的鄰居的距離著色,這使我們可以直觀地看到高維空間中不同要素之間的距離。
plot(SOM2, type = "dist.neighbours")
有監(jiān)督SOM
有監(jiān)督的SOM使我們可以進行分類。到目前為止,我們僅將三維數(shù)據(jù)映射到二維。當我們處理更高維度的數(shù)據(jù)時,SOM的實用性變得更加明顯,因此讓我們使用擴展的球員統(tǒng)計信息列表來做這個受監(jiān)督的示例:
我們創(chuàng)建有監(jiān)督的SOM,并根據(jù)球員在球場上的位置對其進行分類。我們將數(shù)據(jù)隨機分為訓練集和測試集。
indices <- sample(nrow(NBA), 200)
training <- scale(NBA[indices, NBA.measures2])
testing <- scale(NBA[-indices, NBA.measures2], center = attr(training,
"scaled:center"), scale = attr(training, "scaled:scale"))
請注意,當我們重新標準化測試數(shù)據(jù)時,我們需要根據(jù)訓練數(shù)據(jù)的方式對其進行標準化。
您可以在訓練算法中對訓練變量(NBA.training
)與預測變量(NBA$Pos
)進行加權?,F(xiàn)在讓我們檢查預測的準確性:
##
## ? ? ? ? ? ? ? ? ?Center Point Guard Power Forward Shooting Guard
## ? Center ? ? ? ? ? ? 16 ? ? ? ? ? 0 ? ? ? ? ? ?26 ? ? ? ? ? ? ?1
## ? Point Guard ? ? ? ? 0 ? ? ? ? ?49 ? ? ? ? ? ? 0 ? ? ? ? ? ? 12
## ? Power Forward ? ? ?10 ? ? ? ? ? 1 ? ? ? ? ? ?29 ? ? ? ? ? ? ?5
## ? Shooting Guard ? ? ?0 ? ? ? ? ? 8 ? ? ? ? ? ? 4 ? ? ? ? ? ? 38
## ? Small Forward ? ? ? 0 ? ? ? ? ? 0 ? ? ? ? ? ?15 ? ? ? ? ? ? ?9
##
## ? ? ? ? ? ? ? ? ?Small Forward
## ? Center ? ? ? ? ? ? ? ? ? ? 4
## ? Point Guard ? ? ? ? ? ? ? 11
## ? Power Forward ? ? ? ? ? ? ?8
## ? Shooting Guard ? ? ? ? ? ?19
## ? Small Forward ? ? ? ? ? ? 38
可視化預測:
這次,我們使用xweight
?參數(shù)為權重衡量球員統(tǒng)計數(shù)據(jù)?。
使用type = "codes"
?我們進行繪制,可以?得到標準的可視化球員狀態(tài)(Codes X
)和球員位置預測(Codes Y
)。
add.cluster.boundaries(NBA.SOM4, NBA.SOM4.hc)

該視圖使我們可以將球員統(tǒng)計數(shù)據(jù)與位置預測進行比較。
可視化預測:自定義SOM
在最后一個示例中,我們將對該type = mapping
?圖進行一些自定義,?以便我們可以同時表示實際球員位置和SOM的預測位置。我們將從可視化開始。

背景顏色繪制的球員點的背景代表其真實位置。
bg.pallet <- c("red", "blue", "yellow", "purple", "green")
# 為所有單元格制作僅背景顏色的矢量
base.color.vector <- bg.pallet[match(position.predictions, levels(NBA$Pos))]
# 設置alpha以最大的預測置信度標準化
max.conf <- apply(NBA.SOM4$codes$Y, 1, max)

最受歡迎的見解
1.R語言k-Shape算法股票價格時間序列聚類
2.R語言中不同類型的聚類方法比較
3.R語言對用電負荷時間序列數(shù)據(jù)進行K-medoids聚類建模和GAM回歸
4.r語言鳶尾花iris數(shù)據(jù)集的層次聚類
5.Python Monte Carlo K-Means聚類實戰(zhàn)
6.用R進行網(wǎng)站評論文本挖掘聚類
7.用于NLP的Python:使用Keras的多標簽文本LSTM神經(jīng)網(wǎng)絡
8.R語言對MNIST數(shù)據(jù)集分析 探索手寫數(shù)字分類數(shù)據(jù)
9.R語言基于Keras的小數(shù)據(jù)集深度學習圖像分類