無監督學習之降維方法 PCA,SNE,t SNE

2021-09-07 15:41:14 字數 3108 閱讀 3195

pca降維是,假設投影後樣本點的方差最大。

具體實現步驟是:

1.用x表示原有資料;

2.零均值化;

3.求協方差矩陣;

4.求特徵值和特徵向量;

5.根據相應的特徵值把特徵向量從大到小排序,從組成的矩陣選取k行代表降維的基(k維);

6.降維的基和原有資料x相乘,即為降維後的資料y

pca是無監督模型。

pca介紹

sne(stochastic neighbor embedding,隨機近鄰嵌入)

sne兩個主要思路/步驟:

★將歐氏距離轉化為條件概率來表徵點間相似度(pairwise similarity)。

★使用梯度下降演算法來使低維分布學習/擬合高維分布。

給定高維樣本點:

是以x

ix_i

xi​自己為中心,以高斯分布選擇x

jx_j

xj​作為近鄰點的條件概率:

同樣對於低維的樣本點:

q (j

∣i)q_(j|i)

q(​j∣i

)是yi

y_iyi

​以自己為中心,以高斯分布選擇y

jy_j

yj​作為近鄰點的條件概率:

sne的目標是讓低維分布去擬合高維分布,則目標是令兩個分布一致。兩個分布的一致程度可以使用相對熵(mutual entropy,也叫做kl散度,kullback-leibler divergences,kld)來衡量,可以以此定義代價函式(cost function):

事實上sne並沒有解決維度災難帶來的若干問題:

★擁擠問題(crowding problem):在二維對映空間中,能容納(高維空間中的)中等距離間隔點的空間,不會比能容納(高維空間中的)相近點的空間大太多[9]。

★換言之,哪怕高維空間中離得較遠的點,在低維空間中留不出這麼多空間來對映。於是到最後高維空間中的點,尤其是遠距離和中等距離的點,在低維空間中統統被塞在了一起,這就叫做「擁擠問題(crowding problem)」。

★擁擠問題帶來的乙個直接後果,就是高維空間中分離的簇,在低維中被分的不明顯(但是可以分成乙個個區塊)。比如用sne去視覺化mnist資料集的結果如下:

原理:高維空間保持高斯分布不變,將低維空間的分布(低維使用t分布)做調整,使得兩邊尾巴比高維空間的高斯分布更高,即可緩解擁擠問題。然後用kl距離來拉近高維和低維空間中的距離分布。

其中,perplexity是找的最近鄰的樣本點的個數。

生成 3 類樣本點。

import numpy as np

from sklearn.manifold import tsne

from sklearn import datasets

import matplotlib.pyplot as plt

# toy datasets

x, y = datasets.make_blobs(n_samples=

500, centers=3,

n_features=

4, random_state=0)

# original features.

plt.scatter(x[:,0]

, x[:,1]

)plt.

show()

# t-sne

x_embedded = tsne(n_components=2)

.fit_transform(x)

plt.scatter(x_embedded[:,0]

, x_embedded[:,1]

)plt.

show

()

不降維之前,使用其中的兩個特徵進行繪圖:

t-sne降維以後:

可以獲得明顯的三個類別的簇。

參考:1.t-sne 知乎;

2. pca 原理;

3. zhihu t-sne:最好的降維方法之一;

4. sklearn t-sne:

5. t-sne使用過程中的一些坑 ;

無監督學習 降維

降維演算法應用 資料壓縮 資料視覺化。主成分分析 pca 是最常見的降維演算法。在 pca 中,我們要做的是找到乙個方向向量 vector direction 當我們把所有的資料 都投射到該向量上時,我們希望投射平均均方誤差能盡可能地小。方向向量是乙個經過原點 的向量,而投射誤差是從特徵向量向該方向...

有監督學習和無監督學習 無監督學習

一.無監督學習包含的演算法 聚類 kmeans聚類演算法 降維 pca 之所以叫無監督學習 是因為模型是從無標籤的資料開始學習,沒有目標值。二.kmeans聚類 1.聚類演算法步驟 定義 將高維資料轉化為低維資料的過程,在此過程中可能會捨棄原有資料,創造新的變數 作用 降低原始資料的維數 複雜度 損...

無監督學習與監督學習

1.無監督和有監督的理解方法有很多,主要可以從以下幾方面來理解 1 無監督與監督學習的區別在於乙個無教學值,乙個有教學值。但是,個人認為他們的區別在於無監督學習一般是採用聚簇等演算法來分類不同樣本。而監督學習一般是利用教學值與實際輸出值產生的誤差,進行誤差反向傳播修改權值來完成網路修正的。但是無監督...