t-SNE:可視化效果最好的降維算法

2020-12-05 騰訊網

降維

1D,2D和3D數據可以可視化。但是在數據科學領域並不總是能夠處理一個小於或等於3維的數據集,我們肯定會遇到使用高維數據的情況。對於數據科學專業人員來說,有必要對工作數據進行可視化和深入了解,以便更好地完成工作,我們可以使用降維技術

降維技術的另一個最受歡迎的用例是在訓練ML模型時降低計算複雜度。通過使用降維技術,數據集的大小已經縮小,與此同時,有關原始數據的信息也已應用於低維數據。因此,機器學習算法從輸入數據集中學習既簡單又省時。

PCA-主成分分析是降維領域最主要的算法。它最初是由皮爾遜(Pearson)在1901年開發的,許多人對此做了即興創作。即使PCA是一種廣泛使用的技術,但它的主要缺點是無法維護數據集的局部結構。為了解決這個問題,t-SNE出現了。

什麼是t-SNE?

t-SNE的主要用途是可視化和探索高維數據。它由Laurens van der Maatens和Geoffrey Hinton在JMLR第九卷(2008年)中開發並出版。t-SNE的主要目標是將多維數據集轉換為低維數據集。相對於其他的降維算法,對於數據可視化而言t-SNE的效果最好。如果我們將t-SNE應用於n維數據,它將智能地將n維數據映射到3d甚至2d數據,並且原始數據的相對相似性非常好。與PCA一樣,t-SNE不是線性降維技術,它遵循非線性,這是它可以捕獲高維數據的複雜流形結構的主要原因。

t-SNE工作原理

首先,它將通過選擇一個隨機數據點並計算與其他數據點(|x —x |)的歐幾裡得距離來創建概率分布。從所選數據點附近的數據點將獲得更多的相似度值,而距離與所選數據點較遠的數據點將獲得較少的相似度值。使用相似度值,它將為每個數據點創建相似度矩陣(S1)。

因為不可能將超過3維的數據集可視化,所以為了舉例的目的,我們假設上面的圖是多維數據的可視化表示。

這裡需要說明的是:相鄰指的是與每個點最接近的點的集合。

由上圖可知,我們可以說X1的鄰域 N(X1)= ,這意味著X2,X3,X4,X5和X6是X1的鄰居。它將在相似度矩陣「 S1」中獲得更高的價值。這是通過計算與其他數據點的歐幾裡得距離來計算的。

另一方面,X20遠離X1。這樣它將在S1中獲得較低的值。

其次,它將根據正態分布將計算出的相似距離轉換為聯合概率。

通過以上的計算,t-SNE將所有數據點隨機排列在所需的較低維度上。

t-SNE將再次對高維數據點和隨機排列的低維數據點進行所有相同的計算。但是在這一步中,它根據t分布分配概率。這就是名稱t-SNE的原因。t-SNE中使用t分布的目的是減少擁擠問題(後面與PCA對比可見)。

但是請記住,對於高維數據,該算法根據正態分布分配概率。

t分布視覺上t分布看起來很像正態分布,但尾部通常更胖,這意味著數據的可變性更高。

對於較低維的數據點,還將創建一個相似度矩陣(S2)。然後該算法將S1與S2進行比較,並通過處理一些複雜的數學運算來使S1與S2之間有所不同。包括使用兩個分布之間的Kullback Leibler散度(KL散度)作為損失函數運行梯度下降算法。使用KL散度通過將兩個分布之間相對於數據點位置的值最小化,幫助t-SNE保留數據的局部結構。

在統計學中,Kullback-Leibler散度是對一個概率分布與另一個概率分布如何不同的度量。梯度下降算法是各種機器學習算法中用於最小化損失函數的一種優化算法。

最後,該算法能夠得到與原始高維數據相對相似度較好的低維數據點。我們可以使用sklearn.manifold.TSNE()實現t-SNE算法

要點

t-SNE算法具有擴展密集簇並縮小稀疏簇的特點。

t-SNE不會保留群集之間的距離。

t-SNE是一種不確定性算法或隨機算法,這就是為什麼每次運行結果都會略有變化的原因。

即使它不能在每次運行中保留方差,也可以使用超參數調整來保留每個類之間的距離。

該算法涉及許多計算和計算。因此,該算法需要大量時間和空間來計算。

困惑度(perplexity)是控制數據點是否適合算法的主要參數。推薦範圍是(5–50)。

困惑度應始終小於數據點的數量。

低困惑度關心本地結構,並關注最接近的數據點。

高度困惑關心全局結構。

t-SNE可以巧妙地處理異常值。

簡單的實現

我們使用kaggle的一個數據集:確定是有毒還是可食用是蘑菇的分類問題https://www.kaggle.com/uciml/mushroom-classification

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import seaborn as sns

