加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • MDS數(shù)據(jù)降維
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

R語言實戰(zhàn)——特征提取與降維之多維尺度分析

10/23 09:40
1598
閱讀需 11 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

多維尺度分析(Multidimensional Scaling,MDS)是一種用于分析數(shù)據(jù)之間相似性和差異性的技術(shù)。它將多維空間的研究對象(樣本或變量)簡化到低維空間進行定位、分析和歸類,同時又保留對象間原始關(guān)系的數(shù)據(jù)分析方法,是一種利用低維空間去展示高維數(shù)據(jù)的一種數(shù)據(jù)降維、數(shù)據(jù)可視化方法。該方法僅僅需要樣本之間的相似性或者距離,即可對數(shù)據(jù)進行降維。

多維尺度分析起源于,當僅能獲取物體之間的距離時,如何利用距離去重構(gòu)物體之間的歐幾里得坐標。多維尺度分析的基本目標是將原始數(shù)據(jù)“擬合”到一個低維坐標系中,使得由降維所引起的任何變形最小。多維尺度分析的方法很多,按照相似性數(shù)據(jù)測量測度不同可以分為:度量的MDS和非度量的MDS。

本文主要使用最常用的Classic MDS方法對數(shù)據(jù)進行多維尺度分析,并利用MDS進行數(shù)據(jù)降維可視化、利用距離矩陣重構(gòu)樣本的空間坐標等,介紹如何在R語言中進行多維尺度分析。

MDS數(shù)據(jù)降維

