精华内容
下载资源
问答
  • 同时,更直观的,我们把协方差矩阵可视化: 图1)鸢尾花数据集的样本协方差矩阵,绘制代码可参考附录资料2 3.2 特征值分解 对于一个对称矩阵来说,对应于不同特征值的特征向量,必定彼此具有正交性。如果再将这一组...

    问题引入

    调用sklearn库时,使用decomposition.PCA(n_components=2)就可以把多维的数据降至两维,里面的过程一概不知,看起来像个黑盒,心里面很没有底。今天小王同学就来尝试解答以下问题
    1)主成分分析法PCA里的分解过程是什么样的?基于什么原理
    2)相对原数据,它保留了哪些信息,又损失了什么?怎么科学选择成分的数量?

    代码部分参考自Sebastian Raschka的博客pca_in_3_steps,感谢原作大神

    PCA的实现

    1. 数据集加载

    作为其他学习资料的一个补充,概念部分不多赘述。概括来说,我们对一个D维的数据集运用PCA,希望最大化M维子空间的保留信息,同时最小化(D-M)维空间上的损失信息。今天以代码层层递进的形式,结合图像对分解过程和主成分选取进行说明。

    首先,我们准备经典数据集iris,在sklearn数据库中即可加载

    from sklearn import datasets
    
    # 加载数据
    iris = datasets.load_iris()
    # help(datasets.load_iris)  # Check the data struture
    
    X = iris.data # Each row is an observation, each col is a variable
    y = iris.target
    print(" The shape of X and y ", X.shape, y.shape,"\n", 
        "Features are ", iris.feature_names, "\n", "Classes are ", iris. target_names)
    
    The shape of X and y  (150, 4) (150,) 
     Features are  ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'] 
     Classes are  ['setosa' 'versicolor' 'virginica']
    

    2. 数据预处理

    这一步,自己尝试了MinMax scaling,由于petal length特征的值域过大,最大最小化缩放后,特征三和其余四个特征不在一个数量级。考虑到数量级的差异对PCA这种距离敏感型算法,容易造成影响。故采用了原作者的Z-score归一化方法,其他方法笔者未试验效果。

    from sklearn.preprocessing import StandardScaler
    X_std = StandardScaler().fit_transform(X)
    

    对于调库的细节,特别补充说明下,查阅资料时发现一些数据大神们会强调不同归一化方法之间的区别。比如最容易和StandardScaler方法混淆的Normalizer,这里整理如下(描述引用自sklearn官方文档)

    • StandardScaler - Standardize features by removing the mean and scaling to unit variance.
      重点,按每列(不同的特征)进行操作,与样本均值的相对差值 / 样本方差
    • Normalizer - Each sample (i.e. each row of the data matrix) with at least one non zero component is rescaled independently of other samples so that its norm (l1, l2 or inf) equals one.
      重点,按每一行(不同的样本点)进行操作,把整行做单位距离归一化

    3. 主成分分解

    3.1 协方差矩阵构造

    这里,样本协方差矩阵(Sample covariance matrix)采用其原始定义进行求解。它的第i行第j列的单个元素可表示为Cov(X_i,X_j),其中X_i,X_j分别对应着样本集的第i列和第j列特征数据,k代表观察值序号(k=1,2,…,n),则有矩阵元素:
    C o v ( X i , X j ) = 1 n ∑ k = 1 n ( x i , k − E ( X i ) ) ( x j , k − E ( X j ) ) Cov(X_{i}, X_{j}) = \frac{1}{n}\sum^{n}_{k=1}(x_{i,k} - E(X_{i}))(x_{j,k} - E(X_{j})) Cov(Xi,Xj)=n1k=1n(xi,kE(Xi))(xj,kE(Xj))

    import numpy as np
    X_train = X_std # Create a reference to the origin
    X_mean = np.mean(X_train, axis=0)   # A vector with size (4,)
    n = X_train.shape[0]
    X_cov = (X_train - X_mean).T @ (X_train - X_mean) / n
    X_cov   # A symmetric matrix with size (4,4)
    

    可以通过np.cov(X_train.T, bias=True)实现同样的结果,但要注意输入样本矩阵的形状。同时,更直观的,我们把协方差矩阵可视化:
    在这里插入图片描述

    图1)鸢尾花数据集的样本协方差矩阵,绘制代码可参考附录资料2

    3.2 特征值分解

    对于一个对称矩阵来说,对应于不同特征值的特征向量,必定彼此具有正交性。如果再将这一组特征向量分别做归一化(normalization)处理,就能得到一组单位正交向量,进而组成正交矩阵(orthogonal matrix)。

    # 计算协方差矩阵的特征值、特征向量
    import numpy as np
    eig_val, eig_vec = np.linalg.eig(X_cov)
    
    # 检验得到的是否为单位正交矩阵,即每一列的norm和为1
    for ev in eig_vec.T:
        np.testing.assert_array_almost_equal(1.0, np.linalg.norm(ev))
        
    # 这里直接用assert,标准过高,浮点误差会报错
    # numpy自带的assert almost,默认精度为六位,可设置参数decimal修改
    # 方法二,也可使用u,s,v = np.linalg.svd(X_std.T),eig_vec = u
    print("Eigen values\n", eig_val, "\nEigen vectors\n", eig_vec)
    
    Eigen values
     [2.93808505 0.9201649  0.14774182 0.02085386] 
    Eigen vectors
     [[ 0.52106591 -0.37741762 -0.71956635  0.26128628]
     [-0.26934744 -0.92329566  0.24438178 -0.12350962]
     [ 0.5804131  -0.02449161  0.14212637 -0.80144925]
     [ 0.56485654 -0.06694199  0.63427274  0.52359713]]
    

    3.3 方差解释

    回到我们开头提出的问题,已经得到了特征值和特征向量,但到底选用多少维度合适,是我们这次希望了解的。
    对于鸢尾花数据集来说,维度小还能直观看出,但面对以后的研究和工作,我们需要掌握一定的分析方法。下面介绍其中一种——利用降序排列的特征值累计求和(Cumulative sum)的方法:

    tot = sum(eig_val)
    var_exp = [(i / tot)*100 for i in sorted(eig_val, reverse=True)]
    cum_var_exp = np.cumsum(var_exp) # Return a cumulative sum
    print("Cumulative sum \n", cum_var_exp)
    

    在这里插入图片描述
    图2)鸢尾花数据集的特征值累计求和,绘制代码可参考附录资料1

    从图像中可以看到绝大多数方差(72.96%)能被第一个主成分解释,再加上第二个主成分,两者共能解释95%以上的方差。

    3.4 降维投影

    我们知道降维方法在追求简化的过程中,希望尽可能大的保留所需的原始信息。前两项主成分已经能解释绝大多数的数据变化(通常需要在80%以上),这时其余主成分被舍弃,就不至于损失太多信息。因此,在该案例下,选择降维至二维子空间是一个合理的决定。

    # 根据上述的分析,选用前两个主成分进行降维
    
    proj_mat = np.hstack((eig_vec[:, 0].reshape(-1,1), 
                          eig_vec[:, 1].reshape(-1,1)))
    print('Projection matrix\n', proj_mat)
    Y = X_std @ proj_mat # Y即是我们最终需要的降维结果
    
    Projection matrix
     [[ 0.52106591 -0.37741762]
     [-0.26934744 -0.92329566]
     [ 0.5804131  -0.02449161]
     [ 0.56485654 -0.06694199]]
    

    3.5 降维结果

    target_names = ['setosa','versicolor','virginica']
    
    with plt.style.context('seaborn-whitegrid'):
        plt.figure(figsize=(6, 4))
        for lab, col in zip((0, 1, 2),
                            ('blue', 'red', 'green')):
            plt.scatter(Y[y==lab, 0],
                        Y[y==lab, 1],
                        label=target_names[lab],
                        c=col)
        plt.xlabel('Principal Component 1')
        plt.ylabel('Principal Component 2')
        plt.legend(loc='lower center')
        plt.tight_layout()
        plt.show()
    

    在这里插入图片描述

    问题总结

    本次,我们尝试拆解了PCA的实现过程,并知道如何合理筛选维度数。但依旧有一些未尽的工作。包括以下部分:

    1. 对于异常值的识别没有做。由于PCA方法中,涉及计算样本均值和方差,而这些统计值对异常值(outliers)的干扰非常敏感,需要留心。
    2. 未讨论更多的成分选取方法。是否选择80%以上解释程度的成分就是最佳选择,还有没有其他合理的选择方法,本次并未深究。
    3. 未与LDA、ICA等其他降维方法做对比。PCA的时间复杂度和作为线性变换的局限并没有进一步讨论。

    附录

    参考资料:

    1. https://sebastianraschka.com/Articles/2015_pca_in_3_steps.html (代码部分均参考此文档,感谢原作,非常详尽)
    2. https://www.statology.org/covariance-matrix-python/#:~:text=A covariance matrix is a square matrix that,steps to create a covariance matrix in Python.
    3. https://stackoverflow.com/questions/39120942/difference-between-standardscaler-and-normalizer-in-sklearn-preprocessing

    经验有限,如有错误,欢迎指正

    展开全文
  • 摘自《阵列信号处理及MATLAB实现》(第二版)张小飞 李建峰 徐大专 等 著

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    摘自《阵列信号处理及MATLAB实现》(第二版)张小飞 李建峰 徐大专 等 著

    展开全文
  • 实践中常通过对 X​X​X​ 进行奇异值分解来替代协方差矩阵特征值分解。 下面解释这句话的意思。 首先我们复习一下,将任意形状的矩阵 XXX 如何进行 SVD 分解,其基本思路是构造对称矩阵。 XTX=(VΣTUT)(UΣVT)=V...

    在周志华的《机器学习》第 10 章介绍“主成分分析”一节中,有这样一句批注:

    实践中常通过对 X ​ X​ X 进行奇异值分解来替代协方差矩阵的特征值分解。

    下面解释这句话的意思。

    首先我们复习一下,将任意形状的矩阵 X X X 如何进行 SVD 分解,其基本思路是构造对称矩阵。

    X T X = ( V Σ T U T ) ( U Σ V T ) = V Σ T ( U T U ) Σ V T = V Σ T Σ V T X^TX = (V \Sigma^T U^T)(U \Sigma V^T)=V \Sigma^T (U^TU) \Sigma V^T=V \Sigma^T \Sigma V^T XTX=(VΣTUT)(UΣVT)=VΣT(UTU)ΣVT=VΣTΣVT

    X X T = ( U Σ V T ) ( V Σ T U T ) = U Σ ( V T V ) Σ T U T = U Σ Σ T U T XX^T = (U \Sigma V^T)(V \Sigma^T U^T)=U \Sigma (V^TV) \Sigma^T U^T=U \Sigma \Sigma^T U^T XXT=(UΣVT)(VΣTUT)=UΣ(VTV)ΣTUT=UΣΣTUT

    这里 X T X X^TX XTX 是协方差矩阵,是一个方阵,并且有:

    1. V V V X T X X^TX XTX 的特征向量按照列排成的矩阵(按照 X T X X^TX XTX 的特征值从大到小对应排列);
    2. U U U X X T XX^T XXT 的特征向量按照列排成的矩阵(按照 X X T XX^T XXT 的特征值从大到小对应排列)。

    PCA 是对 X X X 的协方差矩阵 X T X X^TX XTX 做特征值分解,即要得到的是矩阵 V V V

    而 PCA 求出的 V V V 只是坐标旋转以后的新线性空间的标准正交基,降维还得做线性变换,即用矩阵 V V V 右乘,得 X V XV XV ,矩阵 X V XV XV 才是我们关心的降维以后的数据。由 X = U Σ V T X=U \Sigma V^T X=UΣVT,可以得到 X V = U Σ XV=U \Sigma XV=UΣ,即新线性空间的坐标。

    SVD 的经典算法有 Golub-Kahan 算法、分治法、Jacobi 法几种,这些算法其实都比较快,在一些软件底层的实现中,采用的是上述方法中的一种。因此,我们想要的是 V V V,经典算法帮我们快速算出了 V V V,因此就没有必要先算 X T X X^TX XTX,再对其做特征值分解了。这其实就是书上这句批注的意思。

    展开全文
  • ,所以PCA算法有两种实现方法:基于特征值分解协方差矩阵实现PCA算法、基于SVD分解协方差矩阵实现PCA算法。 既然提到协方差矩阵,那么就简单介绍一下方差和协方差的关系。然后概括介绍一下特征值分解矩阵原理、奇异...

    “微信公众号”

    1.相关背景

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

    因此需要找到一种合理的方法,在减少需要分析的指标同时,尽量减少原指标包含信息的损失,以达到对所收集数据进行全面分析的目的。由于各变量之间存在一定的相关关系,因此可以考虑将关系紧密的变量变成尽可能少的新变量,使这些新变量是两两不相关的,那么就可以用较少的综合指标分别代表存在于各个变量中的各类信息。主成分分析与因子分析就属于这类降维算法。

    2. 数据降维

    降维就是一种对高维度特征数据预处理方法。降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。在实际的生产和应用中,降维在一定的信息损失范围内,可以为我们节省大量的时间和成本。降维也成为应用非常广泛的数据预处理方法。

    降维具有如下一些优点:

    • 1) 使得数据集更易使用。
    • 2) 降低算法的计算开销。
    • 3) 去除噪声。
    • 4) 使得结果容易理解。

    降维的算法有很多,比如奇异值分解(SVD)、主成分分析(PCA)、因子分析(FA)、独立成分分析(ICA)。

    3. PCA原理详解

    3.1 PCA的概念

    PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。其中,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。依次类推,可以得到n个这样的坐标轴。通过这种方式获得的新的坐标轴,我们发现,大部分方差都包含在前面k个坐标轴中,后面的坐标轴所含的方差几乎为0。于是,我们可以忽略余下的坐标轴,只保留前面k个含有绝大部分方差的坐标轴。事实上,这相当于只保留包含绝大部分方差的维度特征,而忽略包含方差几乎为0的特征维度,实现对数据特征的降维处理

    思考:我们如何得到这些包含最大差异性的主成分方向呢?

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

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

    既然提到协方差矩阵,那么就简单介绍一下方差和协方差的关系。然后概括介绍一下特征值分解矩阵原理、奇异值分解矩阵的原理。概括介绍是因为在我之前的《机器学习中SVD总结》文章中已经详细介绍了特征值分解原理和奇异值分解原理,这里就不再重复讲解了。可以看我的

    《机器学习中SVD总结》文章。地址:机器学习中SVD总结

    3.2 协方差和散度矩阵

    样本均值:

    样本方差:


    样本X和样本Y的协方差:

    由上面的公式,我们可以得到以下结论:

    (1) 方差的计算公式是针对一维特征,即针对同一特征不同样本的取值来进行计算得到;而协方差则必须要求至少满足二维特征;方差是协方差的特殊情况。

    (2) 方差和协方差的除数是n-1,这是为了得到方差和协方差的无偏估计。

    协方差为正时,说明X和Y是正相关关系;协方差为负时,说明X和Y是负相关关系;协方差为0时,说明X和Y是相互独立。Cov(X,X)就是X的方差。当样本是n维数据时,它们的协方差实际上是协方差矩阵(对称方阵)。例如,对于3维数据(x,y,z),计算它的协方差就是:

    散度矩阵定义为:

    对于数据X的散度矩阵为。其实协方差矩阵和散度矩阵关系密切,散度矩阵就是协方差矩阵乘以(总数据量-1)。因此它们的特征值和特征向量是一样的。这里值得注意的是,散度矩阵是SVD奇异值分解的一步,因此PCA和SVD是有很大联系。

    3.3 特征值分解矩阵原理

    (1) 特征值与特征向量

    如果一个向量v是矩阵A的特征向量,将一定可以表示成下面的形式:

    其中,λ是特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。

    (2) 特征值分解矩阵

    对于矩阵A,有一组特征向量v,将这组向量进行正交化单位化,就能得到一组正交单位向量。特征值分解,就是将矩阵A分解为如下式:


    其中,Q是矩阵A的特征向量组成的矩阵,\Sigma则是一个对角阵,对角线上的元素就是特征值。

    具体了解这一部分内容看我的《机器学习中SVD总结》文章。地址:机器学习中SVD总结

    3.4 SVD分解矩阵原理

    奇异值分解是一个能适用于任意矩阵的一种分解的方法,对于任意矩阵A总是存在一个奇异值分解:

    假设A是一个m*n的矩阵,那么得到的U是一个m*m的方阵,U里面的正交向量被称为左奇异向量。Σ是一个m*n的矩阵,Σ除了对角线其它元素都为0,对角线上的元素称为奇异值。是v的转置矩阵,是一个n*n的矩阵,它里面的正交向量被称为右奇异值向量。而且一般来讲,我们会将Σ上的值按从大到小的顺序排列。

    SVD分解矩阵A的步骤:

    (1) 求的特征值和特征向量,用单位化的特征向量构成 U。

    (2) 求的特征值和特征向量,用单位化的特征向量构成 V。

    (3) 将或者的特征值求平方根,然后构成 Σ。

    具体了解这一部分内容看我的《机器学习中SVD总结》文章。地址:机器学习中SVD总结

    3.5 PCA算法两种实现方法

    (1) 基于特征值分解协方差矩阵实现PCA算法

    输入:数据集 ,需要降到k维。

    1) 去平均值(即去中心化),即每一位特征减去各自的平均值。、

    2) 计算协方差矩阵,注:这里除或不除样本数量n或n-1,其实对求出的特征向量没有影响。

    3) 用特征值分解方法求协方差矩阵的特征值与特征向量。

    4) 对特征值从大到小排序,选择其中最大的k个。然后将其对应的k个特征向量分别作为行向量组成特征向量矩阵P。

    5) 将数据转换到k个特征向量构建的新空间中,即Y=PX。

    总结:

    1)关于这一部分为什么用 ,这里面含有很复杂的线性代数理论推导,想了解具体细节的可以看下面这篇文章。

    CodingLabs - PCA的数学原理

    2)关于为什么用特征值分解矩阵,是因为 是方阵,能很轻松的求出特征值与特征向量。当然,用奇异值分解也可以,是求特征值与特征向量的另一种方法。

    举个例子:


    以X为例,我们用PCA方法将这两行数据降到一行。

    1)因为X矩阵的每行已经是零均值,所以不需要去平均值。

    2)求协方差矩阵:

    3)求协方差矩阵的特征值与特征向量。

    求解后的特征值为:

    对应的特征向量为:


    其中对应的特征向量分别是一个通解,可以取任意实数。那么标准化后的特征向量为:


    4)矩阵P为:


    5)最后我们用P的第一行乘以数据矩阵X,就得到了降维后的表示:


    结果如图1所示:


                                                                                        图1:数据矩阵X降维投影结果

    注意:如果我们通过特征值分解协方差矩阵,那么我们只能得到一个方向的PCA降维。这个方向就是对数据矩阵X从行(或列)方向上压缩降维。

    (2) 基于SVD分解协方差矩阵实现PCA算法

    输入:数据集,需要降到k维。

    1) 去平均值,即每一位特征减去各自的平均值。

    2) 计算协方差矩阵。

    3) 通过SVD计算协方差矩阵的特征值与特征向量。

    4) 对特征值从大到小排序,选择其中最大的k个。然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。

    5) 将数据转换到k个特征向量构建的新空间中。

    在PCA降维中,我们需要找到样本协方差矩阵的最大k个特征向量,然后用这最大的k个特征向量组成的矩阵来做低维投影降维。可以看出,在这个过程中需要先求出协方差矩阵,当样本数多、样本特征数也多的时候,这个计算还是很大的。当我们用到SVD分解协方差矩阵的时候,SVD有两个好处:

    1) 有一些SVD的实现算法可以先不求出协方差矩阵也能求出我们的右奇异矩阵V。也就是说,我们的PCA算法可以不用做特征分解而是通过SVD来完成,这个方法在样本量很大的时候很有效。实际上,scikit-learn的PCA算法的背后真正的实现就是用的SVD,而不是特征值分解。

    2)注意到PCA仅仅使用了我们SVD的左奇异矩阵,没有使用到右奇异值矩阵,那么右奇异值矩阵有什么用呢?

    假设我们的样本是m*n的矩阵X,如果我们通过SVD找到了矩阵最大的k个特征向量组成的k*n的矩阵 ,则我们可以做如下处理:


    可以得到一个m*k的矩阵X',这个矩阵和我们原来m*n的矩阵X相比,列数从n减到了k,可见对列数进行了压缩。也就是说,左奇异矩阵可以用于对行数的压缩;右奇异矩阵可以用于对列(即特征维度)的压缩。这就是我们用SVD分解协方差矩阵实现PCA可以得到两个方向的PCA降维(即行和列两个方向)。

    4. PCA实例

    (1)PCA的Python实现:

    
        
    1. ##Python实现PCA
    2. import numpy as np
    3. def pca(X,k): #k is the components you want
    4. #mean of each feature
    5. n_samples, n_features = X.shape
    6. mean=np.array([np.mean(X[:,i]) for i in range(n_features)])
    7. #normalization
    8. norm_X=X-mean
    9. #scatter matrix
    10. scatter_matrix=np.dot(np.transpose(norm_X),norm_X)
    11. #Calculate the eigenvectors and eigenvalues
    12. eig_val, eig_vec = np.linalg.eig(scatter_matrix)
    13. eig_pairs = [(np.abs(eig_val[i]), eig_vec[:,i]) for i in range(n_features)]
    14. # sort eig_vec based on eig_val from highest to lowest
    15. eig_pairs.sort(reverse= True)
    16. # select the top k eig_vec
    17. feature=np.array([ele[ 1] for ele in eig_pairs[:k]])
    18. #get new data
    19. data=np.dot(norm_X,np.transpose(feature))
    20. return data
    21. X = np.array([[ -1, 1], [ -2, -1], [ -3, -2], [ 1, 1], [ 2, 1], [ 3, 2]])
    22. print(pca(X, 1))

    上面代码实现了对数据X进行特征的降维。结果如下:

    (2)用sklearn的PCA与我们的PCA做个比较:

    
       
    1. ##用sklearn的PCA
    2. from sklearn.decomposition import PCA
    3. import numpy as np
    4. X = np.array([[ -1, 1], [ -2, -1], [ -3, -2], [ 1, 1], [ 2, 1], [ 3, 2]])
    5. pca=PCA(n_components= 1)pca.fit(X)
    6. print(pca.transform(X))

    结果如下:

    搞了半天结果不是很一样啊!分析一下吧!

    sklearn中的PCA是通过svd_flip函数实现的,sklearn对奇异值分解结果进行了一个处理,因为ui*σi*vi=(-ui)*σi*(-vi),也就是u和v同时取反得到的结果是一样的,而这会导致通过PCA降维得到不一样的结果(虽然都是正确的)。具体了解可以看参考文章9或者自己分析一下sklearn中关于PCA的源码。

    5. PCA的理论推导

    PCA有两种通俗易懂的解释:(1)最大方差理论;(2)最小化降维造成的损失。这两个思路都能推导出同样的结果。

    我在这里只介绍最大方差理论:

    在信号处理中认为信号具有较大的方差,噪声有较小的方差,信噪比就是信号与噪声的方差比,越大越好。样本在u1上的投影方差较大,在u2上的投影方差较小,那么可认为u2上的投影是由噪声引起的。

    因此我们认为,最好的k维特征是将n维样本点转换为k维后,每一维上的样本方差都很大。

    比如我们将下图中的5个点投影到某一维上,这里用一条过原点的直线表示(数据已经中心化):

    假设我们选择两条不同的直线做投影,那么左右两条中哪个好呢?根据我们之前的方差最大化理论,左边的好,因为投影后的样本点之间方差最大(也可以说是投影的绝对值之和最大)。

    计算投影的方法见下图:


    图中,红色点表示样例,蓝色点表示在u上的投影,u是直线的斜率也是直线的方向向量,而且是单位向量。蓝色点是在u上的投影点,离原点的距离是<x,u>(即或者)。

    6. 选择降维后的维度K(主成分的个数)

    如何选择主成分个数K呢?先来定义两个概念:


    选择不同的K值,然后用下面的式子不断计算,选取能够满足下列式子条件的最小K值即可。

    其中t值可以由自己定,比如t值取0.01,则代表了该PCA算法保留了99%的主要信息。当你觉得误差需要更小,你可以把t值设置的更小。上式还可以用SVD分解时产生的S矩阵来表示,如下面的式子:


    Reference:

    (1) 主成分分析(PCA)原理详解

    http://blog.csdn.net/zhongkelee/article/details/44064401

    (2) 机器学习之PCA主成分分析 - steed灬 - 博客园

    https://www.cnblogs.com/steed/p/7454329.html

    (3) 简单易学的机器学习算法——主成分分析(PCA)

    https://blog.csdn.net/google19890102/article/details/27969459

    (4) 机器学习实战之PCA - 笨鸟多学 - 博客园

    https://www.cnblogs.com/zy230530/p/7074215.html

    (5) 机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用 - LeftNotEasy - 博客园

    http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html

    (6) 从PCA和SVD的关系拾遗

    https://blog.csdn.net/Dark_Scope/article/details/53150883

    (7) CodingLabs - PCA的数学原理

    http://blog.codinglabs.org/articles/pca-tutorial.html

    (8) PCA(主成分分析)python实现

    https://www.jianshu.com/p/4528aaa6dc48

    (9) 主成分分析PCA(Principal Component Analysis)在sklearn中的应用及部分源码分析

    https://www.cnblogs.com/lochan/p/7001907.html

    展开全文
  • 方程(15)就是所谓协方差矩阵特征值分解,并可以使用奇异值分解算法来获得。而特征向量表示数据最大方差的方向,特征值表示那些方向方差的幅度。换言之,V表示旋转矩阵,而 表示一个缩放矩阵。协方差矩阵可以进一步...
  • 感谢原文作者,博客写的非常好,我这里将我需要的部分提取出来记录一下。 多变量的大数据集可以为研究提供丰富...降维的算法有很多,比如奇异值分解(SVD)、主成分分析(PCA)、因子分析(FA)、独立成分分析(ICA)。 ...
  • 我们对物体进行衡量时,往往其特征值之间是correlated的,比如我们测量飞行员时,有两个指标一个是飞行技术(x1),另一个是对飞行的喜好程度(x2),这两者之间是有关联的,即correlated的。我们进行PCA(主成分分析...
  • 协方差,协方差矩阵矩阵特征值

    千次阅读 2019-07-25 16:00:39
    一、统计学的基本概念 ...统计学里最基本的概念就是...奇异值分解 就能求出所有特征值和Q矩阵。 A*Q=Q*D, D是由特征值组成的对角矩阵. 由特征值和特征向量的定义知,Q的列向量就是A的特征向量。
  •   在学习PCA降维处理的时候,我发现里面使用到了协方差矩阵以及求解方阵的特征值和特征向量,我想知道协方差矩阵的求解过程,以及验算方阵的特征值和特征向量,因此就使用到了下面的方法。 2、代码 import numpy ...
  • pcl 库依赖 Eigen 第三方库,但是实践表明,Eigen 库的 Eigen::SelfAdjointEigenSolver 求的特征值和特征向量精度并不是很高,所以要换一种方法来求 主要用到了 pcl::eigen33 // pcl #include <pcl/point_types....
  • 复习笔记的上篇在这里:辰晞:矩阵分析-期末复习笔记(上)​zhuanlan.zhihu.com目录:特征值,特征向量,相似 (Eigenvalues, eigenvectors, similarity)酉相似 & 酉等价 & 正规矩阵 (Unitary similarity &...
  • 通俗易懂理解协方差 协方差,可以通俗易懂理解为:两个变量在...公式简单翻译一下是:如果有x,Y两个变量,每个时刻的"X与其均值之差"剩以Y与其均值之差"得到一个乘积,再对这每时刻的乘积求和并求出均值(其实是求"期望
  • 特征值与特征向量&协方差矩阵

    千次阅读 2020-12-25 09:18:55
    一、特征值与特征向量 教程观摩:b站视频 1、定义: 从数学上看,如果向量v与变换A满足Av=λv,则称向量v是变换A的一个特征向量,λ是相应的特征值。这一等式被称作“特征值方程”。 意思:一个矩阵,左乘一个向量...
  • 从图中可以看出,坐标点平铺于二维平面(而不是在一条直线上),所以不用担心协方差矩阵不可逆的问题。 首先用矩阵的方法表示这些点 其中,统计向量还是按列向量表示,其上标表示序列标号而不是数值乘方运算。 ...
  • 协方差矩阵的特征向量总是指向数据方差最大的方向,准确来说,特征值最大的特征向量是数据方差最大的方向,第二大特征值对应的特征向量指向与第一个特征向量正交的方向上方差最大的方向,以此类推。 参考链
  • 特征分解协方差矩阵:详细剖析和实现PCA算法本文先简要明了地介绍了特征向量和其与矩阵的关系,然后再以其为基础解释协方差矩阵和主成分分析法的基本概念,最后我们结合协方差矩阵和主成分分析法实现数据降维。...
  • 本文介绍了什么是点云的标准化(normalized)协方差矩阵以及如何计算点云的标准化协方差矩阵
  • Obvious,最小特征值对应的特征向量为平面的法向这个问题还有个关键是通过python求协方差矩阵特征值和特征向量,np.linalg.eig()方法直接返回了特征值的向量和特征向量的矩阵scipy.linalg.eigh()方法可以对返回的...
  • 一、统计学的基本概念 统计学里最基本的概念就是...奇异值分解 就能求出所有特征值和Q矩阵。 A*Q=Q*D, D是由特征值组成的对角矩阵. 由特征值和特征向量的定义知,Q的列向量就是A的特征向量。
  • 再谈协方差矩阵之主成分分析

    千次阅读 2016-06-19 16:30:21
    上次那篇文章在理论层次介绍了下协方差矩阵,没准很多人觉得这东西用处不大,其实协方差矩阵在好多学科里都有很重要的作用,比如多维的正态分布,再比如今天我们今天的主角——主成分分析(Principal Compon
  • 协方差矩阵特征向量的意义

    千次阅读 2015-05-12 08:11:00
    这是 Quora上的一篇文章:... 协方差矩阵最大特征值对应的特征向量的方向,就是数据变化最大的方向。其他特征向量依次正交。 转载于:https://www.cnblogs.com/573177885qq/p/44963...
  • 摘要:机器之心编译参与:蒋思源本文先简要明了地介绍了特征向量和其与矩阵的关系,然后再以其为基础解释协方差矩阵和主成分分析法的基本概念,最后我们结合协方差矩阵和主成分分析法实现数据降维。
  • 均值:描述的是样本集合的中间点。 方差:描述的是样本集合的各个样本点到均值的距离之平均,一般是用来描述一维数据的。...协方差: 是一种用来度量两个随机变量关系的统计量。只能处理二维...
  • 协方差矩阵相关概念、性质、应用意义及矩阵特征向量的用处
  • 其大致的原理是通过对数据协方差矩阵进行特征分解找到使数据各维度方差最大的主成分,并将原数据投影到各主成分上达到去相关的目的,若在投影到各主成分时,仅选取特征值最大的前若干个主成分,则可同时实现去冗余的...
  • 主成分分析是通过一组变量的线性组合来解释这组变量的协方差矩阵里面的变异性信息的。以此来达到数据的压缩和根据原变量前前系数大小对数据进行解释。 在多元统计分析的学习中,我们通常用主成分分析进行自变量多重...
  • 协方差矩阵6. 参考资料 1. 均值: 均值描述的是样本集合的中间点,它告诉我们的信息是有限的, 2. 标准差: 标准差给我们描述的是样本集合的各个样本点到均值的距离之平均。 以这两个集合为例,[0, 8, 12, 20]和[8...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,137
精华内容 4,054
关键字:

协方差矩阵特征值分解