1. 程式人生 > >還在用PCA降維?快學學大牛最愛的t-SNE演算法吧(附Python/R程式碼)

還在用PCA降維?快學學大牛最愛的t-SNE演算法吧(附Python/R程式碼)

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&retryload=1

大資料文摘作品

編譯:寒小陽、蔣寶尚、Sheila、賴小娟、錢天培

假設你有一個包含數百個特徵(變數)的資料集,卻對資料所屬的領域幾乎沒有什麼瞭解。 你需要去識別資料中的隱藏模式,探索和分析資料集。不僅如此,你還必須找出資料中是否存在模式--用以判定資料是有用訊號還是噪音?

這是否讓你感到不知所措?當我第一次遇到這種情況,我簡直全身發麻。想知道如何挖掘一個多維資料集? 這是許多資料科學家經常問的問題之一。 該篇文章中,我將帶你通過一個強有力的方式來實現這一點。用PCA怎麼樣?

現在,一定會有很多人心裡想著“我會使用PCA來降維和視覺化”。 好吧,你是對的! PCA絕對是具有大量特徵的資料集的降維和視覺化的不錯選擇。 但是,假如你能使用比PCA更先進的東西將會怎樣呢?

如果你可以很容易地找出非線性的模式呢? 在本文中,我將告訴你一個比PCA(1933)更有效、被稱為t-SNE(2008)的新演算法。 首先我會介紹t-SNE演算法的基礎知識,然後說明為什麼t-SNE是非常適合的降維演算法。

你還將獲得在R程式碼和Python語句中使用t-SNE的實踐知識。

來吧來吧!

目錄

1.什麼是t-SNE?

2.什麼是降維?

3.t-SNE與其他降維演算法

4.t-SNE的演算法細節

 4.1 演算法

 4.2 時間和空間複雜性

5.t-SNE實際上做什麼?

6.用例

7.t-SNE與其他降維演算法相比

8.案例實踐

 8.1 使用R程式碼

  -超引數除錯

  -程式碼

  -執行時間

  -結果解讀

 8.2 使用python語句

  -超引數除錯

  -程式碼

  -執行時間

9.何時何地去使用

 9.1 資料科學家

 9.2 機器學習競賽愛好者

 9.3 資料科學愛好者

10.常見誤區

1.什麼是t-SNE

0?wx_fmt=jpeg

(t-SNE)t-分散式隨機鄰域嵌入是一種用於挖掘高維資料的非線性降維演算法。 它將多維資料對映到適合於人類觀察的兩個或多個維度。 在t-SNE演算法的幫助下,你下一次使用高維資料時,可能就不需要繪製很多探索性資料分析圖了。

2.什麼是降維?

為了理解t-SNE如何工作,讓我們先了解什麼是降維?

簡而言之,降維是在2維或3維中展現多維資料(具有多個特徵的資料,且彼此具有相關性)的技術。

有些人可能會問,當我們可以使用散點圖、直方圖和盒圖繪製資料,並用描述性統計搞清資料模式的時候為什麼還需要降低維度。

好吧,即使你可以理解資料中的模式並將其呈現在簡單的圖表上,但是對於沒有統計背景的人來說,仍然很難理解它。 此外,如果你有數百個特徵值,你必須研究數千張圖表,然後才能搞懂這些資料。

在降維演算法的幫助下,您將能夠清晰地表達資料。

3. t-SNE與其他降維演算法

現在你已經瞭解什麼是降維,讓我們看看我們如何使用t-SNE演算法來降維。

以下是幾個你可以查詢到的降維演算法:

1.主成分分析(線性)

2.t-SNE(非引數/非線性)

3.薩蒙對映(非線性)

4.等距對映(非線性)

5.區域性線性嵌入(非線性)

6.規範相關分析(非線性)

7.SNE(非線性)

8.最小方差無偏估計(非線性)

9.拉普拉斯特徵圖(非線性)

好訊息是,你只需要學習上述演算法中的其中兩種,就可以有效地在較低維度上使資料視覺化 - PCA和t-SNE。

PCA的侷限性

