多維尺度分析(Multidimensional Scaling,MDS)是一種用于分析數(shù)據(jù)之間相似性和差異性的技術(shù)。它將多維空間的研究對象(樣本或變量)簡化到低維空間進(jìn)行定位、分析和歸類,同時(shí)又保留對象間原始關(guān)系的數(shù)據(jù)分析方法,是一種利用低維空間去展示高維數(shù)據(jù)的一種數(shù)據(jù)降維、數(shù)據(jù)可視化方法。該方法僅僅需要樣本之間的相似性或者距離,即可對數(shù)據(jù)進(jìn)行降維。
多維尺度分析起源于,當(dāng)僅能獲取物體之間的距離時(shí),如何利用距離去重構(gòu)物體之間的歐幾里得坐標(biāo)。多維尺度分析的基本目標(biāo)是將原始數(shù)據(jù)“擬合”到一個(gè)低維坐標(biāo)系中,使得由降維所引起的任何變形最小。多維尺度分析的方法很多,按照相似性數(shù)據(jù)測量測度不同可以分為:度量的MDS和非度量的MDS。
本文主要使用最常用的Classic MDS方法對數(shù)據(jù)進(jìn)行多維尺度分析,并利用MDS進(jìn)行數(shù)據(jù)降維可視化、利用距離矩陣重構(gòu)樣本的空間坐標(biāo)等,介紹如何在R語言中進(jìn)行多維尺度分析。
MDS數(shù)據(jù)降維
利用數(shù)據(jù)集中的魚的信息數(shù)據(jù)(數(shù)據(jù)集下載地址可添加小編客服索?。?,利用多維尺度分析對其進(jìn)行降維,并對降維后的數(shù)據(jù)進(jìn)行可視化,程序如下所示:
## 導(dǎo)入數(shù)據(jù),同樣使用前面用過的魚的信息數(shù)據(jù)
fish <- read_csv("data/chap11/Fish.csv")
## 對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化預(yù)處理
fish[,2:7]<- apply(fish[,2:7],2,scale)
## 計(jì)算樣本之間的距離
fish_dist <- dist(fish[,2:7],method = "euclidean")
## 針對距離進(jìn)行MDS數(shù)據(jù)降維
fish_cmd <- cmdscale(fish_dist,k = 2)
## 可視化樣本降維后的分布情況
fish_cmd <- as.data.frame(fish_cmd)
fish_cmd$Species <- fish$Species
ggplot(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ù)進(jìn)行可標(biāo)準(zhǔn)化處理,然后使用dist()函數(shù)計(jì)算每個(gè)樣本之間的歐式距離,針對得到的距離矩陣fish_dist使用cmdscale()函數(shù)進(jìn)行數(shù)據(jù)變換,將其降維到二維空間中(由參數(shù)k的取值控制),針對降維后的結(jié)果使用散點(diǎn)圖進(jìn)行可視化,運(yùn)行程序后可獲得如圖1所示的散點(diǎn)圖。
圖1.多維尺度變換可視化結(jié)果
計(jì)算樣本的空間位置
以上內(nèi)容是在知道數(shù)據(jù)樣本的特征后,計(jì)算樣本間的距離,然后通過距離矩陣計(jì)算每個(gè)樣本的空間分布。實(shí)際上,多維尺度變換很多時(shí)候不需要知道每個(gè)樣本的特征,只需要知道樣本之間的距離矩陣(相關(guān)性矩陣),即可對樣本點(diǎn)在空間中的分布情況進(jìn)行重構(gòu)。其通常用于在知道地點(diǎn)之間距離的情況下,計(jì)算出每個(gè)地點(diǎn)在空間中的分布情況。
表1給出了澳大利亞8個(gè)城市之間的距離矩陣,希望利用多維尺度變換找到每個(gè)城市在空間的位置,并和城市的真實(shí)位置進(jìn)行對比。
表1.澳大利亞8個(gè)城市之間的距離(單位:km)
針對這樣的問題,首先導(dǎo)入要使用的數(shù)據(jù),程序如下:
library(maps)
library(leaflet)
## 讀取澳大利亞8個(gè)城市之間的距離數(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
…
在上面的程序中,導(dǎo)入了需要使用的距離矩陣,為了將多維尺度變換得到的結(jié)果和城市之間的真實(shí)位置進(jìn)行對比,先利用leaflet包可視化出每個(gè)城市在地圖上的位置分布,可視化程序如下所示,運(yùn)行程序后可獲得各城市分布的地圖。
## 在地圖上可視化除8個(gè)城市的空間位置,和MDS的計(jì)算結(jié)果進(jìn)行對比
citynames <- c("Adelaide", "Alice Springs", "Brisbane","Darwin",
"Hobart", "Melbourne", "Perth", "Sydney")
data(world.cities) # 提取所有城市的地圖數(shù)據(jù)
## 獲取幾個(gè)城市在城市數(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))
下面利用城市之間的距離矩陣,計(jì)算每個(gè)城市在二維空間中的位置,同樣使用cmdscale()函數(shù)計(jì)算,同時(shí)將計(jì)算的結(jié)果進(jìn)行可視化,需要注意的是,在可視化時(shí),X軸和Y軸的坐標(biāo)均適用計(jì)算值是負(fù)值(這是因?yàn)槎嗑S尺度變換的結(jié)果可能與實(shí)際的位置坐標(biāo)相反)。運(yùn)行下面的程序后可獲得圖3。
##根據(jù)距離計(jì)算城市在空間中的相對位置
citycmd <- cmdscale(citydist, eig = FALSE, k = 2)
## 獲取每個(gè)城市在空間中的坐標(biāo)
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.利用多維尺度變換計(jì)算得到的空間分布
由圖2可以發(fā)現(xiàn),利用多維尺度變換計(jì)算得到的結(jié)果,與每個(gè)城市的真實(shí)空間分布很相似。
以上內(nèi)容節(jié)選自《R語言實(shí)戰(zhàn)——數(shù)據(jù)整理、可視化、建模與挖掘》作者:薛震 孫玉林
相關(guān)圖書
本書是一本數(shù)據(jù)科學(xué)的入門與提升教程,全書共5篇,按照由淺入深、循序漸進(jìn)的方式介紹R語言的基本語法與實(shí)際應(yīng)用,并結(jié)合現(xiàn)實(shí)數(shù)據(jù)進(jìn)行實(shí)戰(zhàn)操作。內(nèi)容涵蓋R語言的安裝與運(yùn)行、數(shù)據(jù)對象的創(chuàng)建與編程、R語言初級與高級繪圖、數(shù)據(jù)的管理與清洗、統(tǒng)計(jì)分析與數(shù)據(jù)降維、無監(jiān)督與有監(jiān)督學(xué)習(xí)、利用R Markdown創(chuàng)建動(dòng)態(tài)報(bào)告和制作幻燈片等。
撰? 稿? 人:計(jì)旭
責(zé)任編輯:張淑謙
審? 核? 人:曹新宇