df= pd.read_csv(『Downloads/mushrooms.csv』)

df.head()

X = df.drop(『class』, axis=1)

y = df[『class』]

y = y.map({『p』: 『Posionous』, 『e』: 『Edible』})

cat_cols= X.select_dtypes(include=』object』).columns.tolist()

for col in cat_cols:

print (f」 col name : , N Unique : 」)

for col in cat_cols:

X[col]=X[col].astype(「category」)

X[col]=X[col].cat.codes

X.head()

使用PCA的降維可視化

from sklearn.preprocessing import StandardScaler

from sklearn.decomposition import PCA

X_std = StandardScaler().fit_transform(X)

X_pca = PCA(n_components=2).fit_transform(X_std)

X_pca = np.vstack((X_pca.T, y)).T

df_pca = pd.DataFrame(X_pca, columns=[『1st_Component』,『2n_Component』, 』class』])

df_pca.head()

plt.figure(figsize=(8, 8))

sns.scatterplot(data=df_pca, hue=』class』, x=』1st_Component』, y=』2nd_Component』)

plt.show()

t-SNE降維可視化

from sklearn.manifold import TSNE

tsne = TSNE(n_components=2)

X_tsne = tsne.fit_transform(X_std)

X_tsne_data = np.vstack((X_tsne.T, y)).T

df_tsne = pd.DataFrame(X_tsne_data, columns=[『Dim1』, 『Dim2』, 『class』])

df_tsne.head()

plt.figure(figsize=(8, 8))

sns.scatterplot(data=df_tsne, hue=』class』, x=』Dim1', y=』Dim2')

plt.show()

PCA vs t-SNE

根據以上分類結果,可以說與PCA的性能相比,t-SNE的表現要好。

t-SNE算法將有毒和可食用蘑菇聚類,沒有任何重疊

PCA無法將蘑菇分類完美。

要知道在哪裡可以得到穩定的形狀,我們應該使用困惑度和n_iter參數。

在困惑度= 30且n_iter = 5000之後,聚簇形狀變得穩定。

總結

與PCA不同,t-SNE可以更好地應用於線性和非線性良好聚類的數據集,並產生更有意義的聚類。儘管t-SNE在可視化分離良好的群集方面非常出色,但大多數情況下它無法保留數據的整體幾何形狀。

作者:Ramakrishnan Thiyagu

deephub翻譯組

原文地址:https://medium.com/swlh/everything-about-t-sne-dde964f0a8c1