PCA是一種線性演算法。 它不能解釋特徵之間的複雜多項式關係。 另一方面,t-SNE是基於在鄰域圖上隨機遊走的概率分佈,可以在資料中找到其結構關係。

線性降維演算法的一個主要問題是它們集中將不相似的資料點放置在較低維度區域時,資料點相距甚遠。 但是為了在低維、非線性流型上表示高維資料,我們也需要把相似的資料點靠近在一起展示,這並不是線性降維演算法所能做的。

現在,你對PCA應該有了一個簡短的瞭解。

區域性方法尋求將流型上的附近點對映到低維表示中的附近點。 另一方面,全域性方法試圖保留所有尺度的幾何形狀,即將附近的點對映到附近的點,將遠處的點對映到遠處的點

要知道,除t-SNE之外的大多數非線性技術都不能同時保留資料的區域性和全域性結構。

4. t-SNE的演算法細節(選讀)

該部分是為有興趣深入理解演算法的人準備的。 如果您不想了解數學上面的細節,可以放心地跳過本節。

4.1演算法

步驟1

隨機鄰近嵌入(SNE)首先通過將資料點之間的高維歐幾里得距離轉換為表示相似性的條件概率。資料點0?wx_fmt=png與資料點0?wx_fmt=png的相似性是條件概率0?wx_fmt=png——如果鄰域被選擇與在以0?wx_fmt=png為中心的正態分佈的概率密度成比例,0?wx_fmt=png將選擇0?wx_fmt=png作為其鄰域的概率。

0?wx_fmt=png

其中0?wx_fmt=png是以資料點0?wx_fmt=png為中心的正態分佈的方差,如果你對數學不感興趣,以這種方式思考它,演算法開始於將點之間的最短距離(直線)轉換成點的相似度的概率。 其中,點之間的相似性是: 如果在以0?wx_fmt=png為中心的高斯(正態分佈)下與鄰域的概率密度成比例地選取鄰域,則0?wx_fmt=png會選擇0?wx_fmt=png作為其鄰居的條件概率。

步驟2

對於低維資料點0?wx_fmt=png0?wx_fmt=png的高維對應點0?wx_fmt=png0?wx_fmt=png,可以計算類似的條件概率,其由0?wx_fmt=png表示。

0?wx_fmt=png

需要注意的是,pi | i和pj | j被設定為零,因為我們只想對成對的相似性進行建模。

簡單來說,步驟1和步驟2計算一對點之間的相似性的條件概率。這對點存在於:

1.高維空間中

2.低維空間中

為了簡單起見,嘗試詳細瞭解這一點。

讓我們把3D空間對映到2D空間。 步驟1和步驟2正在做的是計算3D空間中的點的相似性的概率,並計算相應的2D空間中的點的相似性的概率。

邏輯上,條件概率0?wx_fmt=png0?wx_fmt=png必須相等,以便把具有相似性的不同維空間中的資料點進行完美表示。即,0?wx_fmt=png0?wx_fmt=png之間的差必須為零,以便在高維和低維中完美複製圖。

通過該邏輯,SNE試圖使條件概率的這種差異最小化。

步驟3

現在講講SNE和t-SNE演算法之間的區別。

為了測量條件概率SNE差值的總和的最小化,在全體資料點中使用梯度下降法使所有資料點的Kullback-Leibler散度總和減小到最小。 我們必須知道,K-L散度本質上是不對稱的。

換句話說,SNE代價函式重點在對映中保留資料的區域性結構(為了高斯方差在高維空間的合理性,0?wx_fmt=png)。

除此之外,優化該代價函式是非常困難的(計算效率低)。

因此,t-SNE也嘗試最小化條件概率之差的總和值。 但它通過使用對稱版本的SNE代價函式,使用簡單的梯度。此外,t-SNE在低維空間中採用長尾分佈,以減輕擁擠問題(參考下面譯者解釋)和SNE的優化問題。

*譯者注:

