scikit-learn 隨機投影

2023-02-20 14:39 更新

sklearn.random_projection模塊實現(xiàn)了一種簡單且計算高效的減少數(shù)據(jù)維數(shù)的方式,通過以可控制的精度(以附加方差)為代價來縮短處理時間并縮小模型尺寸。該模塊實現(xiàn)兩種非結(jié)構(gòu)化隨機矩陣: 高斯隨機矩陣稀疏隨機矩陣

控制隨機投影矩陣的尺寸和分布以維持數(shù)據(jù)集的任何兩個樣本之間的成對距離。因此,隨機投影是基于距離方法的合適的近似技術(shù)。

參考文獻:

  • Sanjoy Dasgupta.2000. 隨機投影實驗。 第16屆人工智能不確定性會議(UAI'00)的會議記錄,克雷格·鮑迪埃(Craig Boutilier)和MoisésGoldszmidt(編輯)。美國加利福尼亞州舊金山的摩根考夫曼出版社(Morgan Kaufmann Publishers Inc.),編號143-151。
  • Ella Bingham和Heikki Mannila.2001. 降維中的隨機投影:圖像和文本數(shù)據(jù)的應用。 第七屆ACM SIGKDD有關(guān)知識發(fā)現(xiàn)和數(shù)據(jù)挖掘的國際會議論文集(KDD '01)。美國紐約州紐約市,ACM,245-250。

6.6.1 The Johnson-Lindenstrauss 引理

隨機投影效率背后的主要理論結(jié)果是 Johnson-Lindenstrauss引理(引用Wikipedia)

在數(shù)學中,Johnson-Lindenstrauss引理是關(guān)于點從高維到低維歐幾里德空間的低失真嵌入的結(jié)果。引理指出,高維空間中的一小部分點可以以點之間的距離幾乎被保留的方式嵌入到低維空間中。用于嵌入的地圖至少為Lipschitz,甚至可以視為正交投影。

僅知道樣本數(shù)的情況下, sklearn.random_projection.johnson_lindenstrauss_min_dim保守估計隨機子空間的最小尺寸,以保證隨機投影導致的失真在一定范圍內(nèi):

>>> 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])

示例:

參考文獻:

6.6.2 高斯隨機投影

sklearn.random_projection.GaussianRandomProjection通過將原始輸入控件投影到隨機生成的矩陣上來降低維數(shù),該矩陣從以下分布 中提取元素。

以下片段說明了如何使用高斯隨機投影轉(zhuǎn)換器:

>>> 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)

6.6.3 稀疏隨機投影

sklearn.random_projection.SparseRandomProjection通過使用稀疏隨機矩陣投影原始輸入空間來降低維數(shù)。

稀疏隨機矩陣是稠密高斯隨機投影矩陣的替代并保證相似的嵌入質(zhì)量,同時具有更高的存儲效率而且可以更快地計算投影數(shù)據(jù)。

如果我們定義s = 1 / density,則隨機矩陣的元素來自:

其中是投影子空間的大小。 默認情況下,非零元素的密度設置為Ping Li等人建議的最小密度:.

以下小片段說明了如何使用稀疏隨機投影轉(zhuǎn)換器:

>>> 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)

參考文獻


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號