R語言做t-SNE降維的一個簡單小例子

2022-01-01 小明的數據分析筆記本

之前有人在公眾號留言問過用R語言如何實現t-SNE降維,今天的推文介紹一下R語言實現的代碼,主要內容參考自連結 https://datavizpyr.com/how-to-make-tsne-plot-in-r/

t-SNE 的全稱是 t-Distributed Stochastic Neighbor Embedding,具體的計算原理我也不懂,反正就是類似PCA把高維度的數據轉換成低維度的數據

示例數據集用到的是企鵝的數據集,名稱是penguins,這個數據集來自於R包palmerpenguins,如果要用這個數據還需要安裝這個R包,實現t-SNE需要用到R包Rtsne。R包tidyverse是用來做數據整理的,所以先加載這三個R包,如果是第一次使用需要先安裝,安裝命令是

install.packages("tidyverse")
install.packages("palmerpenguins")
install.packages("Rtsne")

加載需要用到的R包
library(tidyverse)
library(palmerpenguins)
library(Rtsne)

選擇數據集中的數值型變量用於後續分析
penguins %>% 
  select(where(is.numeric),-year,species) %>%
  mutate(ID=row_number()) %>% 
  column_to_rownames("ID") %>% 
  na.omit()-> df

這裡新學到的函數

選擇數據框中的數值變量 select(where(is.numeric))給數據集添加1:多少行的數字 mutate(ID=row_number())數據集裡指定列作為行名(前提是不能有重複)column_to_rownames("ID")t-SNE降維
tSNE_fit<-df %>% 
  select(-species) %>% 
  scale() %>% 
  Rtsne()

提取降維結果
tSNE_fit$Y %>% 
  as.data.frame() %>% 
  rename(tSNE1="V1",
         tSNE2="V2") %>% 
  mutate(Species=df$species) -> tSNE.plot

散點圖展示結果
library(ggplot2)
ggplot()+
  geom_point(data=tSNE.plot,
             aes(x=tSNE1,y=tSNE2,color=Species))+
  stat_ellipse(data=tSNE.plot,
               geom="polygon",
               aes(x=tSNE1,y=tSNE2,
                   group=Species,
                   fill=Species),
               alpha=0.5,
               lty="dashed",
               color="black",
               key_glyph="blank")+
  theme_bw()

優雅的修改圖例

https://mp.weixin.qq.com/s/I3YnxqulQRu-9i-gZIh7fA

image.png

歡迎大家關注我的公眾號

小明的數據分析筆記本


留言討論相關內容

今天推文的示例代碼可以在公眾號後臺留言回復20210827獲取

小明的數據分析筆記本 公眾號 主要分享:1、R語言和python做數據分析和數據可視化的簡單小例子;2、園藝植物相關轉錄組學、基因組學、群體遺傳學文獻閱讀筆記;3、生物信息學入門學習資料及自己的學習筆記!