擁擠問題是提出t-SNE演算法的文章(Visualizing Data using t-SNE,08年發表在Journal of Machine Learning Research,大神Hinton的文章)重點討論的問題(文章的3.2節)。譯者的理解是,如果想象在一個三維的球裡面有均勻分佈的點,如果把這些點投影到一個二維的圓上一定會有很多點是重合的。所以在二維的圓上想盡可能表達出三維裡的點的資訊,把由於投影所重合的點用不同的距離(差別很小)表示,這樣就會佔用原來在那些距離上的點,原來那些點會被趕到更遠一點的地方。t分佈是長尾的,意味著距離更遠的點依然能給出和高斯分佈下距離小的點相同的概率值。從而達到高維空間和低維空間對應的點概率相同的目的。

步驟4

如果我們看到計算條件概率的方程,我們忽略了現在的討論的方差。要選擇的剩餘引數是學生的t-分佈的方差0?wx_fmt=png,其中心在每個高維資料點0?wx_fmt=png的中心。不可能存在對於資料集中的所有資料點最優的單個值0?wx_fmt=png,因為資料的密度可能變化。在密集區域中,較小的值0?wx_fmt=png通常與較稀疏的區域相比更合適。任何特定值0?wx_fmt=png在所有其他資料點上誘發概率分佈0?wx_fmt=png。 這個分佈有一個

0?wx_fmt=png

該分佈具有隨著0?wx_fmt=png增加而增加的熵。 t-SNE對0?wx_fmt=png的值執行二進位制搜尋,產生具有由使用者指定具有困惑度的0?wx_fmt=png2。 該困惑度定義為

0?wx_fmt=png

其中H(0?wx_fmt=png)是以位元位元組測量的夏農熵

0?wx_fmt=png

困惑度可以被解釋為對鄰域的有效數量的平滑測量。 SNE的效能對於茫然性的變化是相當穩固的,並且典型值在5和50之間。

代價函式的最小化是使用梯度下降法來執行的。並且從物理上,梯度可以被解釋為由圖上定位點0?wx_fmt=png和所有其他圖上定位點0?wx_fmt=png之間的一組彈簧產生的合力。所有彈簧沿著方向(0?wx_fmt=png - 0?wx_fmt=png)施加力。彈簧在0?wx_fmt=png0?wx_fmt=png定位點之間的排斥或吸引,取決於圖中的兩點之間的距離是太遠還是太近 (太遠和太近都不能表示兩個高維資料點之間的相似性。)由彈簧在0?wx_fmt=png0?wx_fmt=png之間施加的力與其長度成比例,並且還與其剛度成比例,剛度是資料的成對相似性之間的失配(pj | i-qj | i + pi | j-qi | j) 點和地圖點 。

 *譯者補充:

步驟3和4都在講述SNE 與t-SNE之間的區別,總結如下:

區別一:將不對稱的代價函式改成對稱的代價函式。

將代價函式修改為

0?wx_fmt=png,其中0?wx_fmt=png

則可避免上述不對稱的代價函式所帶來的問題。

區別二:在低維空間中使用學生t-分佈而不是高斯分佈來計算點與點之間的相似度。

t-SNE在低維空間中採用長尾的學生t-分佈,

0?wx_fmt=png

以減輕擁擠問題和SNE的優化問題。

4.2 時間和空間複雜度

現在我們已經瞭解了演算法,是分析其效能的時候了。 正如你可能已經觀察到的,該演算法計算成對的條件概率,並試圖最小化較高和較低維度的概率差的總值。 這涉及大量的運算和計算。 所以該演算法對系統資源相當重要。

t-SNE在資料點的數量上具有二次時間和空間複雜性。 這使得它應用於超過10,000個觀察物件組成的資料集的時候特別慢和特別消耗資源。

5. t-SNE 實際上做了什麼?

瞭解了 t-SNE 演算法的數學描述及其工作原理之後,讓我們總結一下前邊學過的東西。以下便是t-SNE工作原理的簡述。

實際上很簡單。 非線性降維演算法t-SNE通過基於具有多個特徵的資料點的相似性識別觀察到的模式來找到資料中的規律。它不是一個聚類演算法,而是一個降維演算法。這是因為當它把高維資料對映到低維空間時,原資料中的特徵值不復存在。所以不能僅基於t-SNE的輸出進行任何推斷。因此,本質上它主要是一種資料探索和視覺化技術。

