特徵降維方法包括:Lasso,PCA,小波分析,LDA(Linear Discriminant Analysis線性判別分析),LDA(Latent Dirichlet Allocation潛在狄利克雷分配),奇異值分解SVD,拉普拉斯特徵映射,深度學習SparseAutoEncoder,局部線性嵌入LLE,等距映射Isomap,word2vec。html
LASSO(Least absolute shrinkage and selection operator, Tibshirani(1996))
該方法是一種壓縮估計,經過構造一個罰函數獲得一個較爲精煉的模型,使得壓縮一些係數,同時設定一些係數爲零。英雌保留了子集收縮的優勢,,是一種處理具備復共線性數據的有偏估計。Lasso 的基本思想是在迴歸係數的絕對值之和小於一個常數的約束條件下,使殘差平方和最小化,從而可以產生某些嚴格等於 0 的迴歸係數,獲得能夠解釋的模型。算法
PCA(Principal Component Analysis)是一種經常使用的數據分析方法。PCA經過線性變換將原始數據變換爲一組各維度線性無關的表示,可用於提取數據的主要特徵份量,經常使用於高維數據的降維。
設有m條n維數據。網絡
1)將原始數據按列組成n行m列矩陣X
2)將X的每一行(表明一個屬性字段)進行零均值化,即減去這一行的均值
3)求出協方差矩陣C=\frac{1}{m}XX^\mathsf{T}
4)求出協方差矩陣的特徵值及對應的特徵向量
5)將特徵向量按對應特徵值大小從上到下按行排列成矩陣,取前k行組成矩陣P
6)Y=PX即爲降維到k維後的數據app
PCA降維過程請參考http://www.cnblogs.com/zhangchaoyang/articles/2222048.html函數
小波分析有一些變換的操做下降其餘干擾能夠看作是降維。
http://www.360doc.com/content/15/0613/14/21899328_477836495.shtml學習
線性判別式分析(Linear Discriminant Analysis),簡稱爲LDA。也稱爲Fisher線性判別(Fisher Linear Discriminant,FLD),是模式識別的經典算法,在1996年由Belhumeur引入模式識別和人工智能領域。優化
基本思想是將高維的模式樣本投影到最佳鑑別矢量空間,以達到抽取分類信息和壓縮特徵空間維數的效果,投影后保證模式樣本在新的子空間有最大的類間距離和最小的類內距離,即模式在該空間中有最佳的可分離性。編碼
LDA與前面介紹過的PCA都是經常使用的降維技術。PCA主要是從特徵的協方差角度,去找到比較好的投影方式。LDA更多的是考慮了標註,即但願投影后不一樣類別之間數據點的距離更大,同一類別的數據點更緊湊。人工智能
詳細請參考http://www.cnblogs.com/zhangchaoyang/articles/2644095.htmlspa
拉普拉斯特徵映射將處於流形上的數據,在儘可能保留原數據間類似度的狀況下,映射到低維下表示。
求解廣義特徵向量,取前幾個非零最小特值對應的特向,即爲原數據在低維下的表示。
資料來源於:http://blog.csdn.net/yujianmin1990/article/details/48420483
稀疏自編碼就是用少於輸入層神經元數量的隱含層神經元去學習表徵輸入層的特徵,至關於把輸入層的特徵壓縮了,因此是特徵降維。
詳細請參考http://blog.csdn.net/whiteinblue/article/details/20639629
在PCA算法中,用到了SVD,相似PCA,能夠當作一類。
Locally linear embedding(LLE)是一種非線性降維算法,它可以使降維後的數據較好地保持原有流形結構。LLE能夠說是流形學習方法最經典的工做之一。不少後續的流形學習、降維方法都與LLE有密切聯繫。
LLE算法認爲每個數據點均可以由其近鄰點的線性加權組合構造獲得。算法的主要步驟分爲三步:(1)尋找每一個樣本點的k個近鄰點;(2)由每一個樣本點的近鄰點計算出該樣本點的局部重建權值矩陣;(3)由該樣本點的局部重建權值矩陣和其近鄰點計算出該樣本點的輸出值。具體的算法流程如圖2所示:
Isomap是一種非迭代的全局優化算法,經過一種本來試用於歐式空間的算法MDS,達到降維的目的。
參考資料:
http://www.36dsj.com/archives/26723
word2vec本質上來講就是一個矩陣分解的模型,簡單地說,矩陣刻畫了每一個詞和其上下文的詞的集合的相關狀況。對這個矩陣進行分解,只取每一個詞對應在隱含空間的向量。
因此word2vec適合的狀況就是對於一個序列的數據,在序列局部數據間存在着很強的關聯。典型的就是文本的序列了,鄰近的詞之間關聯很強,甚至能夠經過一個詞的上下文大概預測出中間那個詞是什麼。學習到的詞向量表明了詞的語義,能夠用來作分類、聚類、也能夠作詞的類似度計算。此外,Word2vec自己的層次分類器或者採樣方式實際上對熱門item作了很大的懲罰,因此不會像通常的矩陣分解同樣,最後算出來語義接近的都是熱門詞,這也是word2vec很好的一個特性。
對於短文本分類,直接把文檔裏面全部的word對應的向量線性相加,做爲文本的特徵訓練分類器,效果也很不錯。這種方式其實在word2vec的訓練過程當中也有使用。另外若是換成非線性分類器,好比rbf kernel SVM,分類準確度還能再高,這個也是符合預期的。
其餘序列的數據也是能夠這樣作的,記得去年KDD上有一篇DeepWalk的文章,在社交網絡上進行隨機遊走生成一組組節點的序列,而後經過word2vec訓練每一個節點對應的向量。可是我用這個方法在qq的社交網絡上面作了一些實驗,發現效果很是不理想,可能和qq社交網絡的複雜性有關。
我很是滿意的一個應用是把word2vec應用在用戶app下載序列上,根據用戶下載app的順序,把app看作單詞,也是能夠造成這樣的序列數據,進而訓練處每一個app對應的向量。利用這個向量計算app之間的類似度,效果很是好,可以把真正內容相關的app聚合在一塊兒,同事規避熱門app的影響。相似的場景應該還有不少,並且應用也很普遍,好比說推薦系統、廣告系統均可以用上。