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

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

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

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

多維尺度分析(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$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ù)進(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é)任編輯:張淑謙

審? 核? 人:曹新宇

相關(guān)推薦

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