用scikit-learn做数据降维

作者: Jeriah | 来源:发表于2017-03-05 23:45 被阅读4670次
    主成分分析 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])
    
    前后任意两点$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
    

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

    相关文章

      网友评论

        本文标题:用scikit-learn做数据降维

        本文链接:https://www.haomeiwen.com/subject/imssgttx.html