寫在前面
- 態(tài)度決定高度!讓優(yōu)秀成為一種習慣!
- 世界上沒有什么事兒是加一次班解決不了的回铛,如果有,就加兩次?寺唷(- - -茂強)
綜述
面對著大數據時代的發(fā)展茵肃,數據成為目前一切科學的基礎,擁有數據袭祟,就代表著擁有商機验残,擁有決定權,每個公司或者科研項目榕酒,想要用實際說話胚膊,就必須有一個良好的數據基礎故俐,所以數據清晰想鹰,數據結構化,標準化药版,數據降維辑舷,數據可視化是目前大數據或者數據科學重中之重。
目前的數據降維技術
我們可以用一張圖來說明一下目前的數據降維技術
-
主成分分析算法(PCA)
Principal Component Analysis(PCA)是最常用的線性降維方法槽片,它的目標是通過某種線性投影何缓,將高維的數據映射到低維的空間中表示肢础,并期望在所投影的維度上數據的方差最大,以此使用較少的數據維度碌廓,同時保留住較多的原數據點的特性传轰。
通俗的理解,如果把所有的點都映射到一起谷婆,那么幾乎所有的信息(如點和點之間的距離關系)都丟失了慨蛙,而如果映射后方差盡可能的大,那么數據點則會分散開來纪挎,以此來保留更多的信息期贫。可以證明异袄,PCA是丟失原始數據信息最少的一種線性降維方式通砍。(實際上就是最接近原始數據凤覆,但是PCA并不試圖去探索數據內在結構)
設n維向量w為目標子空間的一個坐標軸方向(稱為映射向量)个扰,最大化數據映射后的方差名段,有:
主成分目標
其中m是數據實例的個數六荒, xi是數據實例i的向量表達刑峡, x拔是所有數據實例的平均向量照宝。定義W為包含所有映射向量為列向量的矩陣颜懊,經過線性代數變換年堆,可以得到如下優(yōu)化目標函數:
優(yōu)化目標函數
其中tr表示矩陣的跡
A
A是數據協(xié)方差矩陣斑匪。
容易得到最優(yōu)的W是由數據協(xié)方差矩陣前k個最大的特征值對應的特征向量作為列向量構成的呐籽。這些特征向量形成一組正交基并且最好地保留了數據中的信息。
PCA的輸出就是Y = W‘X蚀瘸,由X的原始維度降低到了k維狡蝶。
PCA追求的是在降維之后能夠最大化保持數據的內在信息,并通過衡量在投影方向上的數據方差的大小來衡量該方向的重要性贮勃。但是這樣投影以后對數據的區(qū)分作用并不大贪惹,反而可能使得數據點揉雜在一起無法區(qū)分。這也是PCA存在的最大一個問題寂嘉,這導致使用PCA在很多情況下的分類效果并不好奏瞬。具體可以看下圖所示,若使用PCA將數據點投影至一維空間上時泉孩,PCA會選擇2軸硼端,這使得原本很容易區(qū)分的兩簇點被揉雜在一起變得無法區(qū)分;而這時若選擇1軸將會得到很好的區(qū)分結果寓搬。
PCA - Linear Discriminant Analysis(LDA)線性判別分析
Linear Discriminant Analysis (也有叫做Fisher Linear Discriminant)是一種有監(jiān)督的(supervised)線性降維算法珍昨。與PCA保持數據信息不同,LDA是為了使得降維后的數據點盡可能地容易被區(qū)分!
了解詳情可參考LDA線性判別 -
基于重建權值 (LLE)
Locally linear embedding(LLE)是一種非線性降維算法镣典,它能夠使降維后的數據較好地保持原有流形結構兔毙。LLE可以說是流形學習方法最經典的工作之一。很多后續(xù)的流形學習兄春、降維方法都與LLE有密切聯(lián)系澎剥。
見圖1,使用LLE將三維數據(b)映射到二維(c)之后赶舆,映射后的數據仍能保持原有的數據流形(紅色的點互相接近肴裙,藍色的也互相接近),說明LLE有效地保持了數據原有的流行結構涌乳。
但是LLE在有些情況下也并不適用蜻懦,如果數據分布在整個封閉的球面上,LLE則不能將它映射到二維空間夕晓,且不能保持原有的數據流形宛乃。那么我們在處理數據中,首先假設數據不是分布在閉合的球面或者橢球面上蒸辆。
LLE
LLE算法認為每一個數據點都可以由其近鄰點的線性加權組合構造得到征炼。算法的主要步驟分為三步:(1)尋找每個樣本點的k個近鄰點;(2)由每個樣本點的近鄰點計算出該樣本點的局部重建權值矩陣躬贡;(3)由該樣本點的局部重建權值矩陣和其近鄰點計算出該樣本點的輸出值谆奥。具體的算法流程如圖2所示:
流程 - Laplacian Eigenmaps 拉普拉斯特征映射
繼續(xù)寫一點經典的降維算法,前面介紹了PCA,LDA拂玻,LLE酸些,這里講一講Laplacian Eigenmaps。其實不是說每一個算法都比前面的好檐蚜,而是每一個算法都是從不同角度去看問題魄懂,因此解決問題的思路是不一樣的。這些降維算法的思想都很簡單闯第,卻在有些方面很有效市栗。這些方法事實上是后面一些新的算法的思路來源。
Laplacian Eigenmaps看問題的角度和LLE有些相似咳短,也是用局部的角度去構建數據之間的關系填帽。詳情可參考:拉普拉斯特征映射
其他的就不一一介紹了,下面就切入正題咙好,本文將介紹一種新的降維方式
T-SNE降維
TSNE是由SNE衍生出的一種算法篡腌,SNE最早出現在2002年,它改變了MDS和ISOMAP中基于距離不變的思想敷扫,將高維映射到低維的同時哀蘑,盡量保證相互之間的分布概率不變诚卸,SNE將高維和低維中的樣本分布都看作高斯分布葵第,而Tsne將低維中的坐標當做T分布绘迁,這樣做的好處是為了讓距離大的簇之間距離拉大,從而解決了擁擠問題卒密。從SNE到TSNE之間缀台,還有一個對稱SNE,其對SNE有部分改進作用哮奇。
可以參考TSNE
-
首先介紹一下SNE
高維數據用X表示膛腐,Xi表示第i個樣本,低維數據用Y表示鼎俘,則高維中的分布概率矩陣P定義如下:
X
P(i,j)表示第i個樣本分布在樣本j周圍的概率哲身。delta是依據最大熵原理來決定,entropy=sum(pi*log(pi))贸伐,以每個樣本點作為中心的delta都需要使得最后分布的熵較小勘天,通常以log(k)為上限,k為你所決定的鄰域點的個數捉邢。
低維中的分布概率矩陣計算如下:
Y
這里我們把低維中的分布看作是均衡的脯丝,每個delta都是0.5,由此可以基本判斷最后降維之后生成的分布也是一個相對均勻的分布伏伐。
隨機給定一個初始化的Y宠进,進行優(yōu)化,使得Y的分布矩陣逼近X的分布矩陣藐翎。我們給定目的函數材蹬,用KL散度來定義兩個不同分布之間的差距:
KL
則可以計算梯度為:
SGD
每次梯度下降的步長可設定固定或者自適應、隨機等吝镣,也可以加上一個動量的梯度赚导,初始值一般設為1e-4的隨機正態(tài)分布。
STEP
這樣通過不斷的迭代赤惊,就可以達到X,Y分布的逼近 -
對稱SNE
顧名思義吼旧,就是讓高維和低維中的概率分布矩陣是對稱的,能方便運算未舟,但是對擁擠問題無改進圈暗。
低維的分布為:
Y
高維的分布為:
X
同樣采用KL散度作為兩個分布之間的差異標準,只是梯度有一些改變:
梯度 -
TSNE
TSNE對高維中的分布采用對稱SNE中的做法裕膀,低維中的分布則采用更一般的T分布员串,也是對稱的,我們可以發(fā)現sum(P)=sum(Q)=1昼扛。
高維分布:
X
低維一版的T分布
Y
則梯度為:
梯度
TSNE算法流程如下:
TSNE算法流程 - 最后不得不說一下LargeVis
這個是最新的流形學數據降維方式寸齐,主要也是采用了tnse的思想欲诺,LargeVis在t-SNE改進算法的基礎上,參考了近年來較為新穎的優(yōu)化技巧渺鹦,如隨機投影樹扰法、負采樣、邊采樣(實質也是負采樣)等毅厚,直接將訓練的時間復雜度降至線性級塞颁。
怎么用可以參考LargeVis
數據降維的實現
- 看個tsne的python例子
import numpy as np
from sklearn.manifold import TSNE
X = np.array([[0, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 1]])
model = TSNE(n_components=2, random_state=0)
np.set_printoptions(suppress=True)
model.fit_transform(X)
array([[ 0.00017599, 0.00003993],
[ 0.00009891, 0.00021913],
[ 0.00018554, -0.00009357],
[ 0.00009528, -0.00001407]])
如果數據量比較大,我們可以采用spark來跑tnse
可以參考: spark-tsne
在spark這個項目上有個很好的例子吸耿,就是MINIST
MINIST可視化
如果想更深層次的了解sne -> tsne -> largvis可以參考:
from-sne-to-tsne-to-largevis