但是t-SNE可以用於分類器和聚類中,用它來生成其他分類演算法的輸入特徵值。

6. 應用場景

你可能會問, t-SNE有哪些應用場景呢?它幾乎可以用於任何高維資料。不過大部分應用集中在影象處理,自然語言處理,基因資料以及語音處理。它還被用於提高心腦掃描影象的分析。以下維幾個例項:

6.1 人臉識別

人臉識別技術已經取得巨大進展,很多諸如PCA之類的演算法也已經在該領域被研究過。但是由於降維和分類的困難,人臉識別依然具有挑戰性。t-SNE被用於高維度資料降維,然後用其它演算法,例如 AdaBoostM2, 隨機森林, 邏輯迴歸, 神經網路等多級分類器做表情分類。

一個人臉識別的研究採用了日本女性臉部表情資料庫和t-SNE結合AdaBoostM2的方法。其實驗結果表明這種新方法效果優於諸如PCA, LDA, LLE及SNE的傳統演算法。

以下為實現該方法的流程圖: 

0?wx_fmt=png

6.2 識別腫瘤亞群(醫學成像)

質譜成像(MSI)是一種同時提供組織中數百個生物分子的空間分佈的技術。 t-SNE,通過資料的非線性視覺化,能夠更好地解析生物分子腫瘤內異質性。

以無偏見的方式,t-SNE可以揭示腫瘤亞群,它們與胃癌患者的存活和乳腺癌患者原發性腫瘤的轉移狀態具有統計相關性。 對每個t-SNE簇進行的存活分析將提供非常有用的結果。[3] 

6.3 使用wordvec的文字比較

詞向量表示法捕獲許多語言屬性,如性別,時態,複數甚至語義概念,如“首都城市”。 使用降維,可以計算出使語義相似的詞彼此臨近的2D地圖。 這種技術組合可以用於提供不同文字資料的鳥瞰圖,包括文字摘要及其資料源。 這使使用者能夠像使用地圖一樣探索文字資料。[4]

7. t-SNE與其它降維演算法的對比

下邊我們將要比較t-SNE和其它演算法的效能。這裡的效能是基於演算法所達到的準確度,而不是時間及運算資源的消耗與準確度之間的關係。

t-SNE產生的結果優於PCA和其它線性降維模型。這是因為諸如經典縮放的線性方法不利於建模曲面的流型。 它專注於保持遠離的資料點之間的距離,而不是保留臨近資料點之間的距離。

t-SNE在高維空間中採用的高斯核心函式定義了資料的區域性和全域性結構之間的軟邊界。 對於高斯的標準偏差而言彼此臨近的資料點對,對它們的間隔建模的重要性幾乎與那些間隔的大小無關。 此外,t-SNE基於資料的區域性密度(通過強制每個條件概率分佈具有相同的困惑度)分別確定每個資料點的區域性鄰域大小[1]。 這是因為演算法定義了資料的區域性和全域性結構之間的軟邊界。 與其他非線性降維演算法不同,它的效能優於其它任何一個演算法。 

8. 案例實踐

讓我們用MNIST手寫數字資料庫來實現t-SNE演算法。 這是最被廣泛探索的影象處理的資料集之一。

81.使用R程式碼

“Rtsne”包具有t-SNE在R語言中的實現。“Rtsne”包可以通過在R控制檯中鍵入以下命令安裝:

install.packages(“Rtsne”)

• 超引數除錯

0?wx_fmt=png

• 程式碼

MNIST資料可從MNIST網站下載,並可用少量程式碼轉換為csv檔案。對於此示例,請下載以下經過預處理的MNIST資料。

## calling the installed package
train<- read.csv(file.choose()) ## Choose the train.csv file downloaded from the link above  
library(Rtsne)
## Curating the database for analysis with both t-SNE and PCA
Labels<-train$label
train$label<-as.factor(train$label)
## for plotting
colors
= rainbow(length(unique(train$label)))
names(colors) = unique(train$label)

