天天看點

機器學習sklearn(15)TSNE降維

TSNE概念部分參考:http://bindog.github.io/blog/2016/06/04/from-sne-to-tsne-to-largevis/#0x02-%E4%BB%8Esne%E8%AF%B4%E8%B5%B7

sklearn.manifold.

TSNE

(n_components=2, perplexity=30.0, early_exaggeration=12.0, learning_rate=200.0, n_iter=1000, n_iter_without_progress=300, min_grad_norm=1e-07, metric=’euclidean’, init=’random’, verbose=0, random_state=None, method=’barnes_hut’, angle=0.5)

參數:

n_components:int,可選(預設值:2)嵌入式空間的次元。

perplexity:浮點型,可選(預設:30)較大的資料集通常需要更大的perplexity。考慮選擇一個介于5和50之間的值。由于t-SNE對這個參數非常不敏感,是以選擇并不是非常重要。

early_exaggeration:float,可選(預設值:4.0)這個參數的選擇不是非常重要。

learning_rate:float,可選(預設值:1000)學習率可以是一個關鍵參數。它應該在100到1000之間。如果在初始優化期間成本函數增加,則早期誇大因子或學習率可能太高。如果成本函數陷入局部最小的最小值,則學習速率有時會有所幫助。

n_iter:int,可選(預設值:1000)優化的最大疊代次數。至少應該200。

n_iter_without_progress:int,可選(預設值:300,必須是50倍數)在我們中止優化之前,沒有進展的最大疊代次數。

0.17新版​​功能:參數n_iter_without_progress控制停止條件。

min_grad_norm:float,可選(預設值:1E-7)如果梯度範數低于此門檻值,則優化将被中止。

metric:字元串或可疊代的,可選,計算特征數組中執行個體之間的距離時使用的度量。如果度量标準是字元串,則它必須是scipy.spatial.distance.pdist為其度量标準參數所允許的選項之一,或者是成對列出的度量标準.PAIRWISE_DISTANCE_FUNCTIONS。如果度量是“預先計算的”,則X被假定為距離矩陣。或者,如果度量标準是可調用函數,則會在每對執行個體(行)上調用它,并記錄結果值。可調用應該從X中擷取兩個數組作為輸入,并傳回一個表示它們之間距離的值。預設值是“euclidean”,它被解釋為歐氏距離的平方。

init:字元串,可選(預設值:“random”)嵌入的初始化。可能的選項是“随機”和“pca”。 PCA初始化不能用于預先計算的距離,并且通常比随機初始化更全局穩定。

random_state:int或RandomState執行個體或None(預設)

僞随機數發生器種子控制。如果沒有,請使用numpy.random單例。請注意,不同的初始化可能會導緻成本函數的不同局部最小值。

method:字元串(預設:'barnes_hut')

預設情況下,梯度計算算法使用在O(NlogN)時間内運作的Barnes-Hut近似值。 method ='exact'将運作在O(N ^ 2)時間内較慢但精确的算法上。當最近鄰的誤差需要好于3%時,應該使用精确的算法。但是,确切的方法無法擴充到數百萬個示例。0.17新版​​功能:通過Barnes-Hut近似優化方法。

angle:float(預設值:0.5)

僅當method ='barnes_hut'時才使用這是Barnes-Hut T-SNE的速度和準确性之間的折衷。 'angle'是從一個點測量的遠端節點的角度大小(在[3]中稱為theta)。如果此大小低于'角度',則将其用作其中包含的所有點的彙總節點。該方法對0.2-0.8範圍内該參數的變化不太敏感。小于0.2的角度會迅速增加計算時間和角度,是以0.8會快速增加誤差。

attributes description
embedding_ 嵌入向量
kl_divergence 最後的 KL 散度
n_iter_ 疊代的次數
Methods description
fit 将 X 投影到一個嵌入空間
fit_transform 将 X 投影到一個嵌入空間并傳回轉換結果
get_params 擷取 t-SNE 的參數
set_params 設定 t-SNE 的參數

from sklearn.manifold import TSNE

from sklearn.datasets import load_iris

import matplotlib.pyplot as plt

iris = load_iris()

iris_data = iris.data

iris_target = iris.target

from sklearn.preprocessing import StandardScaler

sc = StandardScaler()

data_std = sc.fit_transform(iris_data)

tsne = TSNE(n_components=2, learning_rate=100)

tsne.fit_transform(data_std)

array([[-22.37778   , -14.470559  ],
       [-19.074526  , -12.40457   ],
       [-19.71702   , -13.648663  ],      
[ 10.526178  ,   6.301651  ],
       [ 12.626265  ,   4.926107  ],
       [  6.4893355 ,   8.0801115 ]], dtype=float32)      

import numpy as np

data = np.array(tsne.embedding_)

機器學習sklearn(15)TSNE降維

from sklearn.decomposition import PCA

pca = PCA(n_components=2)

data_pca = pca.fit_transform(data_std)

plt.scatter(data_pca[:,0], data_pca[:,1], c=iris_target)

plt.show()

機器學習sklearn(15)TSNE降維

繼續閱讀