[Hands On ML] 8. 降维
文章目錄
- 1. 降維方法
- 1.1 投影
- 1.2 流行學習
- 2. 降維技術
- 2.1 PCA
- 2.2 增量PCA
- 2.3 隨機PCA
- 2.4 核PCA
- 2.5. 調(diào)參
- 2.6 LLE
- 2.7 其他方法
本文為《機器學習實戰(zhàn):基于Scikit-Learn和TensorFlow》的讀書筆記。
中文翻譯參考
- 特征維度太大,降維加速訓練
- 能篩掉一些噪聲和不必要的細節(jié)
更高維度的實例之間彼此距離可能越遠,空間分布很大概率是稀疏的
1. 降維方法
1.1 投影
上圖,三維空間中的點,都近似在灰色平面附近,可以投影到其上
- 投影并不總是最佳的方法
1.2 流行學習
Manifold Learning
假設:在流形的較低維空間中表示,它們會變得更簡單(并不總是成立)
- 是否流行學習會更好,取決于數(shù)據(jù)集
- 第一行的情況,展開后更好分類,第二行的則,直接一個面分類更簡單
2. 降維技術
2.1 PCA
《統(tǒng)計學習方法》主成分分析(Principal Component Analysis,PCA)筆記
目前為止最流行的降維算法
- 首先它找到接近數(shù)據(jù)集分布的超平面
- 然后將所有的數(shù)據(jù)都投影到這個超平面上
- 將數(shù)據(jù)投影到方差最大的軸(損失更少的信息)
- 或者理解為,點到該軸的均方距離最小
矩陣的 SVD分解 可以幫助找到主成分
X_centered=X-X.mean(axis=0) U,s,V=np.linalg.svd(X_centered) c1=V.T[:,0] c2=V.T[:,1]- sklearn 的 PCA 類使用 SVD 分解實現(xiàn)
-
用components_訪問每一個主成分(它返回水平向量的矩陣,如果我們想要獲得第一個主成分則可以寫成pca.components_.T[:,0])
-
方差解釋率(Explained Variance Ratio),它表示位于每個主成分軸上的數(shù)據(jù)集方差的比例
- 選擇方差解釋率占比達到足夠(例如95%)的維度即可
2.2 增量PCA
對大型數(shù)據(jù)集友好,可在線使用
from sklearn.decomposition import IncrementalPCAn_batches=100 inc_pca=IncrementalPCA(n_components=154) for X_batch in np.array_split(X_mnist,n_batches):inc_pca.partial_fit(X_batch) X_mnist_reduced=inc_pca.transform(X_mnist)注意:array_split()將數(shù)據(jù)分開,partial_fit(),部分 fit
X_mm=np.memmap(filename,dtype='float32',mode='readonly',shape=(m,n)) batch_size=m//n_batches inc_pca=IncrementalPCA(n_components=154,batch_size=batch_size) inc_pca.fit(X_mm)使用np.memmap方法,就好像文件完全在內(nèi)存中一樣,后面可跟fit
2.3 隨機PCA
可以快速找到前 d 個主成分的近似值
- 它的計算復雜度是O(m×d2)+O(d3)O(m × d^2) + O(d^3)O(m×d2)+O(d3),而不是O(m×n2)+O(n3)O(m × n^2) + O(n^3)O(m×n2)+O(n3),所以當 d 遠小于 n 時,它比之前的算法快得多
2.4 核PCA
from sklearn.decomposition import KernelPCArbf_pca=KernelPCA(n_components=2,kernel='rbf',gamma=0.04) X_reduced=rbf_pca.fit_transform(X)2.5. 調(diào)參
由于 kPCA 是無監(jiān)督學習算法,沒有明顯的性能指標幫助選擇參數(shù)
- 使用網(wǎng)格搜索來選擇最佳表現(xiàn)的核方法和超參數(shù)
獲得最佳參數(shù)
print(grid_search.best_params_) {'kpca__gamma': 0.043333333333333335, 'kpca__kernel': 'rbf'}還可以比較重構(gòu)后的數(shù)據(jù)跟原始數(shù)據(jù)的誤差來找最佳參數(shù)
rbf_pca = KernelPCA(n_components = 2, kernel="rbf", gamma=0.0433,fit_inverse_transform=True) X_reduced = rbf_pca.fit_transform(X) X_preimage = rbf_pca.inverse_transform(X_reduced) from sklearn.metrics import mean_squared_error mean_squared_error(X, X_preimage) 32.786308795766132然后網(wǎng)格搜索最小誤差的 核方法 和 超參數(shù)
2.6 LLE
局部線性嵌入(Locally Linear Embedding)是另一種非常有效的非線性降維(NLDR)方法,是一種流形學習技術
- 它特別擅長展開扭曲的流形
這個算法在處理 大數(shù)據(jù)集 的時候 表現(xiàn) 較差
2.7 其他方法
- 多維縮放(MDS)在嘗試保持實例之間距離的同時降低了維度
- Isomap 通過將每個實例連接到最近的鄰居來創(chuàng)建圖形,然后在嘗試保持實例之間的測地距離時降低維度
- t-分布隨機鄰域嵌入(t-Distributed Stochastic Neighbor Embedding,t-SNE)可以用于降低維??度,同時試圖保持相似的實例臨近并將不相似的實例分開。
它主要用于可視化,尤其是用于可視化高維空間中的實例(例如,可以將MNIST圖像降維到 2D 可視化) - 線性判別分析(Linear Discriminant Analysis,LDA)實際上是一種分類算法,但在訓練過程中,它會學習類之間最有區(qū)別的軸,然后使用這些軸來定義用于投影數(shù)據(jù)的超平面
LDA 的好處是投影會盡可能地保持各個類之間距離,所以在運行另一種分類算法(如 SVM 分類器)之前,LDA 是很好的降維技術
總結(jié)
以上是生活随笔為你收集整理的[Hands On ML] 8. 降维的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 712. 两个字符串的
- 下一篇: [scikit-learn 机器学习]