## Executing the algorithm on curated data
tsne<- Rtsne(train[,-1], dims = 2, perplexity=30, verbose=TRUE, max_iter = 500)
exeTimeTsne<- system.time(Rtsne(train[,-1], dims = 2, perplexity=30, verbose=TRUE, max_iter = 500))

## Plotting
plot(tsne$Y, t='n', main="tsne")
text(tsne$Y, labels=train$label, col=colors[train$label])

•  執行時間

exeTimeTsne
user       system  elapsed
 118.037   0.000  118.006

exectutiontimePCA
  user     system   elapsed
 11.259   0.012     11.360

可以看出,運行於相同樣本規模的資料,與PCA相比t-SNE所需時間明顯更長。

• 解讀結果

這些圖可用於探索性分析。 輸出的x和y座標以及成本代價值可以用作分類演算法中的特徵值

0?wx_fmt=png

0?wx_fmt=png

8.2使用Rython語句

一個重要的事情要注意的是“pip install tsne”會產生錯誤。 不建議安裝“tsne”包。 t-SNE演算法可以從sklearn包中訪問。

• 超引數除錯

0?wx_fmt=png

•程式碼

以下程式碼引自sklearn網站的sklearn示例。

## importing the required packages
from time import time
import numpy as np
importmatplotlib.pyplot as plt
from matplotlib

相關推薦

PCA學學t-SNE演算法Python/R程式碼

