為什么要降維?
高維情形下,樣本數(shù)據(jù)稀疏,距離計(jì)算困難。
為什么能進(jìn)行降維?
收集的數(shù)據(jù)雖是高維但與學(xué)習(xí)任務(wù)密切相關(guān)的也許僅僅是某個(gè)低維分布
無監(jiān)督降維:
PCA
最大重構(gòu)性:找到一個(gè)超平面使得樣本點(diǎn)在這個(gè)超平面的投影盡量分開。
PCA也可以看作是逐一篩選方差最大方向;對(duì)協(xié)方差矩陣XX^T特征分解,取最大特征值及其特征向量;在去掉該特征值以及特征向量后,繼續(xù)取最大特征值;
關(guān)于PCA的幾個(gè)問題:
-
投影方向應(yīng)該取多少才好?
根據(jù)博客https://blog.csdn.net/michael__corleone/article/details/79680183中所說,選取特征值和占總特征值的80% -
PCA為什么需要去中心化?
根據(jù)方差公式,如果沒有事先進(jìn)行去中心化后,在計(jì)算過程中也會(huì)去減去均值,增大計(jì)算復(fù)雜度
注意點(diǎn):(1)特征根的大小決定了我們感興趣信息的多少。即小特征根往往代表了噪聲,但實(shí)際上,向小一點(diǎn)的特征根方向投影也有可能包括我們感興趣的數(shù)據(jù); (2)特征向量的方向是互相正交(orthogonal)的,這種正交性使得PCA容易受到Outlier的影響(3)PCA適用于非監(jiān)督的學(xué)習(xí)的不帶標(biāo)簽(帶標(biāo)簽的樣本,往往用LDA降維)的樣本降維,特別是小樣本問題。廣義認(rèn)為,這類樣本屬性之間的相關(guān)性很大,通過映射,將高維樣本向量映射成屬性不相關(guān)的樣本向量。(4) PCA是一個(gè)去屬性相關(guān)性的過程,這里的相關(guān)性主要指的是線性相關(guān)性
python代碼:
from numpy import *
def loaddata(filename):
fr=open(filename)
stringArr=[line.strip().split('\t') for line in fr.readlines()]
datArr=[map(float,line)for line in stringArr]
return mat(datArr)
def pca(dataMat,topNfeat=9999999):
##去中心化
meanVals=mean(dataMat,axis=0)
meanRemoved=dataMat-meanVals
#計(jì)算協(xié)方差矩陣
covMat=cov(meanRemoved,rowvar=0)
eigVals,eigVects=linalg.eig(mat(covMat))
eigValInd=argsort(eigVals)
##對(duì)特征值進(jìn)行排序
eigValInd=eigValInd[:-(topNfeat+1):-1]
redEigVects=eigVects[:,eigVaInd]
#將數(shù)據(jù)轉(zhuǎn)換到新空間
lowDDataMat=meanRemoved*redEigVects
reconMat=(lowDDataMat*redEigVects.T)+meanVals
return lowDDataMat,reconMat
dataMat=loaddata('testSet.txt')
lowDMat,reconMat=pca(dataMat,1)
import matplotlib
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(dataMat[:,0].flatten().A[0], dataMat[:,1].flatten().A[0], marker='^', s = 90 )
ax.scatter(reconMat[:,0].flatten().A[0], reconMat[:,1].flatten().A[0],marker='o', s = 50 , c ='red' )
plt.show()
TSNE
TSNE是一種非線性的降維方法,上面的PCA無法解釋特征之間多項(xiàng)式的關(guān)系,t-sne基于領(lǐng)域圖上隨機(jī)游走的概率分布來尋找數(shù)據(jù)內(nèi)部結(jié)構(gòu)。
參考鏈接:https://yq.aliyun.com/articles/70733
https://blog.csdn.net/zhangweiguo_717/article/details/70188517
其基本思想是保證降維后分布概率不變
自編碼器
自編碼器是一種能夠通過無監(jiān)督學(xué)習(xí),學(xué)到輸入數(shù)據(jù)高效表示的人工神經(jīng)網(wǎng)絡(luò)。
自編碼器由兩部分組成:
1)編碼器:這部分能將輸入壓縮成潛在空間表征,可以用編碼函數(shù)h=f(x)表示。
2)解碼器:這部分能重構(gòu)來自潛在空間表征的輸入,可以用解碼函數(shù)r=g(h)表示
自編碼器的目標(biāo)就是讓output盡可能等于input,當(dāng)中間隱層只有一層的時(shí)候,優(yōu)化的目標(biāo)函數(shù)類似于PCA。
自動(dòng)編碼器與PCA的比較
??1)它是一種類似于 PCA 的無監(jiān)督機(jī)器學(xué)習(xí)算法。大體上,AutoEncoder可以看作是PCA的非線性補(bǔ)丁加強(qiáng)版,PCA的取得的效果是建立在降維基礎(chǔ)上的。
??2)它要最小化和 PCA 一樣的目標(biāo)函數(shù)。自動(dòng)編碼器的目標(biāo)是學(xué)習(xí)函數(shù) h(x)≈x。換句話說,它要學(xué)習(xí)一個(gè)近似的恒等函數(shù),使得輸出 x^ 近似等于輸入 x。
??3)它是一種神經(jīng)網(wǎng)絡(luò),這種神經(jīng)網(wǎng)絡(luò)的目標(biāo)輸出就是其輸入。自動(dòng)編碼器屬于神經(jīng)網(wǎng)絡(luò)家族,但它們也和 PCA(主成分分析)緊密相關(guān)。
??總之,盡管自動(dòng)編碼器與 PCA 很相似,但自動(dòng)編碼器比 PCA 靈活得多。在編碼過程中,自動(dòng)編碼器既能表征線性變換,也能表征非線性變換;而 PCA 只能執(zhí)行線性變換。因?yàn)樽詣?dòng)編碼器的網(wǎng)絡(luò)表征形式,所以可將其作為層用于構(gòu)建深度學(xué)習(xí)網(wǎng)絡(luò)。設(shè)置合適的維度和稀疏約束,自編碼器可以學(xué)習(xí)到比PCA等技術(shù)更有意思的數(shù)據(jù)投影。
正如主成分分析(principal component analysis,PCA)算法,通過降低空間維數(shù)去除冗余,利用更少的特征來盡可能完整的描述數(shù)據(jù)信息。
??實(shí)際應(yīng)用中將學(xué)習(xí)得到的多種隱層特征(隱層數(shù)通常多個(gè))與原始特征共同使用,可以明顯提高算法的識(shí)別精度
自編碼器的應(yīng)用
??第一是數(shù)據(jù)去噪。
??第二是為進(jìn)行可視化而降維。
??第三是進(jìn)行圖像壓縮。
??第四傳統(tǒng)自編碼器被用于降維或特征學(xué)習(xí)。
有監(jiān)督
LDA
Linear Discriminant Analysis(也有叫做Fisher Linear Discriminant)是一種有監(jiān)督的(supervised)線性降維算法。與PCA保持?jǐn)?shù)據(jù)信息不同,LDA是為了使得降維后的數(shù)據(jù)點(diǎn)盡可能地容易被區(qū)分!
假設(shè)原始數(shù)據(jù)表示為X,(m*n矩陣,m是維度,n是sample的數(shù)量)
既然是線性的,那么就是希望找到映射向量a, 使得 a‘X后的數(shù)據(jù)點(diǎn)能夠保持以下兩種性質(zhì):
1、同類的數(shù)據(jù)點(diǎn)盡可能的接近(within class)
2、不同類的數(shù)據(jù)點(diǎn)盡可能的分開(between class)
所以呢還是上次PCA用的這張圖,如果圖中兩堆點(diǎn)是兩類的話,那么我們就希望他們能夠投影到軸1去(PCA結(jié)果為軸2),這樣在一維空間中也是很容易區(qū)分的。
思路還是非常清楚的,目標(biāo)函數(shù)就是最后一行J(a),μ(一飄)就是映射后的中心用來評(píng)估類間距,s(一瓢)就是映射后的點(diǎn)與中心的距離之和用來評(píng)估類內(nèi)距。J(a)正好就是從上述兩個(gè)性質(zhì)演化出來的。
因此兩類情況下:
加上a’a=1的條件(類似于PCA)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
