黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

降維方法總結及python實現

系統 2271 0

為什么要降維?
高維情形下,樣本數據稀疏,距離計算困難。
為什么能進行降維?
收集的數據雖是高維但與學習任務密切相關的也許僅僅是某個低維分布

無監督降維:

PCA
最大重構性:找到一個超平面使得樣本點在這個超平面的投影盡量分開。
PCA也可以看作是逐一篩選方差最大方向;對協方差矩陣XX^T特征分解,取最大特征值及其特征向量;在去掉該特征值以及特征向量后,繼續取最大特征值;
關于PCA的幾個問題:

  1. 投影方向應該取多少才好?
    根據博客https://blog.csdn.net/michael__corleone/article/details/79680183中所說,選取特征值和占總特征值的80%

  2. PCA為什么需要去中心化?
    根據方差公式,如果沒有事先進行去中心化后,在計算過程中也會去減去均值,增大計算復雜度

注意點:(1)特征根的大小決定了我們感興趣信息的多少。即小特征根往往代表了噪聲,但實際上,向小一點的特征根方向投影也有可能包括我們感興趣的數據; (2)特征向量的方向是互相正交(orthogonal)的,這種正交性使得PCA容易受到Outlier的影響(3)PCA適用于非監督的學習的不帶標簽(帶標簽的樣本,往往用LDA降維)的樣本降維,特別是小樣本問題。廣義認為,這類樣本屬性之間的相關性很大,通過映射,將高維樣本向量映射成屬性不相關的樣本向量。(4) PCA是一個去屬性相關性的過程,這里的相關性主要指的是線性相關性
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
    #計算協方差矩陣
    covMat=cov(meanRemoved,rowvar=0)
    eigVals,eigVects=linalg.eig(mat(covMat))
    eigValInd=argsort(eigVals)
    ##對特征值進行排序
    eigValInd=eigValInd[:-(topNfeat+1):-1]
    redEigVects=eigVects[:,eigVaInd]
    #將數據轉換到新空間
    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無法解釋特征之間多項式的關系,t-sne基于領域圖上隨機游走的概率分布來尋找數據內部結構。
參考鏈接:https://yq.aliyun.com/articles/70733
https://blog.csdn.net/zhangweiguo_717/article/details/70188517
其基本思想是保證降維后分布概率不變

自編碼器
自編碼器是一種能夠通過無監督學習,學到輸入數據高效表示的人工神經網絡。
自編碼器由兩部分組成:
1)編碼器:這部分能將輸入壓縮成潛在空間表征,可以用編碼函數h=f(x)表示。
2)解碼器:這部分能重構來自潛在空間表征的輸入,可以用解碼函數r=g(h)表示
自編碼器的目標就是讓output盡可能等于input,當中間隱層只有一層的時候,優化的目標函數類似于PCA。
降維方法總結及python實現_第1張圖片
自動編碼器與PCA的比較
??1)它是一種類似于 PCA 的無監督機器學習算法。大體上,AutoEncoder可以看作是PCA的非線性補丁加強版,PCA的取得的效果是建立在降維基礎上的。
??2)它要最小化和 PCA 一樣的目標函數。自動編碼器的目標是學習函數 h(x)≈x。換句話說,它要學習一個近似的恒等函數,使得輸出 x^ 近似等于輸入 x。
??3)它是一種神經網絡,這種神經網絡的目標輸出就是其輸入。自動編碼器屬于神經網絡家族,但它們也和 PCA(主成分分析)緊密相關。
??總之,盡管自動編碼器與 PCA 很相似,但自動編碼器比 PCA 靈活得多。在編碼過程中,自動編碼器既能表征線性變換,也能表征非線性變換;而 PCA 只能執行線性變換。因為自動編碼器的網絡表征形式,所以可將其作為層用于構建深度學習網絡。設置合適的維度和稀疏約束,自編碼器可以學習到比PCA等技術更有意思的數據投影。

正如主成分分析(principal component analysis,PCA)算法,通過降低空間維數去除冗余,利用更少的特征來盡可能完整的描述數據信息。
??實際應用中將學習得到的多種隱層特征(隱層數通常多個)與原始特征共同使用,可以明顯提高算法的識別精度
自編碼器的應用
??第一是數據去噪。
??第二是為進行可視化而降維。
??第三是進行圖像壓縮。
??第四傳統自編碼器被用于降維或特征學習。

有監督

LDA
Linear Discriminant Analysis(也有叫做Fisher Linear Discriminant)是一種有監督的(supervised)線性降維算法。與PCA保持數據信息不同,LDA是為了使得降維后的數據點盡可能地容易被區分!
假設原始數據表示為X,(m*n矩陣,m是維度,n是sample的數量)
既然是線性的,那么就是希望找到映射向量a, 使得 a‘X后的數據點能夠保持以下兩種性質:
1、同類的數據點盡可能的接近(within class)
2、不同類的數據點盡可能的分開(between class)
降維方法總結及python實現_第2張圖片
所以呢還是上次PCA用的這張圖,如果圖中兩堆點是兩類的話,那么我們就希望他們能夠投影到軸1去(PCA結果為軸2),這樣在一維空間中也是很容易區分的。
降維方法總結及python實現_第3張圖片
思路還是非常清楚的,目標函數就是最后一行J(a),μ(一飄)就是映射后的中心用來評估類間距,s(一瓢)就是映射后的點與中心的距離之和用來評估類內距。J(a)正好就是從上述兩個性質演化出來的。
因此兩類情況下:
加上a’a=1的條件(類似于PCA)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論