相關焦點

  • 基於TensorFlow理解三大降維技術:PCA、t-SNE 和自編碼器
    為了幫助理解,他還為其中每種相關算法編寫了代碼(也發布在了 GitHub 上)。機器之心對本文進行了編譯介紹。代碼地址:https://github.com/eliorc/Medium/blob/master/PCA-tSNE-AE.ipynb在這篇文章中,我將盡我所能揭秘三種降維技術:PCA、t-SNE 和自編碼器。
  • 哈工大碩士生用Python實現11種經典數據降維算法,原始碼庫已開放
    雷鋒網 AI 開發者按:網上關於各種降維算法的資料參差不齊,同時大部分不提供原始碼。這裡有個 GitHub 項目整理了使用 Python 實現了 11 種經典的數據抽取(數據降維)算法,包括:PCA、LDA、MDS、LLE、TSNE 等,並附有相關資料、展示效果;非常適合機器學習初學者和剛剛入坑數據挖掘的小夥伴。為什麼要進行數據降維?
  • 哈工大碩士生用 Python 實現了 11 種經典數據降維算法,原始碼庫已...
    這裡有個 GitHub 項目整理了使用 Python 實現了 11 種經典的數據抽取(數據降維)算法,包括:PCA、LDA、MDS、LLE、TSNE 等,並附有相關資料、展示效果;非常適合機器學習初學者和剛剛入坑數據挖掘的小夥伴。
  • 陳陟原:數據降維與可視化| AI 研習社第 53 期猿桌會
    大家記住這點就夠了,有人讓你做個麵包店銷量的可視化,你就甩他一臉這種圖,說:你自個兒去想像吧。說正經的,就為了畫張表就搞一堆機器學習算法?北京六院要不要了解一下?關於非線性流形學習,我只會簡要介紹 T-SNE(t-distributed Stochastic Neighbor Embedding)算法。
  • ...降維&可視化工具 HyperTools 的正確姿勢! | Kaggle 實戰教程
    其中包含兩個例子:用 HyperTools 對蘑菇數據做可視化,以及對全球氣象數據做可視化。示例包含代碼,需要做數據降維可視化的童鞋,這是一篇不錯的 HyperTools 上手教程。全文由雷鋒網(公眾號:雷鋒網)編譯。
  • 機器學習之sklearn中的降維算法
    PCA與SVDsklearn中降維算法都被包括在模塊decomposition中,這個模塊本質是一個矩陣分解模塊。在過去的十年中,如果要討論算法進步的先鋒,矩陣分解可以說是獨樹一幟。矩陣分解可以用在降維,深度學習,聚類分析,數據預處理,低緯度特徵學習,推薦系統,大數據分析等領域。
  • 降維算法讓腦神經大數據處理變簡單
    據物理學家組織網8月25日(北京時間)報導,美國卡內基·梅隆大學(CMU)和哥倫比亞大學(CU)的兩位科學家在最近一期的《自然—神經科學》雜誌上聯合發表了一篇評論文章,談到為何要研究大量神經元的共同活動,並提出一種名為降維算法的機器學習算法,可以有效處理大量記錄數據,幫助解釋大量神經元的活動。
  • Clustergrammer——基於網絡的高維生物數據熱圖可視化和分析工具
    Gundersen, Adeeb Rahman, Mark L.Grimes, Klarisa Rikova, Peter Hornbeck, Avi Ma』ayan 發表時間:2017/10/10 數字識別碼:10.1038/sdata.2017.151 原文連結:https://www.nature.com/articles/sdata2017151?
  • 人工智慧黑盒揭秘:深度神經網絡可視化技術
    深度神經網絡的可視化作為理解人工智慧系統的主要技術,模型可視化是一個由來已久而且寬泛的話題。模型可視化與數據可視化屬於不同的範疇,數據可視化通過降維,主成分分析等技術來分析數據的結構,模型可視化針對的是對機器學習模型本身的理解。
  • 太驚豔了,原來算法可視化後可以這麼藝術
    >那麼有沒有什麼算法能比 best-candidate算法 效果更好呢? 看完了快排算法的可視化,我們再來看看歸併排序 上面是歸併排序的代碼,效果如下圖 但是我們又被眼睛騙了,結果類似並不能說明兩個算法類似,這再次印證了可視化並不是萬能。
  • 特徵抽取經典算法PK
    在之前的格物匯文章中,我們介紹了特徵抽取的經典算法——主成分分析(PCA),了解了PCA算法實質上是進行了一次坐標軸旋轉,儘可能讓數據映射在新坐標軸方向上的方差儘可能大,並且讓原數據與新映射的數據在距離的變化上儘可能小。
  • 深度學習中7種最優化算法的可視化與理解
    + np.cos(7*x)points_x = np.linspace(-20, 20, 1000)points_y = f(points_x)# 純粹的梯度下降法,GDfor i in range(10): # 繪製原來的函數 plt.plot(points_x, points_y, c="b", alpha=0.5, linestyle="-") # 算法開始
  • 數據分析領域中最為人稱道的七種降維方法
    大多數數據挖掘算法都直接對數據逐列處理,在數據數目一大時,導致算法越來越慢。該項目的最重要的就是在減少數據列數的同時保證丟失的數據信息儘可能少。以該項目為例,我們開始來探討在當前數據分析領域中最為數據分析人員稱道和接受的數據降維方法。
  • 基於MUSIC算法的相干信號DOA估計改進及應用
    在面對相干信號時,MUSIC算法等子空間類算法已經無法滿足空間譜估計的性能。因此,本文提出了一種改進的MUSIC算法能夠較好的解決該問題。在面對相干信號時,MUSIC算法等子空間類算法已經無法滿足空間譜估計的性能。因此,本文提出了一種改進的MUSIC算法能夠較好的解決該問題。
  • 人工智慧之ICA算法
    人工智慧機器學習有關算法內容,請參見公眾號「科技優化生活」之前相關文章。人工智慧之機器學習主要有三大類:1)分類;2)回歸;3)聚類。今天我們重點探討一下ICA算法。  ICA與PCA相關,但它在發現潛在因素方面效果良好。
  • 常見機器學習算法優缺點比較
    對於第一種情況,也可以先對數據進行降維,然後使用非線性核,這也是一種方法。  優點  · 算法簡單,容易實現;  · 對處理大數據集,該算法是相對可伸縮的和高效率的,因為它的複雜度大約是O(nkt),其中n是所有對象的數目,k是簇的數目,t是迭代的次數。通常k<<n。這個算法通常局部收斂。
  • 數據科學家應該知道的頂級機器學習算法
    示例算法包括邏輯回歸和反向傳播神經網絡。無監督學習在此無監督機器學習中,輸入數據未標記並且沒有已知結果。我們必須通過推導輸入數據中存在的結構來準備模型。這可能是提取一般規則。可以通過數學過程來減少冗餘。示例問題包括聚類,降維和關聯規則學習。示例算法包括Apriori算法和k-Means。半監督學習輸入數據是帶標籤和未帶標籤的示例的混合。存在期望的預測問題。