利用數(shù)據(jù)集中的魚的信息數(shù)據(jù)(數(shù)據(jù)集下載地址可添加小編客服索?。枚嗑S尺度分析對其進行降維,并對降維后的數(shù)據(jù)進行可視化,程序如下所示:

## 導入數(shù)據(jù),同樣使用前面用過的魚的信息數(shù)據(jù)fish <- read_csv("data/chap11/Fish.csv")## 對數(shù)據(jù)進行標準化預(yù)處理fish[,2:7]<- apply(fish[,2:7],2,scale)## 計算樣本之間的距離fish_dist <- dist(fish[,2:7],method = "euclidean")## 針對距離進行MDS數(shù)據(jù)降維fish_cmd <- cmdscale(fish_dist,k = 2)## 可視化樣本降維后的分布情況fish_cmd <- as.data.frame(fish_cmd)fish_cmd$Species <- fish$Speciesggplot(fish_cmd,aes(x = V1,y = V2))+  geom_point(aes(colour = Species,shape = Species))+  scale_shape_manual(values=c(15,16,17,9,3,4,8))+??labs(x?=?"D1",y?=?"D2",title?=?"MDS數(shù)據(jù)降維")

上面的程序中,讀取數(shù)據(jù)后,先對數(shù)據(jù)進行可標準化處理,然后使用dist()函數(shù)計算每個樣本之間的歐式距離,針對得到的距離矩陣fish_dist使用cmdscale()函數(shù)進行數(shù)據(jù)變換,將其降維到二維空間中(由參數(shù)k的取值控制),針對降維后的結(jié)果使用散點圖進行可視化,運行程序后可獲得如圖1所示的散點圖。

圖1.多維尺度變換可視化結(jié)果

計算樣本的空間位置

以上內(nèi)容是在知道數(shù)據(jù)樣本的特征后,計算樣本間的距離,然后通過距離矩陣計算每個樣本的空間分布。實際上,多維尺度變換很多時候不需要知道每個樣本的特征,只需要知道樣本之間的距離矩陣(相關(guān)性矩陣),即可對樣本點在空間中的分布情況進行重構(gòu)。其通常用于在知道地點之間距離的情況下,計算出每個地點在空間中的分布情況。

表1給出了澳大利亞8個城市之間的距離矩陣,希望利用多維尺度變換找到每個城市在空間的位置,并和城市的真實位置進行對比。

表1.澳大利亞8個城市之間的距離(單位:km)

針對這樣的問題,首先導入要使用的數(shù)據(jù),程序如下:

library(maps)library(leaflet)## 讀取澳大利亞8個城市之間的距離數(shù)據(jù)citydist <- read.csv("data/chap11/dist_Aus.csv")row.names(citydist) <- citydist[,1]citydist <- citydist[,-1]citydist##              Adelaide AliceSprings Brisbane Darwin Hobart Melbourne Perth## Adelaide            0         1328     1600   2616   1161       653  2130## AliceSprings     1328            0     1962   1289   2463      1889  1991

在上面的程序中,導入了需要使用的距離矩陣,為了將多維尺度變換得到的結(jié)果和城市之間的真實位置進行對比,先利用leaflet包可視化出每個城市在地圖上的位置分布,可視化程序如下所示,運行程序后可獲得各城市分布的地圖。

## 在地圖上可視化除8個城市的空間位置,和MDS的計算結(jié)果進行對比citynames <- c("Adelaide", "Alice Springs", "Brisbane","Darwin",                "Hobart", "Melbourne", "Perth", "Sydney")data(world.cities)   # 提取所有城市的地圖數(shù)據(jù)## 獲取幾個城市在城市數(shù)據(jù)中的數(shù)據(jù)citydf <- world.cities[world.cities$name %in% citynames,]citydf <- citydf[citydf$country.etc == "Australia",]## 在地圖上可視化城市所在位置leaflet(data = citydf,width = 700, height = 500) %>%addTiles() %>%  setView(lng = mean(citydf$long),lat = mean(citydf$lat),zoom = 4)%>%  addCircleMarkers(lat = ~lat, lng = ~long, label = ~name,radius = 5,                   color = "red", fillOpacity = 0.6,stroke = FALSE,???????????????????labelOptions?=?labelOptions(noHide?=?TRUE))

下面利用城市之間的距離矩陣,計算每個城市在二維空間中的位置,同樣使用cmdscale()函數(shù)計算,同時將計算的結(jié)果進行可視化,需要注意的是,在可視化時,X軸和Y軸的坐標均適用計算值是負值(這是因為多維尺度變換的結(jié)果可能與實際的位置坐標相反)。運行下面的程序后可獲得圖3。

##根據(jù)距離計算城市在空間中的相對位置citycmd <- cmdscale(citydist, eig = FALSE, k = 2)## 獲取每個城市在空間中的坐標citypos <- as.data.frame(citycmd)colnames(citypos) <- c("X","Y")citypos$name <- citynames## 在二維空間中可視化除城市的分布ggplot(citypos,aes(x = -X,y = -Y))+geom_point(colour = "red")+  geom_text(aes(x = -X+100,y = -Y+100,label = name))+??ggtitle("城市之間的空間位置")+coord_equal()

圖2.利用多維尺度變換計算得到的空間分布

由圖2可以發(fā)現(xiàn),利用多維尺度變換計算得到的結(jié)果,與每個城市的真實空間分布很相似。

以上內(nèi)容節(jié)選自《R語言實戰(zhàn)——數(shù)據(jù)整理、可視化、建模與挖掘》作者:薛震 孫玉林

相關(guān)圖書

本書是一本數(shù)據(jù)科學的入門與提升教程,全書共5篇,按照由淺入深、循序漸進的方式介紹R語言的基本語法與實際應(yīng)用,并結(jié)合現(xiàn)實數(shù)據(jù)進行實戰(zhàn)操作。內(nèi)容涵蓋R語言的安裝與運行、數(shù)據(jù)對象的創(chuàng)建與編程、R語言初級與高級繪圖、數(shù)據(jù)的管理與清洗、統(tǒng)計分析與數(shù)據(jù)降維、無監(jiān)督與有監(jiān)督學習、利用R Markdown創(chuàng)建動態(tài)報告和制作幻燈片等。

撰? 稿? 人:計旭

責任編輯:張淑謙

審? 核? 人:曹新宇

相關(guān)推薦

電子產(chǎn)業(yè)圖譜