最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

拓端tecdat|R語言使用自組織映射神經(jīng)網(wǎng)絡(luò)(SOM)進(jìn)行客戶細(xì)分

2021-06-30 23:27 作者:拓端tecdat  | 我要投稿

原文鏈接:http://tecdat.cn/?p=18726?

自組織映射神經(jīng)網(wǎng)絡(luò)(SOM)是一種無監(jiān)督的數(shù)據(jù)可視化技術(shù),可用于可視化低維(通常為2維)表示形式的高維數(shù)據(jù)集。在本文中,我們研究了如何使用R創(chuàng)建用于客戶細(xì)分的SOM。

SOM由1982年在芬蘭的Teuvo Kohonen首次描述,而Kohonen在該領(lǐng)域的工作使他成為世界上被引用最多的芬蘭科學(xué)家。通常,SOM的可視化是六邊形節(jié)點(diǎn)的彩色2D圖。

SOM

SOM可視化由多個“節(jié)點(diǎn)”組成。每個節(jié)點(diǎn)向量具有:

  • 在SOM網(wǎng)格上的位置

  • 與輸入空間維度相同的權(quán)重向量。(例如,如果您的輸入數(shù)據(jù)代表人,則可能具有變量“年齡”,“性別”,“身高”和“體重”,網(wǎng)格上的每個節(jié)點(diǎn)也將具有這些變量的值)

  • 輸入數(shù)據(jù)中的關(guān)聯(lián)樣本。輸入空間中的每個樣本都“映射”或“鏈接”到網(wǎng)格上的節(jié)點(diǎn)。一個節(jié)點(diǎn)可以代表多個輸入樣本。

SOM的關(guān)鍵特征是原始輸入數(shù)據(jù)的拓?fù)涮卣鞅A粼趫D上。這意味著將相似的輸入樣本(其中相似性是根據(jù)輸入變量(年齡,性別,身高,體重)定義的)一起放置在SOM網(wǎng)格上。例如,所有高度大約為1.6m的55歲女性將被映射到網(wǎng)格同一區(qū)域中的節(jié)點(diǎn)??紤]到所有變量,身材矮小的人將被映射到其他地方。在身材上,高個的男性比小個的胖男性更接近高個頭的女性,因?yàn)樗麄儭跋嗨啤钡枚唷?/p>

SOM熱圖

典型的SOM可視化是“熱圖”。熱圖顯示了變量在SOM中的分布。理想情況下,相似年齡的人應(yīng)該聚集在同一地區(qū)。

下圖使用兩個熱圖說明平均教育水平和失業(yè)率之間的關(guān)系。

SOM算法

從樣本數(shù)據(jù)集生成SOM的算法可總結(jié)如下:

  1. 選擇地圖的大小和類型。形狀可以是六邊形或正方形,具體取決于所需節(jié)點(diǎn)的形狀。通常,最好使用六邊形網(wǎng)格,因?yàn)槊總€節(jié)點(diǎn)都具有6個近鄰 。

  2. 隨機(jī)初始化所有節(jié)點(diǎn)權(quán)重向量。

  3. 從訓(xùn)練數(shù)據(jù)中選擇一個隨機(jī)數(shù)據(jù)點(diǎn),并將其呈現(xiàn)給SOM。

  4. 在地圖上找到“最佳匹配單位”(BMU)–最相似的節(jié)點(diǎn)。使用歐幾里德距離公式計(jì)算相似度。

  5. 確定BMU“鄰居”內(nèi)的節(jié)點(diǎn)。
    –鄰域的大小隨每次迭代而減小。

  6. 所選數(shù)據(jù)點(diǎn)調(diào)整BMU鄰域中節(jié)點(diǎn)的權(quán)重。
    –學(xué)習(xí)率隨著每次迭代而降低。
    –調(diào)整幅度與節(jié)點(diǎn)與BMU的接近程度成正比。

  7. 重復(fù)步驟2-5,進(jìn)行N次迭代/收斂。

R中的SOM

訓(xùn)練

R可以創(chuàng)建SOM和可視化。

  1. # 在R中創(chuàng)建自組織映射


  2. # 創(chuàng)建訓(xùn)練數(shù)據(jù)集(行是樣本,列是變量



  3. # 在這里,我選擇“數(shù)據(jù)”中可用的變量子集



  4. data_train <- data[, c(3,4,5,8)]


  5. #將帶有訓(xùn)練數(shù)據(jù)的數(shù)據(jù)框更改為矩陣


  6. #同時對所有變量進(jìn)行標(biāo)準(zhǔn)化


  7. #SOM訓(xùn)練過程。


  8. data_train_matrix <- as.matrix(scale(data_train))


  9. #創(chuàng)建SOM網(wǎng)格


  10. #在訓(xùn)練SOM之前先訓(xùn)練網(wǎng)格



  11. grid(xdim = 20, ydim=20, topo="hexagonal")


  12. #最后,訓(xùn)練SOM,迭代次數(shù)選項(xiàng),


  13. #學(xué)習(xí)率


  14. model <- som(data_train_matrix)

