1. 程式人生 > >詮釋資料降維演算法:一文講盡t-分佈鄰域嵌入演算法(t-SNE)如何有效利用

詮釋資料降維演算法:一文講盡t-分佈鄰域嵌入演算法(t-SNE)如何有效利用

摘要: t-分佈領域嵌入演算法(t-SNE, t-distributed Stochastic Neighbor Embedding )是目前一個非常流行的對高維度資料進行降維的演算法, 由Laurens van der Maaten和 Geoffrey Hinton於2008年提出。這個演算法已經在機器學習領域

(文中所有截圖,都有華麗的動態效果,詳情請點選原文:http://distill.pub/2016/misread-tsne/  檢視)

t-分佈領域嵌入演算法(t-SNE, t-distributed Stochastic Neighbor Embedding )是目前一個非常流行的對高維度資料進行降維的演算法, 由Laurens van derMaaten和 Geoffrey Hinton於2008年提出。這個演算法已經在機器學習領域被廣泛應用,因為它可以有效的將高維度資料轉換成二維影象。雖然如此, 在使用這個演算法時,可能會產生一些錯誤認識,這篇文章就是為了防止這些認識上的常見錯誤。

我們會通過一系列的例子來闡述t-SNE影象。只有在正確地理解了這些影象以後,t-SNE演算法才能被真正地很好使用。

在開始之前,如果你還沒有接觸過t-SNE演算法, 這裡就對這個演算法背後的一些數學知識做一個簡單的介紹。 這個演算法的目的是將高維度空間中的資料點集合在一個低維度空間中準確的表示出來。這裡低維度空間一般指二維空間。這個演算法是非線性的並能適應底層資料,在不同領域中進行不同的轉換。而這些不同可能是產生歧義的主要原因。

t-SNE演算法的另一個特性就是支援調優引數-困惑度,簡單來說它是用來平衡資料的區域性和全域性關注度。換句話說,這個引數是對每個資料點相鄰資料點數量的猜測。困惑度會對最後產生的二維影象有複雜的影響。在原始的論文中是這樣闡述的:“SNE的效能對於困惑度的改變還是相當可靠的,而困惑度典型值一般在5到50之間”。而事實上比這個闡述更復雜,我們需要對不同困惑度下產生的結果進行分析,這樣才能體現t-SNE演算法的真正價值。

這個演算法的複雜性不止於此。t-SNE演算法可能在連續的執行中不總能得出相似的結果。比如,在優化過的工程中有額外的超引數。

1. 那些超引數會產生影響

讓我們從t-SNE演算法的“hello world”開始:現在有一組資料,分成了兩個聚簇。方便起見,我們將這兩個聚簇在一個二維空間中,標記成兩種不同顏色。右圖顯示了在五個不同困惑度下t-SNE結果圖。

fb0d77e4d5ea1049ea7ce21ec9a54412b706d81e

van der Maaten和Hilton的建議值(5-50)下,圖示出這些聚簇,即使他們的形狀不同。在範圍之外,圖片的顯示就有點奇怪。在困惑度2的情況下,區域性變數起到主導作用。而困惑度100的圖片,這裡這個演算法就有個小陷阱,兩個原本聚簇點集合並在一起了。為了使該演算法執行正確,困惑度的值應該小於資料點的數量,如果不是這樣,那最終的結果可能會產生異常。

以上的例子都被設定成5000次迭代和10的學習度,並且我們可以看到它們都能在5000次迭代前達到一個穩定狀態。那這兩的數值該如何選取呢?就我們的經驗來說,最重要的是迭代次數的選取一定要使結果到達一個穩定的狀態。

1d809fa3b7259885a048e9fd5323df1324751384

以上的例子顯示了在困惑度30下,五個不同的執行結果。前四個在穩定前就停止了。在10,20,60和120迭代後,顯示出來的是類似一維影象,甚至單點影象。 如果一個t-SNE影象有著被擠壓的圖形,很有可能是因為迭代次數還不夠。不幸的是,並沒有一個固定的值能保證得到一個穩定的結果。不同的資料集需要不同的迭代次數。

另一個問題是有著相同超引數的不同執行是否會產生同樣的結果。在這個我們已經討論過的兩聚簇的例子中,多次執行的結果有著相同的全域性形狀。然而,某些資料集在不同執行中產生明顯不同的圖; 我們將舉一個例子。

從這裡開始,除非特殊說明,我們討論的例子都是基於5000次迭代的結果。這樣基本能涵蓋這篇文章所涉及的多數例子。我們仍會使用不同的困惑度,因為它會產生許多不同的結果。

2. t-SNE中聚簇的大小無關緊要

如果兩個聚簇有不同的標準偏差和不同的大小(這裡的大小是指邊界框的大小,而不是資料點的數量)呢?下面是混合高斯模型在平面中的t-SNE結果影象,其中一個的分散度是另一個的10倍。

a98b95c79e41a977d9cffdc32ccb802c094038ae

令人驚訝的是,兩個聚簇在t-SNE影象中看起來大小相同。 這是怎麼回事?t-SNE演算法使得“距離”這個概念能適應資料集中的區域密度變化。因此,它自然地擴充套件密集的聚簇,並收縮稀疏的聚簇,平均聚簇的大小。顯然,這個特別的效果不同於任何維度降低技術都破壞距離的事實(畢竟,在這個例子中,所有資料都是二維的。)。相反,密度均衡在t-SNE演算法中是經過設計的,並且也是t-SNE演算法的可預測特徵。

然而,歸根結底在t-SNE圖中看不到簇的相對大小。

3. 兩個聚簇間的距離可能不表示任何東西

那麼兩個聚簇間的距離呢?下圖顯示了三個高斯聚簇,分別有50資料點。一對之間的距離是另一對的5倍。

774db13a0fbbd53f66303b06d02934045858a133

在困惑度50的情況下,圖示結果給出了很好的全域性幾何。對於較低的困惑度,聚簇看起來是等距的。當困惑度為100時,我們看到全域性幾何圖形很精細,但是其中一個聚簇表現得不準確,比其它兩個小得多。由於困惑度50在這個例子中給了我們一個比較好的結果,那麼如果我們想要看到全域性幾何,是否可以將困惑度總是為50呢?

可惜的是答案是否定的。如果我們向每個聚簇中新增更多的點,那我們必須提高困惑度來加以補償。這裡是三個高斯聚簇的t-SNE演算法結果影象,每個具有200資料點,而不是之前的50個。現在沒有一個困惑度值能給出了一個令人滿意的結果。

8eb19eb8c600ab141190053df1be57a6cd006fc3

因此想要得到完善的全域性幾何,就需要對困惑度進行調整。而現實世界中的資料可能有著包含不同數量元素的不同聚簇。那就可能導致沒有一個困惑度將適用於所有聚簇的距離,因為困惑度是一個全域性性的引數。解決這個問題可能是未來研究的一個領域。

因此,在t-SNE演算法結果影象中分離良好的聚類之間的距離可能沒有什麼意義。

4. 隨機噪聲不總是看起來隨機

一個典型的錯誤觀點就是認為你看到的模式就是隨機資料。能夠識別出噪音是一項重要的能力,而培養出這種準確的自覺是需要時間的。關於t-SNE演算法的一個棘手的事情是它在視窗中丟擲了很多現有的直覺。下圖顯示真正隨機資料,從100維的單位高斯分佈繪製的500點。 左邊的原圖是前兩個座標上的投影。

05038bbb669f55a896c87be060beeb266572cc9c

當困惑度設為2時,它似乎表現出非常強的聚簇性。如果你通過調整困惑度從而提取出資料中的結構,那你可能會認為你中了大獎。

當然,由於我們知道這些資料點是隨機生成的,統計學上對這些聚簇不感興趣:這些團塊沒有任何意義。如果回頭看前面的例子,低困惑度通常導致了這種分佈。將這些聚簇識別為隨機噪聲是讀取t-SNE圖的重要部分。

還有一些有趣的現象,可以作為t-SNE演算法的優點。首先,困惑度30下的影象不像高斯分佈:在這個資料點集不同區域之間,資料點分佈的密度差異非常細微,幾乎可以看成均勻分佈。事實上,這些特徵對於高維正態分佈是有用的,這些分佈非常接近於球體上的均勻分佈,點與點之間具有大致相等的空間。從這個角度看,t-SNE演算法得出的影象比任何線性投影都更準確。

5. 有時你可以看到一些形狀

資料點很少以完全對稱的方式分佈。讓我們來看看50維度下軸對準高斯分佈,其中座標i的標準偏差是1 / i也就是說,我們可以看到一個長長的橢圓形點陣。

26bcb91f668597533cbe3915835dcdbc258e079b

對於足夠高的困惑度,我們可以容易地得到細長形狀。如果困惑度偏低,區域性效應和無意義的“聚集”將佔據影象的中心。 在特定的困惑度下,更極端的形狀也可能出現。 例如,這裡是兩個二維的75個點的聚簇,他們就呈現出具有一些噪聲點的兩條平行線。

93def1dca15e869f1d5b0776389e85f171f4d161

對於一定範圍的困惑度,長條形的聚簇點陣看起來更正確一點。

即使在最好的情況下,該演算法結果也存在著一個細微的失真:線型在t-SNE圖中呈現出略向外彎曲。主要原因就是,t-SNE演算法趨向於擴充套件更密集的資料區域。由於聚簇點陣中間部分的空白空間比兩端少,所以演算法把它們擴大了。

6. 對於拓撲,可能需要多個影象

有時你可以從t-SNE演算法結果影象中讀取拓撲資訊,但是這通常需要通過多個困惑度下的檢視來獲得。最簡單的拓撲性質之一是拓撲包含。下圖顯示了兩組在50維空間中的75個數據點的聚簇。兩組聚簇都是以原點為中心的對稱高斯分佈,但是其中一個的密度比另一個高50倍。較小的聚簇實際上包含在大的聚簇裡面。

7b147e60ec53244b9cf5493e6a39f96c746e0fdd

困惑度30下的檢視正確地顯示出了基本拓撲,但是t-SNE演算法再一次誇大了較小的聚簇點陣的大小。在困惑度50時,有另一個新的現象出現:外聚簇點陣變成一個圈。因為演算法試圖描述這樣一個事實,即所有的外聚簇點陣與內聚簇大約保持相同的距離。如果你單獨看這個影象,很容易把這些外圍的點誤認為是一個一維結構。

那更復雜的拓撲型別呢?這可能是數學家需要研究的課題,而非資料分析師。但那些有趣的低維結構也往往成為探索的領域。

讓我們來考慮一組在三維中跟蹤連結或節點的點。通過檢視多個困惑度下的試圖給出了最完整的結論。低困惑度時,演算法給出兩個完全獨立的環; 而高困惑度時則顯示出兩個連線的環。

145360708c7b668d8cce117d1499977c1fe98818

三葉結是一個有趣的例子,說明了多個執行如何影響t-SNE演算法的結果。下面是五個在困惑度2下的檢視。

222ccf9ac24dde3b97e25686fde4a5b155785278

該演算法在圓上建立兩次,這至少保留了原本的拓撲。但在三個執行結果中,它得到三個不同的結果並引入人工中斷。使用點顏色作為指南,我們可以看到第一次和第三次執行之間的差異。

a17e762a8a735a7cdfa84a526bf231bb1cc68f8d

然而,在困惑度50下的五次執行給出(直到對稱性)了在視覺上相同的結果。 顯然,一些問題比其他問題更容易優化。

0a6d24e49fe996c43c5a908933296606bf7cf580

結語

t-SNE變得如此受歡迎的重要原因是它的靈活性,並且經常得出其他降維演算法不能得到的結構。不幸的是,這種靈活性使得理解t-SNE結果變得非常困難。 在使用者看不見的情況下,演算法進行著各種調整,以使結果視覺化。不要讓這些困難讓你對t-SNE望而卻步。更值得一提的是,通過研究t-SNE演算法在簡單情況下的執行過程,可以為那些複雜的情況制定基準。

相關推薦

詮釋資料演算法t-分佈嵌入演算法(t-SNE)如何有效利用

摘要: t-分佈領域嵌入演算法(t-SNE, t-distributed Stochastic Neighbor Embedding )是目前一個非常流行的對高維度資料進行降維的演算法, 由Laurens van der Maaten和 Geoffrey Hinton於20

t-分佈嵌入演算法t-SNE algorithm)簡單理解