相關焦點

  • 比PCA降維更高級——(R/Python)t-SNE聚類算法實踐指南
    本文講解比PCA(1933)更有效的算法t-SNE(2008)。本文內容1 什麼是t-SNE?2 什麼是降維?3 t-SNE如何在維數降低算法空間中擬合4 t-SNE算法的細節5 t-SNE實際上是做什麼?
  • 還在用PCA降維?快學學大牛最愛的t-SNE算法吧(附Python/R代碼)
    3.t-SNE與其他降維算法4.t-SNE的算法細節  4.1 算法  4.2 時間和空間複雜性5.t-SNE實際上做什麼?因此,t-SNE也嘗試最小化條件概率之差的總和值。 但它通過使用對稱版本的SNE代價函數,使用簡單的梯度。此外,t-SNE在低維空間中採用長尾分布,以減輕擁擠問題(參考下面譯者解釋)和SNE的優化問題。
  • 通俗理解一個常用的降維算法(t-SNE)
    當我們想對高維數據集進行分類,但又不清楚這個數據集有沒有很好的可分性(同類之間間隔小、異類之間間隔大)時,可以通過降維算法將數據投影到二維或三維空間中。很久以前,就有人提出一種降維算法,主成分分析(PCA) 降維法,中間其他的降維算法陸續出現,比如 多維縮放(MDS),線性判別分析(LDA),等度量映射(Isomap)。
  • sklearn與機器學習系列專題之降維(七)一文弄懂t-SNE特徵篩選&降維
    ,小編也不知道,隨緣吧)裡,小編在此再次介紹一種流行學習方法——t-Distributed 隨機鄰域嵌入算法(t-distributed stochastic neighbor embedding,t-SNE),該算法的初衷也是用於可視化高維複雜的數據結構,因此,也經常被用來和LLE算法作對比(如在LLE專題中的實戰一欄已作對比)。
  • 基於Python實現t-SNE降維可視化
    這裡用一個簡單的基於Python的例子來詳解對於t-SNE的實現,在這個例子中使用了2014年發表在期刊Scientific Data上的《A multi-subject, multi-modal human neuroimaging dataset》一文中的刺激材料,共計450張人臉(熟悉面孔、不熟悉面孔與亂相面孔,各150張)。
  • t-SNE:可視化效果最好的降維算法
    降維1D,2D和3D數據可以可視化。但是在數據科學領域並不總是能夠處理一個小於或等於3維的數據集,我們肯定會遇到使用高維數據的情況。對於數據科學專業人員來說,有必要對工作數據進行可視化和深入了解,以便更好地完成工作,我們可以使用降維技術降維技術的另一個最受歡迎的用例是在訓練ML模型時降低計算複雜度。通過使用降維技術,數據集的大小已經縮小,與此同時,有關原始數據的信息也已應用於低維數據。因此,機器學習算法從輸入數據集中學習既簡單又省時。
  • t-SNE:最好的降維方法之一
    Visualizing data using t-SNE. Journal of Machine Learning Research, 9(Nov), 2579-2605.[3] Maaten, L. V. D., & Hinton, G. (2008). Visualizing data using t-SNE.
  • 基於TensorFlow理解三大降維技術:PCA、t-SNE 和自編碼器
    代碼地址:https://github.com/eliorc/Medium/blob/master/PCA-tSNE-AE.ipynb在這篇文章中,我將盡我所能揭秘三種降維技術:PCA、t-SNE 和自編碼器。我做這件事的主要原因是基本上這些方法都被當作黑箱對待,因此有時候會被誤用。理解它們將能讓讀者有辦法決定在何時如何使用哪一種方法。
  • 深度 | 詳解可視化利器t-SNE算法:數無形時少直覺
    t-SNE 同樣能生成漂亮的可視化。當構建一個預測模型時,第一步一般都需要理解數據。雖然搜索原始數據並計算一些基本的統計學數字特徵有助於理解它,但沒有什麼是可以和圖表可視化展示更為直觀的。然而將高維數據擬合到一張簡單的圖表(降維)通常是非常困難的,這就正是 t-SNE 發揮作用的地方。
  • 使用TSNE進行降維
    TSNE介紹TSNE是降維方法的其中一種,通過將多維度數據,在保持原有數據分布和相似性情況下,轉換為二維或者三維數據
  • R語言做K均值聚類的一個簡單小例子
    參考連結https://www.guru99.com/r-k-means-clustering.htmlhttps://datascienceplus.com/k-means-clustering-in-r/https://www.datanovia.com/en/lessons/k-means-clustering-in-r-algorith-and-practical-examples
  • R進行降維分析——UMAP
    收錄於話題 #R語言 微信公眾號:BioKSXG原創內容,請勿用於商業用途,轉載請聯繫本號,歡迎轉發至朋友圈
  • 你真的會用 t-SNE 麼?有關 t-SNE 的小技巧
    Hinton(沒錯,又是他) 在 JMLR期刊的一篇論文《Visualizing data using t-SNE》中提出的,感興趣的讀者可以在文末找到下載連結。 到今天t-SNE 已經成為機器學習領域的基礎工具之一。它可以將數百上千維的數據降維打擊 到人能夠解讀的維度(1,2,3維)。
  • R語言從入門到精通:Day14(PCA & tSNE)
    下面在看一個主成分數目不為1的例子,Harman23.cor數據集包含305個女孩的8個身體測量指標。本例中,數據集由變量的相關係數組成,而不是原始數據集(如圖3)。回到第一個例子,我們根據原始數據中的11個評分變量提取了一個主成分。利用函數principal(),你很容易獲得每個調查對象在該主成分上的得分,利用相關係數矩陣得到的主成分分析結果的主成分得分計算方法有所不同,但也比較簡單(欲尋代碼,見文末客服二維碼)。
  • 數據降維 SVD 分解 小案例
    ,  1.        ]]))SVD降維實例對於SVD的奇異值也是按照從大到小排列,而且奇異值梯度很大。在昨天,我們介紹過:在很多情況下,前10%,甚至有的1%的奇異值的和就佔了全部的奇異值之和的99%,這是什麼意思呢,這就表示原矩陣可以被壓縮為一個很小的矩陣,並且還能保證其主要成分信息不會丟失。
  • 大數據可視化利器-流形學習t-SNE
    我們比較熟悉的是主成分分析技術(PCA),它屬於線性降維方法,無法解釋數據間的非線性關係,本文將著重介紹一種非線性降維技術t-SNE(t-Distributed Stochastic Neighbor Embedding)[1],它屬於流形學習的一種,由Laurens van der Maaten和Geoffrey Hinton在08年提出,適用於降維且可以同時保留數據的全局和局部結構,通常用於做高維數據的可視化
  • t-SNE原理總覽
    引言:t-SNE 是一種非線性降維算法,非常適用於高維數據降維到2維或者3維,進行可視化。
  • R語言的ggplot2做平滑的折線圖簡單小例子
    之前的圖文  跟著Nature Genetics學畫圖~ggplot2畫折線圖並在指定區域添加灰色背景 畫折線圖的遇到的一個問題是:ggplot2默認的折線圖畫出來基本都是帶尖的,有沒有辦法將折線圖變得平滑一點呢?
  • tsne-高維數據的降維與可視化
    當然pca是無監督的降維,這也是我們遇到最多的情況,多數情況下我們只有數據,沒有label,這個時候又想看看是否特徵好用就這麼做。對於有監督的降維,當然你也可以當成無監督來做,或者有監督的降維可以採用LDA的方法進行,這是加入標籤信息的降維方法,感興趣可以自己去研究看看。
  • 人人都可以輕鬆繪製炫酷的t-SNE圖啦~
    主成分分析(PCA)是提煉數據信息的有效方法,但是PCA降維在面對龐大的數據信息可視化時顯得無力。t分布隨機鄰接嵌入(t-SNE)屬於非線性降維,在大數據可視化中的表現明顯優於PCA,成為數據可視化算法中的翹楚。t-SNE通過單細胞測序分析進入生物學研究者的視野,也使得很多人誤以為t-SNE降維是單細胞測序分析的獨有內容。