精华内容
下载资源
问答
  • 降维算法LDA用于分类

    2020-04-02 10:26:03
    本资源是机器学习常见方法LDA(线性判别分析)的源码,其主要功能类似于PCA,都属于降维算法。本次实现是依托于项目工程,裁剪掉了图像预处理特征提取部分,是降维算法在分类问题上的一次实现,为Matlab代码实现
  • 经典降维算法局部保持投影LPP算法的matlab代码,希望对需要降维算法的童鞋有所帮助
  • 2DPCA降维算法

    2019-05-01 15:52:39
    MATLAB版2DPCA降维算法,输入输出均为CSV文件。 对于512*512像素的图像,分别进行行和列的两次处理,输出为64*64尺寸的图像
  • 运行的4维降维算法是主成分分析(PCA),独立成分分析(ICA),随机投影(RP)和递归特征消除(RFE)。 该存储库运行以下内容并捕获性能: 运行两种聚类算法 运行降维,然后进行聚类算法 降维和聚类算法的神经网络...
  • 现有的多标记降维算法常通过学习标记相关性构建样本间的相似关系,进而提高学习系统的性能.然而,在实际应用中,样本的标记信息可能存在噪声,且部分标记信息可能缺失,因此由样本的标记信息学得的标记相关性可能不准确,...
  • 特征提取数据降维PCA、LDA、MDS、LLE、TSNE等降维算法的python实现
  • PCA降维算法讲义ppt slides,pca降维算法,课程资源,ppt
  • 机器学习降维算法讲解讲授人XXX 时间2017.3.31延迟符号什么是降维 降维就是这样一个过程在降低数据集维度的同时保证其中包含的主要信息是相似的就是保证有效信息不要丢失降维技术最典型的应用就是在机器学习问题中...
  • 旋转不变维降维算法

    2021-03-08 11:41:24
    旋转不变维降维算法
  • 快速流形学习的降维算法
  • 降维算法KPCA 的matlab版
  • sklearn_降维算法

    2020-06-27 16:15:38
    降维算法中的”降维“,指的是降低特征矩阵中特征的数量。 降维的目的: 让算法运算更快,效果更好, 数据可视化 1.2 sklearn中的降维算法——decomposition 2 PCA与SVD 在降维的过程中,即减少特征的数量,又保留大...

    转载自:【菜菜的sklearn】04 降维算法

    1 概述

    1.1 维度

    针对每一张表,维度指的是样本的数量或特征的数量,一般无特别说明,指的都是特征的数量。除了索引之外,一个特征是一维,两个特征是二维,n个特征是n维。

    降维算法中的”降维“,指的是降低特征矩阵中特征的数量

    降维的目的:
    让算法运算更快,效果更好,
    数据可视化

    1.2 sklearn中的降维算法——decomposition

    2 PCA与SVD

    在降维的过程中,即减少特征的数量,又保留大部分有效信息

    将那些带有重复信息的特征合并,并删除那些带无效信息的特征

    逐渐创造出能够代表原特征矩阵大部分信息的,特征更少的,新特征矩阵。

    在降维中,PCA使用的信息量衡量指标,就是样本方差,又称可解释性方差,方差越大,特征所带的信息量越多。

    主成分分析PCA是一种通过降维来简化数据结构的方法,即把原有的多个指标转化成少数几个代表性较好的综合指标,这少数几个指标能够反映原来指标的大部分信息(80%以上),并且各个指标之间保持独立,避免出现重叠信息。

    2.1 降维究竟是怎样实现?


    在这里插入图片描述
    F1 方差最大,为第一主成分
    F2即第二个线性组合。F2称为第二主成分

    新指标能够反映原来指标的大部分信息(80%以上)即可


    PCA和SVD是两种不同的降维算法,两种算法中矩阵分解的方法不同,信息量的衡量指标不同

    PCA使用方差作为信息量的衡量指标,并且特征值分解来找出空间V。PCA找到的每个新特征向量就叫做“主成分”,而被丢弃的特征向量被认为信息量很少,这些信息很可能就是噪音。

    SVD使用**奇异值**分解来找出空间V,其中Σ也是一个对角矩阵,不过它对角线上的元素是奇异值,这也是SVD中用来衡量特征上的信息量的指标。

    无论是PCA和SVD 都需要遍历所有的特征和样本来计算信息量指标。并且在矩阵分解的过程之中,会产生比原来的特征矩阵更大的矩阵,

    因此,降维算法的计算量很大,运行比较缓慢,但无论如何,它们的功能无可替代


    PCA和特征选择技术都是特征工程的一部分,它们有什么不同?

    特征工程中有三种方式:特征提取特征创造特征选择

    特征选择是从已存在的特征中选取携带信息最多的,选完之后的特征依然具有可解释性,我们依然知道这个特征在原数据的哪个位置,代表着原数据上的什么含义。

    而PCA,是将已存在的特征进行压缩,降维完毕后的特征不是原本的特征矩阵中的任何一个特征,而是通过某些方式组合起来的新特征。

    PCA建立的新特征向量不具有可读性

    新特征虽然带有原始数据的信息,却已经不是原数据上代表着的含义了。以PCA为代表的降维算法因此是特征创造的一种

    可以想见,PCA一般不适用于探索特征和标签之间的关系的模型(如线性回归),因为无法解释的新特征和标签之间的关系不具有意义。在线性回归模型中,我们使用特征选择。

    2.2 重要参数

    sklearn.decomposition.PCA (
    n_components=None, 
    copy=True, 
    whiten=False, 
    svd_solver=’auto’, 
    tol=0.0,
    iterated_power=’auto’,
    random_state=None)
    

    n_components

    n_components即降维后需要保留的特征数量,如果留下的特征太多,就达不到降维的效果,如果留下的特征太少,那新特征向量可能无法容纳原始数据集中的大部分信息,因
    此,n_components既不能太大也不能太小。

    2.2.1 案例

    导包

    import matplotlib.pyplot as plt
    from sklearn.datasets import load_iris
    from sklearn.decomposition import PCA
    

    提取数据集

    iris = load_iris()
    y = iris.target  # 标签
    X = iris.data # 特征矩阵
    

    四个特征,三种类别

    import pandas as pd
    pd.DataFrame(X)
    
    '''
           0    1    2    3
    0    5.1  3.5  1.4  0.2
    1    4.9  3.0  1.4  0.2
    2    4.7  3.2  1.3  0.2
    3    4.6  3.1  1.5  0.2
    4    5.0  3.6  1.4  0.2
    ..   ...  ...  ...  ...
    145  6.7  3.0  5.2  2.3
    146  6.3  2.5  5.0  1.9
    147  6.5  3.0  5.2  2.0
    148  6.2  3.4  5.4  2.3
    149  5.9  3.0  5.1  1.8
    
    [150 rows x 4 columns]
    '''
    
    iris.target_names
    # array(['setosa', 'versicolor', 'virginica'], dtype='<U10')
    

    调用PCA——降维

    # 两个特征
    pca = PCA(n_components=2) #实例化
    pca = pca.fit(X) #拟合模型
    X_dr = pca.transform(X) #获取新矩阵
    X_dr
    '''
    array([[-2.68412563,  0.31939725],
           [-2.71414169, -0.17700123],
           ....
           [ 1.90094161,  0.11662796],
           [ 1.39018886, -0.28266094]])
    '''
    # 由四个特征变为两个个特征
    

    可视化

    X_dr[y == 0, 0] # 标签为0的第一个特征
    X_dr[y == 0, 1] # 标签为0的第二个特征
    
    X_dr[y == 1, 0] # 标签为1的第一个特征
    X_dr[y == 2, 0] # 标签为2的第一个特征
    
    ...
    
    
    plt.figure()
    plt.scatter(X_dr[y==0, 0], X_dr[y==0, 1], c="red", label=iris.target_names[0])
    plt.scatter(X_dr[y==1, 0], X_dr[y==1, 1], c="black", label=iris.target_names[1])
    plt.scatter(X_dr[y==2, 0], X_dr[y==2, 1], c="orange", label=iris.target_names[2])
    plt.legend()
    plt.title('PCA of IRIS dataset')
    plt.show()
    

    在这里插入图片描述
    属性explained_variance_,查看降维后每个新特征向量上所带的信息量大小(可解释性方差的大小

    pca.explained_variance_
    # array([4.22824171, 0.24267075]) 第一主成分(第一个新特征)具有大部分的信息
    

    属性explained_variance_ratio,查看降维后每个新特征向量所占的信息量占原始数据总信息量的百分比

    一般来说,新特征能够反映原来特征的大部分信息(80%以上)即可

    pca.explained_variance_ratio_
    # array([0.92461872, 0.05306648])
    
    # 大部分信息都被有效地集中在了第一个特征上
    pca.explained_variance_ratio_.sum()
    # 0.977685206318795
    
    97.77% > 80%
    

    选择最好的n_components(特征个数):累积可解释方差贡献率曲线

    当参数n_components中不填写任何值,则默认返回min(X.shape)个特征,一般来说,样本量都会大于特征数目,所以什么都不填就相当于转换了新特征空间,但没有减少特征的个数。一般来说,不会使用这种输入方式。但我们却可以使用这种输入方式来画出累计可解释方差贡献率曲线,以此选择最好的n_components的整数取值。

    累积可解释方差贡献率曲线是一条以降维后保留的特征个数为横坐标,降维后新特征矩阵捕捉到的可解释方差贡献率为纵坐标的曲线,

    累积可解释方差贡献率曲线 即选 n_components =1 时,能反映原始信息多少;n_components =2 时,能反映原始信息多少;…;n_components =k 时,能反映原始信息多少

    能够帮助我们决定n_components最好的取值
    在这里插入图片描述

    2.2.2 用最大似然估计自选 n_components (新特征个数)

    pca_mle = PCA(n_components="mle")
    pca_mle = pca_mle.fit(X)
    X_mle = pca_mle.transform(X)
    X_mle
    '''
    array([[-2.68412563,  0.31939725, -0.02791483],
           [-2.71414169, -0.17700123, -0.21046427],
    '''
    #可以发现,mle为我们自动选择了3个特征
    pca_mle.explained_variance_ratio_.sum() # 0.9947878161267247
    

    2.2.3 按信息量占比选 n_components (新特征个数)

    输入[0,1]之间的浮点数,并且让参数svd_solver =='full',表示希望降维后的总解释性方差占比大于n_components 指定的百分比,即是说,希望保留百分之多少的信息量。

    pca_f = PCA(n_components=0.97,svd_solver="full")
    pca_f = pca_f.fit(X)
    X_f = pca_f.transform(X)
    '''
    array([[-2.68412563,  0.31939725],
           [-2.71414169, -0.17700123],
    '''
    pca_f.explained_variance_ratio_ # array([0.92461872, 0.05306648])
    
    pca_f.explained_variance_ratio_.sum() #  0.977685206318795
    

    2.3 PCA中的SVD

    2.3.1 PCA中的SVD哪里来?

    svd_solver是奇异值分解器的意思

    SVD有一种惊人的数学性质,即是它可以跳过数学神秘的宇宙,不计算协方差矩阵,直接找出一个新特征向量组成的n维空间,

    通过SVD和PCA的合作,sklearn实现了一种计算更快更简单,但效果却很好的“合作降维“。很多人理解SVD,是把SVD当作PCA的一种求解方法,其实指的就是在矩阵分解时不使用PCA本身的特征值分解,而使用奇异值分解来减少计算量。

    在transform过程之后,fit中奇异值分解的结果除了V(k,n)以外,就会被舍弃,而V(k,n)会被保存在属性components_ 当中,可以调用查看。

    PCA(2).fit(X).components_
    '''
    array([[ 0.36138659, -0.08452251,  0.85667061,  0.3582892 ],
           [ 0.65658877,  0.73016143, -0.17337266, -0.07548102]])
    '''
    
    PCA(2).fit(X).components_.shape  # (2, 4)
    
    

    2.3.2 重要参数svd_solver 与 random_state

    参数svd_solver是在降维过程中,用来控制矩阵分解的一些细节的参数。有四种模式可选:“auto”, “full”, “arpack”,“randomized”,默认”auto"。

    • auto”:基于X.shape和n_components的默认策略来选择分解器
    • full”,适合数据量比较适中,计算时间充足的情况
    • arpack”,可以加快运算速度,适合特征矩阵很大的时候,但一般用于特征矩阵为稀疏矩阵的情况
    • randomized”,适合特征矩阵巨大,计算量庞大的情况

    而参数random_state在参数svd_solver的值为"arpack" or "randomized"的时候生效,可以控制这两种SVD模式中的随机模式。通常我们就选用”auto“,不必对这个参数纠结太多

    2.3.3 重要属性components_

    PCA与特征选择的区别,即特征选择后的特征矩阵是可解读的,而PCA降维后的特征矩阵式不可解读的:PCA是将已存在的特征进行压缩,降维完毕后的特征不是原本的特征矩阵中的任何一个特征,而是通过某些方式组合起来的新特征。通常来说,在新的特征矩阵生成之前,我们无法知晓PCA都建立了怎样的新特征向量,新特征矩阵生成之后也不具有可读性

    在transform过程之后,fit中奇异值分解的结果除了V(k,n)以外,就会被舍弃,而V(k,n)会被保存在属性components_ 当中,可以调用查看。

    在矩阵分解时,PCA是有目标的:在原有特征的基础上,找出能够让信息尽量聚集的新特征向量。在sklearn使用的PCA和SVD联合的降维方法中,这些新特征向量组成的新特征空间其实就是V(k,n)。当V(k,n)是数字时,我们无法判断V(k,n)和原有的特征究竟有着怎样千丝万缕的数学联系。但是,如果原特征矩阵是图像,V(k,n)这个空间矩阵也可以被可视化的话,我们就可以通过两张图来比较,就可以看出新特征空间究竟从原始数据里提取了
    什么重要的信息。

    2.4 重要接口inverse_transform

    还原回原始数据中的特征矩阵

    inverse_transform并没有实现数据的完全逆转。这是因为,在降维的时候,部分信息已经被舍弃了,X_dr中往往不会包含原数据100%的信息,所以在逆转的时候,即便维度升高,原数据中已经被舍弃的信息也不可能再回来了。所以,降维不是完全可逆的

    2.4.1 用PCA做噪音过滤

    降维的目的之一就是希望抛弃掉对模型带来负面影响的特征,而我们相信,带有效信息的特征的方差应该是远大于噪音的,所以相比噪音,有效的特征所带的信息应该不会在PCA过程中被大量抛弃。inverse_transform能够在不恢复原始数据的情况下,将降维后的数据返回到原本的高维空间,即是说能够实现”保证维度,但去掉方差很小特征所带的信息“。利用inverse_transform的这个性质,我们能够实现噪音过滤。

    3 案例:PCA对手写数字数据集的降维

    导入需要的模块和库

    from sklearn.decomposition import PCA # 主成分分析
    from sklearn.ensemble import RandomForestClassifier as RFC # 随机森林
    from sklearn.model_selection import cross_val_score  # 交叉验证
    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    

    导入数据,探索数据

    data = pd.read_csv(r"C:\digit recognizor.csv")
    X = data.iloc[:,1:] # 特征矩阵
    y = data.iloc[:,0] # 标签
    X.shape
    

    画累计方差贡献率曲线,找最佳降维后维度的范围

    plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    
    pca_line = PCA().fit(X)
    plt.figure(figsize=[20,5])
    plt.plot(np.cumsum(pca_line.explained_variance_ratio_))
    plt.xlabel("降维后的特征个数")
    plt.ylabel("累计可解释性方差")
    plt.show()
    

    在这里插入图片描述
    降维后维度的学习曲线,继续缩小最佳维度的范围

    score = []
    for i in range(1,101,10):
        X_dr = PCA(i).fit_transform(X) # 降维 特征个数从 1 到 100 ,查看效果如何
        # 用新的特征矩阵 (随机森林)
        # 交叉验证 5折
        once = cross_val_score(RFC(n_estimators=10,random_state=0),X_dr,y,cv=5).mean()
        score.append(once)
        
    plt.figure(figsize=[20,5]) # 画布
    plt.plot(range(1,101,10),score)
    plt.show()
    

    在这里插入图片描述
    n_components 在20左右 模型效果最佳

    细化学习曲线,找出降维后的最佳维度

    score = []
    for i in range(10,25):
        X_dr = PCA(i).fit_transform(X)
        once = cross_val_score(RFC(n_estimators=10,random_state=0),X_dr,y,cv=5).mean()
        score.append(once)
    plt.figure(figsize=[20,5])
    plt.plot(range(10,25),score)
    plt.show()
    

    在这里插入图片描述

    score.index(max(score))+10   # 21
    

    可知,但降到21个特征的时候,模型效果最佳

    导入找出的最佳维度进行降维,查看模型效果

    X_dr = PCA(21).fit_transform(X)
    cross_val_score(RFC(n_estimators=10,random_state=0),X_dr,y,cv=5).mean()
    # 0.9176904761904762
    

    调整随机森林 n_estimators 参数

    X_dr = PCA(21).fit_transform(X)
    cross_val_score(RFC(n_estimators=100,random_state=0),X_dr,y,cv=5).mean()
    # 0.9435952380952382
    

    模型效果还好,跑出了94.36%的水平,但还是没有我们使用嵌入法特征选择过后的96%高,有没有什么办法能够提高模型的表现呢?

    们知道KNN的效果比随机森林更好,KNN在未调参的状况下已经达到96%的准确率,而随机森林在未调参前只能达到93%,这是模型本身的限制带来的,这个数据使用KNN效果就是会更好。

    from sklearn.neighbors import KNeighborsClassifier as KNN
    cross_val_score(KNN(),X_dr,y,cv=5).mean() # 默认k=5
    # 0.9676428571428571
    

    效果非常好

    KNN的k值学习曲线

    score = []
    for i in range(10):
        X_dr = PCA(21).fit_transform(X)
        once = cross_val_score(KNN(i+1),X_dr,y,cv=5).mean()
        score.append(once)
    plt.figure(figsize=[10,5])
    plt.plot(range(10),score)
    plt.show()
    
    cross_val_score(KNN(4),X_dr,y,cv=5).mean() # 交叉验证
    

    可以发现,原本785列的特征被我们缩减到21列之后,用KNN跑出了目前位置这个数据集上最好的结果。再进行更细致的调整,我们也许可以将KNN的效果调整到98%以上。PCA为我们提供了无限的可能,终于不用再因为数据量太庞大而被迫选择更加复杂的模型了!

    展开全文
  • 介绍了流形学习中 Hessian特征映射、拉普拉斯特征映射和局部切空间排列 3种非线性降维算法的概念和实现步骤,并基于三维的Swiss Roll数据点集通过实验对3种算法在参数选择和运算效率等方面进行了比较分析,期望?...
  • 降维算法概述

    2020-09-15 21:06:48
    降维方法按照是否线性和是否有监督来看主要大概可以分为这些: 线性无监督 主成分分析(PCA) 独立成分分析(ICA) 奇异值分解(SVD) 线性有监督 线性判别分析(LDA) 非线性无监督 流形学习(MDS,LLE,ISOMAP算法...

    引言

    在现实世界中,大部分数据是冗余的,以多个低维空间联合分布的形式存在。例如,我们每个人在不同的光和移动模式下的面部图像存在于大约9个子空间维中。手写数字集合MNIST中的单个数字近似存在于一个简单的子空间中,但在三维空间中表示。同时,当今的传感器以及各类移动终端不断地获取数据,数据量和维数都非常大,如何从高维数据中提取和分析数据就显得非常重要。

    凡是都具有两面,数据维度高(大量特征)既是优点——数据量越大,特征越多,分析的结果按道理越可信;但是也是缺点——造成“维度灾难”,可能无从下手,同时计算处理时耗费的资源太大。因此需要一种很好的方法来处理高维度数据,在减少维度特征同时,避免丢失太多信息。

    下面将从几个方面概述降维:


    降维

    在机器学习领域中所谓的降维就是指——采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。

    本质是采用一个映射函数 f : X → Y f:X\rightarrow Y f:XY,其中 X ∈ R n × d X \in R^{n \times d} XRn×d为原始的 n n n个数据点分布在 d d d维空间中, Y ∈ R n × k Y \in R^{n \times k} YRn×k为经过映射函数 f f f处理后,原始的 n n n个数据点分布在 k k k维空间中。一般地,类似这种处理形式将 d d d维数据维度转变成 k k k维特征( k < < d k << d k<<d),这就是降维。

    dimensionality reduction


    降维的目的

    降维的目的可以归结为以下几点:
    • 数据压缩。用于减少数据存储需要的空间大小,从存储角度考虑。
    • 数据可视化。如果数据维度很高,可视化会变得相当困难,而绘制二维三维数据的图表非常简单。
    • 去噪。维度降下来意味着我们保留的数据最主要的信息,而那些轻微的细小的相关性一部分而是噪音的影响。从信号处理的领域理解,我们通常认为我们感兴趣的信号具有较大的方差,噪声具有较小的方差,信号与噪声之比称为信噪比,信噪比越大意味着数据质量越好,反之信噪比越小意味着数据质量越差。
    • 提高计算、查询效率和性能。降维获得数据具有更少的特征,但是却保留数据的信息。去除噪声影响下,提高性能。同时更少的数据意味着处理的速度提高。

    降维的方法

    降维方法按照是否线性和是否有监督来看主要大概可以分为这些:
    • 线性无监督
      • 主成分分析(PCA)
      • 独立成分分析(ICA)
      • 奇异值分解(SVD)
    • 线性有监督
      • 线性判别分析(LDA)
    • 非线性无监督
      • 流形学习(MDS,LLE,ISOMAP算法详解)
        • 多维标度分析(MDS)
        • 局部线性嵌入(LLE)
        • 等距特征映射(ISOMAP)
      • 神经网络
        • 自编码器(Autoencoder)
    • 非线性有监督
      • 基于核函数的学习(KPCA, KICA)

    降维的原理基础

    关于降维本质可以简单的归纳为:就是把高维数据用低维度表示的问题了。可以通过一个简单的例子(可能不太贴切)。比如,你现在的位置可以用东经多少,北纬多少,海拔多少三个维度信息表示。但其实换一个说法,在卧室这个维度信息也可以表示。随着选择的参照物改变,也就是所谓的数据基变了。

    另外,数据 X X X一般是由数据字典(基底) D D D和系数矩阵 A A A,加上一些噪声 E E E构成:
    X = D A + E X=DA+E X=DA+E
    然而,现实中的许多数据都是冗余的,即低秩的。具体含义是有些维度的特征是没有价值,冗余的,可以用其他维度的特征线性表示。此外,有些维度的数据对于数据的具体应用没有很大价值,即蕴含了数据较少部分的信息。而有些维度特征蕴含关键信息。降维的目的正是基于数据的自身构成特点,通过:

    • 特征选择(过滤法,嵌入法)
    • 线性代数法(奇异值分解,特征分解)
    • 投影(核方法,T-SNE)
    • 深度学习(自编码器)

    将处于 d d d维的数据 X ∈ R n × d X \in R^{n \times d} XRn×d映射到处于 k k k维度空间的 Y ∈ R n × k Y \in R^{n \times k} YRn×k上。要求 d > > k d>>k d>>k获得蕴含数据大部分信息的 k k k维特征。去掉冗余以及不太重要的维度特征信息。


    参考

    展开全文
  • 几种降维算法

    2021-08-24 20:25:39
    (2)t-SNE,做出的优化是用t分布取代SNE中的高斯分布,使得降维后的数据,同类之间更加紧凑,不同类之间距离加大。换言之,对应于无监督聚类指标轮廓系数更好。 2.PCA 算法思想:将原有的n个特征,投影到k为空间,k...

    1.TSNE
    算法思想:
    (1)SNE,其基本思想为在高维空间相似的数据点,映射到低维空间距离也是相似的。算法利用距离表达两个点之间的相似性。常用的距离度量方式是:欧式距离。
    (2)t-SNE,做出的优化是用t分布取代SNE中的高斯分布,使得降维后的数据,同类之间更加紧凑,不同类之间距离加大。换言之,对应于无监督聚类指标轮廓系数更好。

    2.PCA
    算法思想:将原有的n个特征,投影到k为空间,k维度空间之间两两正交称为主成分,新的特征由原特征变换而来。

    算法实现:
    在python中通过调用模块sklearn,两者都是封装好的函数,参考函数文档调参即可。

    展开全文
  • 请参阅快速还原算法-Google搜索[^]。
  • 经典降维算法局部线性嵌入LLE算法的matlab代码,亲测可用
  • 降维算法总结

    万次阅读 2019-03-30 19:35:50
    1.降维简介 1)相关背景 (1)在许多领域的研究与应用中,通常需要对含有多个变量的数据进行观测,收集大量数据后进行分析寻找规律。 多变量大数据集无疑会为研究和应用提供丰富的信息,但是也在一定程度上增加了...

    作者:jliang

    https://blog.csdn.net/jliang3

    1.降维简介

    1)相关背景

    (1)在许多领域的研究与应用中,通常需要对含有多个变量的数据进行观测,收集大量数据后进行分析寻找规律。

    • 多变量大数据集无疑会为研究和应用提供丰富的信息,但是也在一定程度上增加了数据采集的工作量。
    • 更重要的是在很多情形下,许多变量之间可能存在相关性,从而增加了问题分析的复杂性。
    • 如果分别对每个指标进行分析,分析往往是孤立的,不能完全利用数据中的信息,因此盲目减少指标会损失很多有用的信息,从而产生错误的结论。

    (2)因此需要找到一种合理的方法,在减少需要分析的指标同时,尽量减少原指标包含信息的损失,以达到对所收集数据进行全面分析的目的。

    (3)由于各变量之间存在一定的相关关系,因此可以考虑将关系紧密的变量变成尽可能少的新变量,使这些新变量是两两不相关的,那么就可以用较少的综合指标分别代表存在于各个变量中的各类信息。

    (4)主成分分析与因子分析就属于这类降维算法。

    2)数据降维

    (1)降维就是一种对高维度特征数据预处理方法,是应用非常广泛的数据预处理方法。

    (2)降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。

    (3)在实际的生产和应用中,降维在一定的信息损失范围内,可以为我们节省大量的时间和成本。

    3)降维的优点

    • 使得数据更容易使用
    • 降低算法的计算开销
    • 去除噪声
    • 使得结果容易理解

    4)降维算法

    • 奇异值分解(SVD)
    • 主成分分析(PCA)
    • 因子分析(FA)
    • 独立成分分析(ICA)

    2.主成分分析(PCA

    1)PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。

    (1)主成分分析试图在力保数据信息丢失最少的原则下,对多个变量进行最佳综合简化,即对高维变量空间进行降维处理。

    (2)PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。

    (3)PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。转换坐标系时,以方差最大的方向作为坐标轴方向,因为数据的最大方差给出了数据的最重要的信息。

    • 第一个新坐标轴选择是原始数据中方差最大的方向。
    • 第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的。
    • 第三个轴是与第1,2个轴正交的平面中方差最大的。
    • 依次类推,可以得到n个这样的坐标轴。

    (4)通过这种方式获得的新的坐标轴,我们发现,大部分方差都包含在前面k个坐标轴中,后面的坐标轴所含的方差几乎为0。

    • 于是,我们可以忽略余下的坐标轴,只保留前面k个含有绝大部分方差的坐标轴。
    • 事实上,这相当于只保留包含绝大部分方差的维度特征,而忽略包含方差几乎为0的特征维度,实现对数据特征的降维处理。

    2)如何得到包含最大差异性的主成分方向

    (1)通过计算数据矩阵的协方差矩阵,然后得到协方差矩阵的特征值特征向量,选择特征值最大(即方差最大)的k个特征所对应的特征向量组成的矩阵。这样就可以将数据矩阵转换到新的空间当中,实现数据特征的降维。

    (2)由于得到协方差矩阵的特征值特征向量有两种方法:特征值分解协方差矩阵、奇异值分解协方差矩阵,所以PCA算法有两种实现方法:基于特征值分解协方差矩阵实现PCA算法、基于SVD分解协方差矩阵实现PCA算法。

    3)重点归纳

    (1)线性变换=>新特征轴可由原始特征轴线性变换表征

    (2)线性无关=>构建的特征轴是正交的

    (3)主要线性分量(或者说是主成分)=>方差加大的方向

    (4)PCA算法的求解就是找到主要线性分量及其表征方式的过程

    4)PCA使用例子

    from sklearn.decomposition import PCA

    import numpy as np

    X = np.array([[-1, 1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])

    pca=PCA(n_components=1)pca.fit(X)

    3. 因子分析(FA

    1)因子分析简介

    (1)因子分析是从假设出发,它是假设所有的自变量x出现的原因是因为背后存在一个潜变量f(也就是我们所说的因子),在这个因子的作用下,x可以被观察到。

    (2)因子分析是通过研究变量间的相关系数矩阵,把这些变量间错综复杂的关系归结成少数几个综合因子,并据此对变量进行分类的一种统计分析方法。

    (3)因子分析就是将原始变量转变为新的因子,这些因子之间的相关性较低,而因子内部的变量相关程度较高。

    (4)因子分析可以用于降维,但因子分析的作用远不止降维。

    (5)例子:一个学生考试,数学,化学 ,物理都考了满分,那么我们认为这个学生理性思维较强,理性思维就是一个因子。在这个因子的作用下,偏理科的成绩才会那么高。

    2)因子分析的主要目的

    (1)探索结构:在变量之间存在高度相关性的时候我们希望用较少的因子来概括其信息。

    (2)简化数据:把原始变量转化为因子得分后,使用因子得分进行其他分析,比如聚类分析、回归分析等。

    (3)综合评价:通过每个因子得分计算出综合得分,对分析对象进行综合评价。

    3)相关的概念

    (1)因子载荷

    • 因子载荷就是每个原始变量和每个因子之间的相关系数,它反映了变量对因子的重要性。
    • 通过因子载荷值的高低,我们能知道变量在对应因子中的重要性大小,这样能够帮助我们发现因子的实际含义,有利于因子的命名。
    • 当有多个因子的时候,因子载荷将构成一个矩阵,称为因子载荷矩阵。

    (2)变量共同度

    1. 变量共同度就是每个变量所包含的信息能够被因子所解释的程度,其取值范围介于0和1之间,取值越大,说明该变量能被因子解释的程度越高。

    (3)因子旋转

    • 因子分析的结果需要每个因子都要有实际意义,有时,原始变量和因子之间的相关系数可能无法明显地表达出因子的含义,为了使这些相关系数更加显著,可以对因子载荷矩阵进行旋转,使原始变量和因子之间的关系更为突出,从而对因子的解释更加容易。
    • 旋转方法一般采用最大方差法,该方法能够使每个变量尽可能在一个因子上有较高载荷,在其余的因子上载荷较小,从而方便对因子进行解释。

    (4)因子得分

    • 因子得分可以用来评价每个个案在每个因子上的分值,该分值包含了原始变量的信息,可以用于代替原始变量进行其他统计分析,比如回归分析,可以考虑将因子得分作为自变量,与对应的因变量进行回归。
    • 原始变量的数值是可以直接观测到的,而因子得分只能通过原始变量和因子之间的关系计算得到,并且因子得分是经过标准化之后的数值,各个因子得分之间不受量纲的影响。

    4)因子分析步骤

    (1)判断数据是否适合因子分析

    • 因子分析的变量要求是连续变量,分类变量不适合直接进行因子分析。
    • 建议个案个数是变量个数的5倍以上,这只是一个参考依据,并不是绝对的标准。
    • KMO检验统计量在0.5以下,不适合因子分析,在0.7以上时,数据较适合因子分析,在0.8以上时,说明数据极其适合因子分析。

    (2)构造因子变量

    (3)利用因子旋转方法使得因子更具有实际意义

    (4)计算每个个案因子得分

    5)确定提取因子个数的标准

    (1)初始特征值大于1的因子个数

    (2)累积方差贡献率达到一定水平(60%)的因子个数

    (3)碎石图中处于较陡峭曲线上所对应的因子个数

    (4)依据对研究事物的理解而指定因子个数

    6)主成分和因子分析比较

    (1)因子分析中是把变量表示成各因子的线性组合,而主成分分析中则是把主成分表示成各个变量的线性组合。

    • 主成分分析仅仅是变量变换:用原始变量的线性组合表示新的综合变量,即主成分。
    • 因子分析需要构造因子模型:用潜在的假想变量和随机影响变量的线性组合表示原始变量。因子模型估计出来后,需要对所得的公共因子进行解释。

    (2)主成分分析的重点在于解释各变量的总方差,而因子分析则把重点放在解释各变量之 间的协方差。

    (3)主成分分析中不需要有假设(assumptions),因子分析则需要一些假设。因子分析的假设包括:各个共同因子之间不相关,特殊因子(specific factor)之间也不相关,共同因子和特殊因子之间也不相关。

    (4)主成分分析中,当给定的协方差矩阵或者相关矩阵的特征值是唯一的时候,主成分一般是独特的;而因子分析中因子不是独特的,可以旋转得到不到的因子。

    (5)在因子分析中,因子个数需要分析者指定(spss)根据一定的条件自动设定,只要是特征值大于1的因子进入分析),而指 定的因子数量不同而结果不同。在主成分分析中,成分的数量是一定的,一般有几个变量就有几个主成分。

    4.线性判别分析(LDA

    1)LDA简介

    (1)LDA线性判别分析也是一种经典的降维方法,LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。

    (2)这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。LDA的思想可以用一句话概括,就是“*投影后类内方差最小,类间方差最大*”。要将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。

    (3)例子:假设我们有两类数据分别为红色和蓝色,如下图所示,这些数据特征是二维的,我们希望将这些数据投影到一维的一条直线,让每一种类别数据的投影点尽可能的接近,而红色和蓝色数据中心之间的距离尽可能的大。

    (4)LDA除了可以用于降维以外,还可以用于分类。

    1. 一个常见的LDA分类基本思想是假设各个类别的样本数据符合高斯分布,这样利用LDA进行投影后,可以利用极大似然估计计算各个类别投影数据的均值和方差,进而得到该类别高斯分布的概率密度函数。
    2. 当一个新的样本到来后,我们可以将它投影,然后将投影后的样本特征分别代入各个类别的高斯分布概率密度函数,计算它属于这个类别的概率,最大的概率对应的类别即为预测类别。

    2)LDA总结

    (1)LDA算法既可以用来降维,又可以用来分类,但主要还是用于降维。在进行图像识别相关的数据分析时,LDA是一个有力的工具。

    (2)LDA的中心思想是最大化类间间隔和最小化类内距离。

    (3)LDA对数据做了一些很强的假设,尽管这些假设在实际中并不一定完全满足,但LDA已被证明是非常有效的一种降维方法。主要是因为线性模型对噪声的鲁棒性比较好,当表达能力有局限性,可以通过引入核函数扩展LDA以处理分布较为复杂的数据。

    1. 每个类数据都是高斯分布
    2. 各个类的协方差相等

    (4)LDA的优点

    • 在降维过程中可以使用类别的先验知识,而不像PCA这样的无监督学习则无法使用类别先验知识。
    • LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优。

    (5)LDA的缺点

    • LDA不适合对非高斯分布样本进行降维,PCA也有这个问题。
    • LDA降维最多降到类别数k-1的维数,如果降维的维度大于k-1,则不能使用LDA。当然有一些LDA的进化版算法可以绕开这个问题。
    • LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好。
    • LDA可能过拟合数据。

    3)LDA与PCA的相同点

    (1)两者均可以对数据进行降维。

    (2)两者在降维时均使用了矩阵特征分解的思想。

    (3)两者都假设数据符合高斯分布。

    4)LDA与PCA的不同点

    (1)投影方向不同

    1. PCA选择的是投影后方差最大的方向。PCA假设方差越大,信息量越多,用主要成分来表示原始数据可以去除冗余的维度,达到降维。
    2. LDA选择的是投影后类内方差小、类间方差大的方向。其用到了类别标签信息,为了找到数据中具有判别性的维度,使得原始数据在这些方向上投影后,不同类别尽可能区分开。

    (2)LDA是有监督降维方法,而PCA是无监督的降维方法。

    (3)LDA降维最多降到k-1的维数(k为类别数),而PCA没有这个限制。

    (4)LDA除了用于降维还可以用于分类,PCA只能用于降维。

    (5)在语音识别中应用例子

    • 想从一段音频中提取出人的语音信号,这时可以使用PCA先进行降维,过滤掉一些固定频率(方差较小)的背景噪声。
    • 想要从这段音频中区分出声音属于哪个人,那么应该使用LDA对数据进行降维,使每个人的语音信号具有区分性。

    (6)在人脸识别领域应用例子

    • PCA的人脸识别方法(也称特征脸方法)将人脸图像按行展开成一个高纬向量,对多个人脸特征的协方差矩阵做特征值分解,其中最大特征值对应的特征向量具有与人脸相似的形状。PCA降维一般情况下保留的是最佳描述特征(主成分),而分类特征。
    • 想要达到更好的人脸识别效果,应该使用LDA方法对数据集进行降维,使得不同人脸在投影后的特征具有一定区分性。

    参考文献 

    [1]. 主成分分析(PCA)原理详解.https://blog.csdn.net/program_developer/article/details/80632779

    [2]. 数据分析之因子分析. https://www.jianshu.com/p/bd6a6ed29f9f

    [3]. 主成分和因子分析原理及比较. https://www.cnblogs.com/appboling/p/3797151.html

    [4]. 【机器学习】LDA线性判别分析原理及实例. https://blog.csdn.net/brucewong0516/article/details/78684005

    展开全文
  • PCA降维算法的原理及应用

    千次阅读 2020-02-26 20:48:39
    PCA降维算法的原理 1.什么是PCA降维算法? PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA 主要是通过线性变换将我们拿到的具有高维度的原始数据在数据预处理阶段(数据清洗)进行降维,也可以...
  • 分析多视图数据和多视图学习,在典型相关分析(CCA)的基础上追溯多视图CCA和核CCA,介绍多视图降维算法从两个视图到多个视图以及从线性到非线性的演化过程,总结各种融入判别信息和近邻信息的多视图降维算法,以更...
  • 提出了一种基于LPP和LDA的降维算法。该算法不仅考虑了LPP能保持局部邻近关系属性,还考虑了LDA能使降维后的数据更易于分类属性,并且该算法是线性的,很容易将新样本映射到目标空间。在人脸识别中的实验验证了算法的...
  • 简述多种降维算法

    千次阅读 2018-09-23 23:24:38
    陈汝丹 算法与数学之美 本文首先给出了七种算法的一个信息表,归纳了关于每个算法可以调节的(超)参数、算法主要目的等等,然后介绍了降维的一些基本概念,包括降维是什么、为什么... 降维算法 3.1 主成分分析...
  • PCA降维算法总结以及matlab实现PCA(个人的一点理解) - New begin, new .pdf 在进行图像的特征提取的过程中,提取的特征维数太多经常会导致特征匹配时过于复杂,消耗系统资源,不得不采用特征降维的方法。所谓特征...
  • isomap降维算法

    2021-04-15 00:51:48
    欢迎关注”生信修炼手册”!降维算法分为线性和非线性两大类,主成分分析PCA属于经典的线性降维,而t-SNE, MDS等属于非线性降维。在非线性降维中,有一个重要的概念叫做流形学习manif...
  • 降维算法实现原理

    2020-11-10 15:12:24
    如果能有一种算法可以衡量特征上的信息,使得在降维的过程中,在减少特征数量的同时又能保留更多的有效的信息(想兼得鱼和熊掌)。也就是说,将那些重复的信息(线性相关的)合并一下,把无效的特征删除掉,
  • 本文将先介绍PAA降维算法,再讨论LTTB降维算法,最后使用工业生产数据对两者进行实验对比,整个过程已整理为论文报告的一部分。因实验部分数据保密关系,本博客将只截取部分论文报告内容,但已足以讲清LTTB算法。 ...
  • 文中借鉴经典凸技术聚类算法中的全局线性降维算法PCA与LDA聚类算法思想,提出了一种改进型的PCA降维算法L-PCA,该算法在保证原有样本协方差结构不变的前提下,获取变换矩阵中最重要的主分量进行赋权,通过调节类内与类间...
  • 当我们想对高维数据集进行分类,但又不清楚这个数据集有没有很好的可分性(同类之间间隔小、异类之间间隔大)时,可以通过降维算法将数据投影到二维或三维空间中。 很久以前,就有人提出一种降维算法,主成分分析( ...
  • LLE降维算法

    2021-04-17 00:49:45
    欢迎关注”生信修炼手册”!流形分析作为非线性降维的一个分支,拥有多种算法,常见的算法列表如下流形分析的要点在于降维之后,仍然保留流形中的某些几何属性。之前介绍的isomap保留了测地距离这...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 54,556
精华内容 21,822
关键字:

降维算法