這篇文章主要介紹一個有效的資料降維的方法 t-SNE. 大資料時代,資料量不僅急劇膨脹,資料也變得越來越複雜,資料的維度也隨之增加。比如大圖片,資料維度指的是畫素的數量級,範圍從數千到數百萬。計算機可以處理任意多維的資料集,但我們人類認知只侷限於3維空間,

達觀資料桂洪冠詳解達觀資料知識圖譜技術與應用

本文根據達觀資料桂洪冠在“達觀杯”文字智慧處理挑戰賽期間的技術直播分享整理而成,內容略有刪減。 ▌一、知識圖譜的概述 我們先直觀的來看一下什麼是知識圖譜,下面有一張圖,從這張圖裡可以看到,這個圖裡圓圈是節點,節點之間有一些帶箭頭的邊來連成,這個節點實際上相當於知識

五大常用演算法搞懂分治演算法

>原創公眾號:bigsai >文章收錄在 [bigsai-algorithm](https://github.com/javasmall/bigsai-algorithm) ## 前言 分治演算法(divide and conquer)是五大常用演算法(分治演算法、動態規劃演算法、貪心演算法

年度回顧 2018全年AI技術大突破

  文章釋出於公號【數智物語】 (ID:decision_engine),關注公號不錯過每一篇乾貨。       本文經AI新媒體量子位(公眾號 ID: QbitAI)授權轉載,轉載請聯絡出處

門面日誌slf4j和log4j、log4j2、logback依賴jar引用關係

公眾號Mac程式碼分割閱讀連結 前言 之前都是使用SparkStreaming開發,最近打算學習一下Flink,就從官網下載了Flink 1.11,打算搞一個客戶端,將程式提交在yarn上。因為Flink從1.7之後就不再提供Hadoop的依賴,所以很多依賴就要自己下載,於是各種ClassNotFoundEx

[轉]機器學習科普文章讀懂機器學習,大資料/自然語言處理/演算法全有了”

       在本篇文章中,我將對機器學習做個概要的介紹。本文的目的是能讓即便完全不瞭解機器學習的人也能瞭解機器學習,並且上手相關的實 踐。這篇文件也算是EasyPR開發的番外篇,從這裡開始,必須對機器學習瞭解才能進一步介紹EasyPR的核心。當然,本文也面對一般讀者,不會對

推薦 了解AI時代的資料風險(後真相時代、演算法囚徒和權利讓渡)

當今,在基於資料的個性化推薦演算法機制滿足了人們獵奇心、窺探欲、表演慾,讓人們在網路中尋找到共鳴

python資料預處理 資料

資料為何要降維 資料降維可以降低模型的計算量並減少模型執行時間、降低噪音變數資訊對於模型結果的影響、便於通過視覺化方式展示歸約後的維度資訊並減少資料儲存空間。因此,大多數情況下,當我們面臨高維資料時,都需要對資料做降維處理。 資料降維有兩種方式:特徵選擇,維度轉換 特徵選擇

目標檢測演算法圖解看懂RCNN系列演算法

在生活中,經常會遇到這樣的一種情況,上班要出門的時候,突然找不到一件東西了,比如鑰匙、手機或者手錶等。這個時候一般在房間翻一遍各個角落來尋找不見的物品,最後突然一拍大腦,想到在某一個地方,在整個過程中有時候是很著急的,並且越著急越找不到,真是令人沮喪。但是,如果一個簡單的計算機演算法可以在幾毫秒

深度學習目標檢測系列弄懂YOLO演算法|附Python原始碼

在之前的文章中,介紹了計算機視覺領域中目標檢測的相關方法——RCNN系列演算法原理,以及Faster RCNN的實現。這些演算法面臨的一個問題,不是端到端的模型,幾個構件拼湊在一起組成整個檢測系統,操作起來比較複雜,本文將介紹另外一個端到端的方法——YOLO演算法,該方法操作簡便且模擬速度快,效

資料()基礎篇

文章目錄 降維簡介 降維方法 維度選擇 維度抽取 基礎知識 特徵分解 奇異值分解 特徵值或奇異值的物理意義 奇異值向量的含義 方法

生死時刻讀懂Facebook資料洩密始末

上週末Facebook捲入了一宗醜聞,媒體揭露稱一家服務特朗普競選團隊的資料分析公司Cambri

超級乾貨 讀懂資料視覺化

前言資料視覺化,是指將相對晦澀的的資料通過可視的、互動的方式進行展示,從而形象、直觀地表達資料蘊

機器學習資料

1、主成分分析(Principle Component Analysis,PCA)PCA原理主成分分析是最常用的一種降維方法,為了便於維度變換,作出如下假設:1)樣本資料是維的。2)原始座標系為:由標準

關於資料的一些經典演算法

資料降維 0 前言 降維方法可分為有監督降維方法、半監督降維方法、無監督降維方法。 有監督的降維方法有:線性判別式分析(Linear discriminant analysis, LDA);

推薦 讀懂R中的探索性資料分析(附R程式碼)

作者:Pablo Casas;翻譯:蔣雨暢;校對:車前子;本文約1500字,建議閱讀7分鐘。本文

機器學習筆記(二)——廣泛應用於資料的PCA演算法實戰

   最近在學習的過程當中,經常遇到PCA降維,於是就學習了PCA降維的原理,並用網上下載的iris.txt資料集進行PCA降維的實踐。為了方便以後翻閱,特此記錄下來。本文首先將介紹PCA降維的原理,然後進入實戰,編寫程式對iris.資料集進行降維。一、為什麼要進行資料降維?

資料變金礦讀懂序列模型(附用例)

作者:TAVISH SRIVASTAVA翻譯:王雨桐校對:丁楠雅本文約3000字,建議閱讀15分