大資料文摘作品編譯:寒小陽、蔣寶尚、Sheila、賴小娟、錢天培假設你有一個包含數百個特徵(變數

【乾貨】機器學習常用 35 演算法盤點思維導圖

本文將帶你遍歷機器學習領域最受歡迎的演算法。系統地瞭解這些演算法有助於進一步掌握機器學習。當然,本文收錄的演算法並不完全,分類的方式也不唯一。不過,看完這篇文章後,下次再有演算法提起,你想不起它長處和用處的可能性就很低了。本文還附有兩張演算法思維導圖供學習使用。 在本文中,

PCAdemo

效果 cti 代碼 push jpg per ims whitening get PCA(Principal Components Analysis)主成分分析法是一種常用的減小數據維度的算法。 能力有限在這裏就不做過多的數學分析了,具體原理可參見http://uf

sklearn pca

noise .text learn mac crc sigma 參考 clas nts PCA降維 一.原理 這篇文章總結的不錯PCA的數學原理。 PCA主成分分析是將原始數據以線性形式映射到維度互不相關的子空間。主要就是尋找方差最大的不相關維度。數據的最大方差給出了數據的

【資料收集】PCA

post hive ron str AD span clas htm logs 重點整理: PCA(Principal Components Analysis)即主成分分析,是圖像處理中經常用到的降維方法 1、原始數據: 假定數據是二維的 x=[2.5, 0.5, 2.2,

機器學習—PCA

one 因此 表示 實現 維度 非監督學習 衡量 取出 計算方法 1、基本思想:   主成分分析(Principal components analysis,以下簡稱PCA)是最重要的降維方法之一。在數據壓縮消除冗余和數據噪音消除等領域都有廣泛的應用。   PCA顧名思義,

LDA和PCA的原理和區別

除了 思想 樣本 計算方法 相互 進化 strong 繞過 位置 LDA算法的主要優點有: 在降維過程中可以使用類別的先驗知識經驗,而像PCA這樣的無監督學習則無法使用類別先驗知識。 LDA在樣本分類信息依賴均值而不是方差的時候,比PCA之類的算法較優。 LDA算法的

PCA原理和作用

降維的作用 ①資料在低維下更容易處理、更容易使用; ②相關特徵,特別是重要特徵更能在資料中明確的顯示出來;如果只有兩維或者三維的話,更便於視覺化展示; ③去除資料噪聲 ④降低演算法開銷 降維通俗點的解釋 一些高維度的資料,比如淘寶交易資料,為便於解釋降維作用,我們在這假設有下單數

機器學習筆記PCA演算法

1 - PCA概述 主成份分析,簡稱為PCA,是一種非監督學習演算法,經常被用來進行 資料降維 有損資料壓縮 特徵抽取 資料視覺化 2 - PCA原理詳解 通過計算資料矩陣的協方差矩陣,然後得到協方差矩陣的特徵值特徵向量,選擇特

scikit-learn使用PCA小結

本文在主成分分析(PCA)原理總結和用scikit-learn學習主成分分析(PCA)的內容基礎上做了一些筆記和補充,強調了我認為重要的部分,其中一些細節不再贅述。 Jupiter notebook版本參見我的github: https://github.com/konatasick/machin

matlab實現PCA

利用PCA,把二維資料降為一維資料 load ('ex7data1.mat'); %變成一維 K = 1; %對資料歸一化 means = mean(X); X_means = bsxfun(@min

PCA例項[GridSearchCV求優參]

降維概念        機器學習領域中所謂的降維就是指採用某種對映方法,將原高維空間中的資料點對映到低維度的空間中。降維的本質是學習一個對映函式 f : x->y,其中x是原始資料點的表達,目前最多使用向量表達形式。 y是資料點對映後的低維向量表達,通常y的維度小於x

PCA 方法的簡單使用

from sklearn.decomposition import PCA from sklearn.cluster import KMeans import pandas as pd import numpy as np #pca.txt是一個沒有表頭的多維資料,一共有7列,利用pandas讀取

PCA----

引言: 特徵值分解:矩陣的作用就是線性變換(如旋轉,伸縮,平移等),在一個空間當中,矩陣左乘向量就是將向量線性變換成想要的效果,那麼矩陣的特徵值和特徵向量是什麼呢? 特徵值、特徵向量:線上性代數的定義當中,特徵值和特徵向量的定義是這樣的,AX=rX ,則稱r為A的特徵值,X稱為A的屬於特徵值k的特徵向量。

一步步教你輕鬆學主成分分析PCA演算法

(白寧超 2018年10月22日10:14:18) 摘要:主成分分析(英語:Principal components analysis,PCA)是一種分析、簡化資料集的技術。主成分分析經常用於減少資料集的維數,同時保持資料集中的對方差貢獻最大的特徵。常常應用在文字處理、人臉識別、圖片識別、自然語言處

協方差及PCA計算

PCA(Principal Component Analysis,主成分分析),PCA是一種無監督演算法,也就是我們不需要標籤也能對資料做降維,這就使得其應用範圍更加廣泛了。那麼PCA的核心思想是什麼呢?這裡我們提到了方差,咱們可以想象一下,如果一群人都堆疊在一起,我們想區分他們是不是比較困難,但是

補:PCA

結合網上的資料,細看了兩種求解PCA的方式。當進行協方差矩陣上求解特徵值時,若矩陣的維數較小,則可以使用傳統的求解方式,直接求出協方差矩陣的所有特徵值和對應的特徵向量。但是如果是用在圖片方面,加入一張100*100的圖片,特徵維度高達10000維,協方差矩陣則是10000*10000這種級別,這

筆記:PCA

作為一個非監督學習的降維方法,PCA(Principal Components Analysis)顧名思義,就是找出資料裡最主要的方面,用資料裡最主要的方面來代替原始資料。具體的,假如我們的資料集是n維的,共有m個數據(x1,x2,…,xm)。我們希望將這m個數據的維度從n維降到k維,希望這m個

機器學習-PCA與DBScan聚類分析實戰

基本概念:   在資料處理中,經常會遇到特徵維度比樣本數量多得多的情況,如果拿到實際工程中去跑,效果不一定好。一是因為冗餘的特徵會帶來一些噪音,影響計算的結果;二是因為無關的特徵會加大計算量,耗費時間和資源。所以我們通常會對資料重新變換一下,再跑模型。資料變換的目的不僅僅是降維,還可以消除特徵之間的相關性,

KNN / SVM 手寫數字識別-PCA

一.問題分析採用機器學習演算法對usps和mnist兩個資料集完成手寫數字識別任務。1.1.資料集介紹MNIST MNIST 資料集來自美國國家標準與技術研究所, National Institute of Standards and Technology (NIST)。訓練