可視化

可視化可以檢察生成SOM的質(zhì)量,并探索數(shù)據(jù)集中變量之間的關(guān)系。

  1. 訓(xùn)練過程:
    隨著SOM訓(xùn)練迭代的進(jìn)行,從每個節(jié)點(diǎn)的權(quán)重到該節(jié)點(diǎn)表示的樣本的距離將減小。理想情況下,該距離應(yīng)達(dá)到最小。此圖選項(xiàng)顯示了隨著時間的進(jìn)度。如果曲線不斷減小,則需要更多的迭代。

    1. #SOM的訓(xùn)練進(jìn)度


    2. plot(model, type="changes")

  1. 節(jié)點(diǎn)計(jì)數(shù)
    我們可以可視化映射到地圖上每個節(jié)點(diǎn)的樣本數(shù)。此度量可以用作圖質(zhì)量的度量-理想情況下,樣本分布相對均勻。選擇圖大小時,每個節(jié)點(diǎn)至少要有5-10個樣本。?

    1. #節(jié)點(diǎn)數(shù)


    2. plot(model, type="count")

  1. 鄰居距離
    通常稱為“ U矩陣”,此可視化表示每個節(jié)點(diǎn)與其鄰居之間的距離。通常使用灰度查看,鄰居距離低的區(qū)域表示相似的節(jié)點(diǎn)組。距離較大的區(qū)域表示節(jié)點(diǎn)相異得多。U矩陣可用于識別SOM映射內(nèi)的類別。

    1. # U-matrix 可視化


  1. 代碼/權(quán)重向量
    節(jié)點(diǎn)權(quán)重向量由用于生成SOM的原始變量值。每個節(jié)點(diǎn)的權(quán)重向量代表/相似于映射到該節(jié)點(diǎn)的樣本。通過可視化整個地圖上的權(quán)重向量,我們可以看到樣本和變量分布中的模型。權(quán)重向量的默認(rèn)可視化是一個“扇形圖”,其中為每個節(jié)點(diǎn)顯示了權(quán)重向量中每個變量的大小的各個扇形表示。

    1. # 權(quán)重矢量視圖


  1. 熱圖
    圖是也許是自組織圖中最重要的可能的可視化。通常,SOM過程創(chuàng)建多個熱圖,然后比較這些熱圖以識別圖上有趣的區(qū)域。
    在這種情況下,我們將SOM的平均教育水平可視化。

  1. 應(yīng)該注意的是,該默認(rèn)可視化繪制了感興趣變量的標(biāo)準(zhǔn)化版本。

  1. 值得注意的是,上面的熱圖顯示了失業(yè)率與教育水平之間的反比關(guān)系。并排顯示的其他熱圖可用于構(gòu)建不同區(qū)域及其特征的圖片。

  1. SOM網(wǎng)格中具有空節(jié)點(diǎn)的熱圖
    在某些情況下,您的SOM訓(xùn)練可能會導(dǎo)致SOM圖中的節(jié)點(diǎn)為空。通過幾行,我們可以找到som_model $ unit.classif中缺少的節(jié)點(diǎn),并將其替換為NA值–此步驟將防止空節(jié)點(diǎn)扭曲您的熱圖。

    1. # 當(dāng)SOM中有空節(jié)點(diǎn)時繪制未標(biāo)準(zhǔn)化的變量




    2. var_unscaled <- aggregate(as.numeric(data_train_raw), by=list(som_model$unit.classif), FUN=mean)


    3. # 為未分配的節(jié)點(diǎn)添加NA值




    4. missingNodes <- which(!(seq(1,nrow(som_model$codes) %in% varunscaled$Node))


    5. # 將它們添加到未標(biāo)準(zhǔn)化的數(shù)據(jù)框




    6. var_unscaled <- rbind(var_unscaled, data.frame(Node=missingNodes, Value=NA))


    7. # 結(jié)果數(shù)據(jù)框



    8. var_unscaled


    9. # 現(xiàn)在僅使用正確的“值”創(chuàng)建熱圖。




    10. plot(som_model, type =d)

    11. # 未標(biāo)準(zhǔn)化的熱圖




    12. #定義要繪制的變量




    13. aggregate(as.numeric(data_train, by=list(som_model$unit.classi FUN=mean)

    14. # 熱圖創(chuàng)建


自組織圖的聚類和分割

可以在SOM節(jié)點(diǎn)上執(zhí)行聚類,以發(fā)現(xiàn)具有相似度量的樣本組??梢允褂胟means算法并檢查“類內(nèi)平方和之內(nèi)”圖中的“肘點(diǎn)”來確定合適的聚類數(shù)估計(jì)。

  1. # 查看WCSS的kmeans



  2. for (i in 2:15) {


  3. wss[i] <- sum(kmeans(mydata, centers=i)$withinss)


  4. }



  5. # 可視化聚類結(jié)果




  6. ##使用分層聚類對向量進(jìn)行聚類

  7. cutree(hclust(dist(som_model$codes)), 6)


  8. # 繪制這些結(jié)果:




  9. plot(som_model, t"mappinol =ty_pal

理想情況下,發(fā)現(xiàn)的類別在圖表面上是連續(xù)的。為了獲得連續(xù)的聚類,可以使用僅在SOM網(wǎng)格上僅將相似AND的節(jié)點(diǎn)組合在一起的層次聚類算法。

將聚類映射回原始樣本

當(dāng)按照上面的代碼示例應(yīng)用聚類算法時,會將聚類分配給?SOM映射上的每個?節(jié)點(diǎn),而不是?數(shù)據(jù)集中的原始?樣本

  1. # 為每個原始數(shù)據(jù)樣本獲取具有聚類值的向量


  2. som_clust[som_modl$unit.clasf]


  3. # 為每個原始數(shù)據(jù)樣本獲取具有聚類值的向量


  4. data$cluster <- cluster_assignment

使用每個聚類中訓(xùn)練變量的統(tǒng)計(jì)信息和分布來構(gòu)建聚類特征的有意義的圖片-這既是藝術(shù)又是科學(xué),聚類和可視化過程通常是一個迭代過程。

結(jié)論

自組織映射(SOM)是數(shù)據(jù)科學(xué)中的一個強(qiáng)大工具。優(yōu)勢包括:

  • 發(fā)現(xiàn)客戶細(xì)分資料的直觀方法。

  • 相對簡單的算法,易于向非數(shù)據(jù)科學(xué)家解釋結(jié)果

  • 可以將新的數(shù)據(jù)點(diǎn)映射到經(jīng)過訓(xùn)練的模型以進(jìn)行預(yù)測。

缺點(diǎn)包括:

  • 由于訓(xùn)練數(shù)據(jù)集是迭代的,因此對于非常大的數(shù)據(jù)集缺乏并行化功能

  • 很難在二維平面上表示很多變量

  • SOM訓(xùn)練需要清理后的,數(shù)值的數(shù)據(jù),這些數(shù)據(jù)很難獲得。

最受歡迎的見解

1.R語言k-Shape算法股票價格時間序列聚類

2.R語言中不同類型的聚類方法比較

3.R語言對用電負(fù)荷時間序列數(shù)據(jù)進(jìn)行K-medoids聚類建模和GAM回歸

4.r語言鳶尾花iris數(shù)據(jù)集的層次聚類

5.Python Monte Carlo K-Means聚類實(shí)戰(zhàn)

6.用R進(jìn)行網(wǎng)站評論文本挖掘聚類

7.用于NLP的Python:使用Keras的多標(biāo)簽文本LSTM神經(jīng)網(wǎng)絡(luò)

8.R語言對MNIST數(shù)據(jù)集分析 探索手寫數(shù)字分類數(shù)據(jù)

9.R語言基于Keras的小數(shù)據(jù)集深度學(xué)習(xí)圖像分類


拓端tecdat|R語言使用自組織映射神經(jīng)網(wǎng)絡(luò)(SOM)進(jìn)行客戶細(xì)分的評論 (共 條)

分享到微博請遵守國家法律
札达县| 隆回县| 崇礼县| 上林县| 阿尔山市| 南部县| 黄冈市| 定南县| 青浦区| 仁怀市| 大渡口区| 苗栗市| 岢岚县| 普兰店市| 马龙县| 兴安盟| 乐东| 双峰县| 宁国市| 宜丰县| 吐鲁番市| 渭源县| 德钦县| 邵阳县| 阿克陶县| 澄江县| 屯昌县| 宜丰县| 富顺县| 全南县| 大理市| 湟源县| 郑州市| 和田市| 临清市| 黔西| 齐齐哈尔市| 新昌县| 佳木斯市| 南汇区| 赣榆县|