主成分分析 PCA: principal component analysis
主成分分析是一種簡化數據集維數的技術。特點是保存數據集中對方差影響最大的那些特征。
在信息理論中,信號會有較大的方差,噪聲會有較小的方差。用我們自己的想法,在多維數據中選出最有代表性的一維一定是差別較大的一維。
具體的計算方法可以參考這篇文章:主成分分析(Principal components analysis)-最大方差解釋。
在 scikit-learn 這個工具下,進行主成分分析用的是 PCA 類。Python代碼是:
from sklearn.decomposition import PCA
PCA有許多種方式,參考:sckikit-learn 上的 PCA 頁。
隨機映射 random projection
sklearn.random_projection 模塊實現了一種簡單和計算高效的方法,通過交易控制量的精度(作為附加方差),以縮短數據的維數,從而縮短處理時間和縮小模型大小。 該模塊實現兩種類型的非結構化隨機矩陣:高斯隨機矩陣和稀疏隨機矩陣。
隨機映射矩陣的維度和分布是被控制的,為了保證在數據集中任意兩個樣本的距離。隨機映射也是一種合適的基于距離的近似精確的方法。
Johnson-Lindenstrauss Lemma 定理保證了降維方法精度的上下限。johnson_lindenstrauss_min_dim 是找到一個數量能保證隨機降維到這個數量的矩陣。n_samples 是樣本的數量,eps 是由 J-L 定理定義的最大失真率。
>>> from sklearn.random_projection import johnson_lindenstrauss_min_dim
>>> johnson_lindenstrauss_min_dim(n_samples=1e6, eps=0.5)
663
>>> johnson_lindenstrauss_min_dim(n_samples=1e6, eps=[0.5, 0.1, 0.01])
array([ 663, 11841, 1112658])
>>> johnson_lindenstrauss_min_dim(n_samples=[1e4, 1e5, 1e6], eps=0.1)
array([ 7894, 9868, 11841])
高斯隨機映射 Gaussian random projection
sklearn.random_projection.GaussianRandomProjection 通過將原始輸入空間投影在隨機生成的矩陣上來降低維度。代碼如下:
>>> import numpy as np
>>> from sklearn import random_projection
>>> X = np.random.rand(100, 10000)
>>> transformer = random_projection.GaussianRandomProjection()
>>> X_new = transformer.fit_transform(X)
>>> X_new.shape
(100, 3947)
稀疏隨機映射 Sparse random projection
相比于高斯隨機映射,稀疏隨機映射會更能保證降維的質量,并帶來內存的使用效率和運算效率。
使用方法如下:
>>> import numpy as np
>>> from sklearn import random_projection
>>> X = np.random.rand(100,10000)
>>> transformer = random_projection.SparseRandomProjection()
>>> X_new = transformer.fit_transform(X)
>>> X_new.shape
(100, 3947)
特征聚集 Feature agglomeration
把那些效果或行為相似的特征起來,達到降維的目的。
利用的是下面的類:
sklearn.cluster.FeatureAgglomeration
由于例子過于復雜,把本方法的使用說明使用說明貼上。