用scikit-learn做数据降维

主成分分析 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])

《用scikit-learn做数据降维》 前后任意两点$a,b$之间的距离有不等式保证

高斯随机映射 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

由于例子过于复杂,把本方法的使用说明使用说明贴上。

    原文作者:Jeriah
    原文地址: https://www.jianshu.com/p/d59cf1618dbd
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