精华内容
下载资源
问答
  • 基于FPGA的自适应阵列协方差矩阵特征分解的实现.pdf
  • 摘自《阵列信号处理及MATLAB实现》(第二版)张小飞 李建峰 徐大专 等 著

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

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

    展开全文
  • 行业分类-设备装置-一种基于协方差矩阵特征分解的抗干扰算法的FPGA实现方法及实现装置.zip
  • 特征分解协方差矩阵:详细剖析和实现PCA算法本文先简要明了地介绍了特征向量和其与矩阵的关系,然后再以其为基础解释协方差矩阵和主成分分析法的基本概念,最后我们结合协方差矩阵和主成分分析法实现数据降维。...

    从特征分解到协方差矩阵:详细剖析和实现PCA算法

    本文先简要明了地介绍了特征向量和其与矩阵的关系,然后再以其为基础解释协方差矩阵和主成分分析法的基本概念,最后我们结合协方差矩阵和主成分分析法实现数据降维。本文不仅仅是从理论上阐述各种重要概念,同时最后还一步步使用 Python 实现数据降维。

    首先本文的特征向量是数学概念上的特征向量,并不是指由输入特征值所组成的向量。数学上,线性变换的特征向量是一个非简并的向量,其方向在该变换下不变。该向量在此变换下缩放的比例称为特征值。一个线性变换通常可以由其特征值和特征向量完全描述。如果我们将矩阵看作物理运动,那么最重要的就是运动方向(特征向量)和速度(特征值)。因为物理运动只需要方向和速度就可以描述,同理矩阵也可以仅使用特征向量和特征值描述。

    其实在线性代数中,矩阵就是一个由各种标量或变量构成的表格,它和 Excel 表格并没有什么本质上的区别。只不过数学上定义了一些矩阵间的运算,矩阵运算的法则和实际内部的值并没有什么关系,只不过定义了在运算时哪些位置需要进行哪些操作。因为矩阵相当于定义了一系列运算法则的表格,那么其实它就相当于一个变换,这个变换(物理运动)可以由特征向量(方向)和特征值(速度)完全描述出来。

    线性变换  

    在解释线性变换前,我们需要先了解矩阵运算到底是什么。因为我们可以对矩阵中的值统一进行如加法或乘法等运算,所以矩阵是十分高效和有用的。如下所示,如果我们将向量 v 左乘矩阵 A,我们就会得到新的向量 b,也即可以表述说矩阵 A 对输入向量 v 执行了一次线性变换,且线性变换结果为 b。因此矩阵运算 Av = b 就代表向量 v 通过一个变换(矩阵 A)得到向量 b。下面的实例展示了矩阵乘法(该类型的乘法称之为点积)是怎样进行的:


    所以矩阵 A 将向量 v 变换为向量 b。下图展示了矩阵 A 如何将更短更低的向量 v 映射到更长更高的向量 b:


    我们可以馈送其他正向量到矩阵 A 中,每一个馈送的向量都会投影到新的空间中且向右边变得更高更长。

    假定所有的输入向量 V 可以排列为一个标准表格,即:


    而矩阵可以将所有的输入向量 V 投影为如下所示的新空间,也即所有输出向量组成的 B:


    下图可以看到输入向量空间和输出向量空间的关系,


    如果假设矩阵就是一阵风,它通过有形的力量得出可见的结果。而这一阵风所吹向的方向就是特征向量,因此特征向量就表明矩阵所要变换的方向。


    如上图所示,特征向量并不会改变方向,它已经指向了矩阵想要将所有输入向量都推向的方向。因此,特征向量的数学定义为:存在非零矩阵 A 和标量λ,若有向量 x 且满足以下关系式,那么 x 就为特征向量、λ为特征值。


    特征向量同样是线性变换的不变轴,所有输入向量沿着这条轴压缩或延伸。线性变换中的线性正是表明了这种沿直线轴进行变换的特性,一般来说几阶方阵就有几个特征向量,如 3*3 矩阵有 3 个特征向量,n 阶方阵有 n 个特征向量,每一个特征向量表征一个维度上的线性变换方向。

    因为特征向量提取出了矩阵变换的主要信息,因此它在矩阵分解中十分重要,即沿着特征向量对角化矩阵。因为这些特征向量表征着矩阵的重要特性,所以它们可以执行与深度神经网络中自编码器相类似的任务。引用 Yoshua Bengio 的话来说:

    许多数学对象可以通过分解为更基础的组成部分而有更好的理解,因为我们会发现它们的一些广泛性属性,而不是我们选择表征它们的特性。例如整数可以分解为质因数,虽然我们表征整数的方式会因为采用二进制还是十进制而改变,但整数总可以由几个质因数表示(如 12=2 × 2 × 3),因此这种分解的性质正好是我们所需要的稳定性质。

    我们可以分解一个整数为质因数而得到其自然属性,同样我们也可以分解矩阵以得到它的功能性属性,并且这种属性信息在矩阵表示为多组元素的阵列下是不明显的。矩阵分解最常见的是特征分解(eigen-decomposition),即我们将矩阵分解为一系列的特征向量和特征值。

    主成分分析(PCA)

    PCA 是一种寻找高维数据(图像等)模式的工具。机器学习实践上经常使用 PCA 对输入神经网络的数据进行预处理。通过聚集、旋转和缩放数据,PCA 算法可以去除一些低方差的维度而达到降维的效果,这样操作能提升神经网络的收敛速度和整体效果。

    为了进一步了解 PCA 算法,我们还需要定义一些基本的统计学概念,即均值、标准差、方差和协方差。

    样本均值可简单的表示为所有样本 X 的平均值,如下所示样本均值表示为:


    样本标准差即样本方差的平方根。即每一样本点到样本均值之间的平均距离。n 个样本的方差却只除以 n-1 是因为样本只是真实分布的估计量,样本方差也只是真实方差的估计量。在大学课本概率论和数理统计中有证明,如果除以 n(2 阶中心矩),那么样本方差是真实方差的一致性估计,但并不是无偏估计,也就是样本方差存在系统偏差。因此我们需要对 2 阶中心矩进行调整以消除系统偏差。如下所示,样本的标准差 s 和方差 var(X) 都是无偏估计:



    因为样本标准差和方差都是先求距离的平方再求平方根,因此距离一定是正数且不会抵消。假设我们有如下数据点(散点图):


    PCA 如线性回归那样会尝试构建一条可解释性的直线贯穿所有数据点。每一条直线表示一个「主成分」或表示自变量和因变量间的关系。数据的维度数就是主成分的数量,也即每一个数据点的特征维度。PCA 的作用就是分析这些特征,并选出最重要的特征。PCA 本质上是将方差最大的方向作为主要特征,并且在各个正交方向上将数据「去相关」,也就是让它们在不同正交方向上没有相关性。通常我们认为信息具有较大的方差,而噪声有较小的方差,信噪比就是信号与噪声的方差比,所以我们希望投影后的数据方差越大越好。因此我们认为,最好的 k 维特征是将 n 维样本点转换为 k 维后,每一维上的样本方差都很大。

    如下图所示,第一个主成分以直线(红色)的形式将散点图分为两边,并且它是保留了最大方差的。因为投影到这条直线(红色)上数据点离均值(空心点)有最大的方差,即所有蓝点到灰色线的平均距离为最大方差,所以这一个主成分将保留最多的信息。



    如上所示,假设第二个主成分为垂直于红线(第一个主成分)的灰色线。当数据点投影到第二个主成分上时,它们离样本均值(空心点)的方差却非常小,即数据点到红色线的平均距离。所以红色线是最优的主成分。

    协方差矩阵

    前面我们已经了解矩阵其实就是一种将某个向量变换为另一个的方法,另外我们也可以将矩阵看作作用于所有数据并朝向某个方向的力。同时我们还知道了变量间的相关性可以由方差和协方差表达,并且我们希望保留最大方差以实现最优的降维。因此我们希望能将方差和协方差统一表示,并且两者均可以表示为内积的形式,而内积又与矩阵乘法密切相关。因此我们可以采用矩阵乘法的形式表示。若输入矩阵 X 有两个特征 a 和 b,且共有 m 个样本,那么有:


    如果我们用 X 左乘 X 的转置,那么就可以得出协方差矩阵:


    这个矩阵对角线上的两个元素分别是两特征的方差,而其它元素是 a 和 b 的协方差。两者被统一到了一个矩阵的,因此我们可以利用协方差矩阵描述数据点之间的方差和协方差,即经验性地描述我们观察到的数据。

    寻找协方差矩阵的特征向量和特征值就等价于拟合一条能保留最大方差的直线或主成分。因为特征向量追踪到了主成分的方向,而最大方差和协方差的轴线表明了数据最容易改变的方向。根据上述推导,我们发现达到优化目标就等价于将协方差矩阵对角化:即除对角线外的其它元素化为 0,并且在对角线上将特征值按大小从上到下排列。协方差矩阵作为实对称矩阵,其主要性质之一就是可以正交对角化,因此就一定可以分解为特征向量和特征值。


    当协方差矩阵分解为特征向量和特征值之后,特征向量表示着变换方向,而特征值表示着伸缩尺度。在本例中,特征值描述着数据间的协方差。我们可以按照特征值的大小降序排列特征向量,如此我们就按照重要性的次序得到了主成分排列。

    对于 2 阶方阵,一个协方差矩阵可能如下所示:


    在上面的协方差矩阵中,1.07 和 0.64 分别代表变量 x 和变量 y 的方差,而副对角线上的 0.63 代表着变量 x 和 y 之间的协方差。因为协方差矩阵为实对称矩阵(即 Aij=Aji),所以其必定可以通过正交化相似对角化。因为这两个变量的协方差为正值,所以这两个变量的分布成正相关性。如下图所示,如果协方差为负值,那么变量间就成负相关性。


    注意如果变量间的协方差为零,那么变量是没有相关性的,并且也没有线性关系。因此,如果两个变量的协方差越大,相关性越大,投影到主成分后的损失就越小。我们同时可以考虑协方差和方差的计算式而了解他们的关系:


    计算协方差的优处在于我们可以通过协方差的正值、负值或零值考察两个变量在高维空间中相互关系。总的来说,协方差矩阵定义了数据的形状,协方差决定了沿对角线对称分布的强度,而方差决定了沿 x 轴或 y 轴对称分布的趋势。

    基变换

    因为协方差矩阵的特征向量都是彼此正交的,所以变换就相当于将 x 轴和 y 轴两个基轴换为主成分一个基轴。也就是将数据集的坐标系重新变换为由主成分作为基轴的新空间,当然这些主成分都保留了最大的方差。

    我们上面所述的 x 轴和 y 轴称之为矩阵的基,即矩阵所有的值都是在这两个基上度量而来的。但矩阵的基是可以改变的,通常一组特征向量就可以组成该矩阵一组不同的基坐标,原矩阵的元素可以在这一组新的基中表达。


    在上图中,我们展示了相同向量 v 如何在不同的坐标系中有不同的表达。黑色实线代表 x-y 轴坐标系而红色虚线是另外一个坐标系。在第一个坐标系中 v = (1,1),而在第二个坐标系中 v = (1,0)。因此矩阵和向量可以在不同坐标系中等价变换。在数学上,n 维空间并没有唯一的描述,所以等价转换矩阵的基也许可以令问题更容易解决。

    最后我们简单地总结一下 PCA 算法的基本概念和步骤:

    首先我们得理解矩阵就相当于一个变换,变换的方向为特征向量,变换的尺度为特征值。PCA 的本质是将方差最大的方向作为主要特征,并且在各个正交方向上将数据「去相关」,即让它们在不同正交方向上没有相关性。所以我们希望将最相关的特征投影到一个主成分上而达到降维的效果,投影的标准是保留最大方差。而在实际操作中,我们希望计算特征之间的协方差矩阵,并通过对协方差矩阵的特征分解而得出特征向量和特征值。如果我们将特征值由大到小排列,相对应的特征向量所组成的矩阵就是我们所需降维后的数据。下面我们将一步步实现 PCA 算法。

    输入数据:

    import numpy as npx=np.array([2.5,0.5,2.2,1.9,3.1,2.3,2,1,1.5,1.1])y=np.array([2.4,0.7,2.9,2.2,3,2.7,1.6,1.1,1.6,0.9])

    归一化数据:

    mean_x=np.mean(x)mean_y=np.mean(y)scaled_x=x-mean_xscaled_y=y-mean_ydata=np.matrix([[scaled_x[i],scaled_y[i]] for i in range(len(scaled_x))])

    绘制散点图查看数据分布:

    import matplotlib.pyplot as pltplt.plot(scaled_x,scaled_y,'o')

    求协方差矩阵:

    cov=np.cov(scaled_x,scaled_y)

    求协方差矩阵的特征值和特征向量:

    eig_val, eig_vec = np.linalg.eig(cov)

    求出特征向量后,我们需要选择降维后的数据维度 k(n 维数据降为 k 维数据),但我们的数据只有两维,所以只能降一维:

    eig_pairs = [(np.abs(eig_val[i]), eig_vec[:,i]) for i in range(len(eig_val))]eig_pairs.sort(reverse=True)feature=eig_pairs[0][1]

    转化得到降维后的数据:

    new_data_reduced=np.transpose(np.dot(feature,np.transpose(data))

    原文链接:https://deeplearning4j.org/eigenvector#a-beginners-guide-to-eigenvectors-pca-covariance-and-entropy

    工程 PCA算法 工程 矩阵 数据 降维算法
    8
    展开全文
  • 同时,更直观的,我们把协方差矩阵可视化: 图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

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

    展开全文
  •   在学习PCA降维处理的时候,我发现里面使用到了协方差矩阵以及求解方阵的特征值和特征向量,我想知道协方差矩阵的求解过程,以及验算方阵的特征值和特征向量,因此就使用到了下面的方法。 2、代码 import numpy ...

    1、协方差矩阵

    1、问题描述
      在学习PCA降维处理的时候,我发现里面使用到了协方差矩阵以及求解方阵的特征值和特征向量,我想知道协方差矩阵的求解过程,以及验算方阵的特征值和特征向量,因此就使用到了下面的方法。
    2、代码

    import numpy as np
    
    data1 = np.array([10, 11, 8, 3, 2, 1])
    data2 = np.array([6, 4, 5, 3, 2.8, 1])
    
    # 包含两个维度的数据
    data = [data1, data2]
    # <class 'list'>
    print(type(data))
    # [array([10, 11,  8,  3,  2,  1]), array([6. , 4. , 5. , 3. , 2.8, 1. ])]
    print(data)
    # 协方差矩阵
    # [[18.96666667  6.48666667]
    #  [ 6.48666667  3.12666667]]
    print(np.cov(data))
    
    # 求出每一个数据的均值
    data1_mean = np.mean(data1)
    data2_mean = np.mean(data2)
    # 5.833333333333333
    print(data1_mean)
    3.6333333333333333
    print(data2_mean)
    
    # 使用常规方法计算cov11的协方差
    # 18.96666666666667
    cov_11 = (1 / (len(data1) - 1)) * np.dot((data1 - data1_mean), (data1 - data1_mean))
    print(cov_11)
    

    2、特征值和特征向量

    1、代码

    # 求解矩阵的特征值和特征向量
    data3 = np.diag((1, 2, 3, 4))
    result = np.linalg.eig(data3)
    print(result)
    
    # 结果
    (array([1., 2., 3., 4.]), 
     array([[1., 0., 0., 0.],
           [0., 1., 0., 0.],
           [0., 0., 1., 0.],
           [0., 0., 0., 1.]]))
    

    3、SVD分解

    1、描述
      函数原型如下:

    np.linalg.svd(a,full_matrices=1,compute_uv=1)
    

      a是一个(m,n)的矩阵;full_matrices默认为1,表示左奇异矩阵U形状为(m,m),右奇异矩阵VT的形状为(n,n),如果为0时,U形状为(m,k),VT的形状为(k,n),其中k = min(m,n);compute_uv默认为1,表示计算U,sigma,VT矩阵,反之,只计算sigma。
      下面对4*5矩阵A进行SVD分解,代码如下:

    2、代码

    import numpy as np
    
    # 4 * 5
    a = np.array([[1, 0, 0, 0, 2], [0, 0, 3, 0, 0],
                  [0, 0, 0, 0, 0], [0, 4, 0, 0, 0]])
    U, sigma, VT = np.linalg.svd(a)
    # [[ 0.  0.  1.  0.]
    #  [ 0.  1.  0.  0.]
    #  [ 0.  0.  0. -1.]
    #  [ 1.  0.  0.  0.]]
    print(U)
    # (4,)
    # [4.         3.         2.23606798 0.        ]
    print(sigma)
    # 5 * 5
    # [[-0.          1.          0.          0.          0.        ]
    #  [-0.          0.          1.          0.          0.        ]
    #  [ 0.4472136   0.          0.          0.          0.89442719]
    #  [ 0.          0.          0.          1.          0.        ]
    #  [-0.89442719  0.          0.          0.          0.4472136 ]]
    print(VT)
    
    展开全文
  • 协方差,协方差矩阵,矩阵特征

    千次阅读 2019-07-25 16:00:39
    这个定义还是很容易理解的,我们可以举一个三维的例子,假设数据集有三个维度,则协方差矩阵为: 可见,协方差矩阵是一个对称的矩阵,而且对角线是各个维度的方差。 尽管协方差矩阵很简单,可它却是很多...
  • 方程(15)就是所谓协方差矩阵特征分解,并可以使用奇异值分解算法来获得。而特征向量表示数据最大方差的方向,特征值表示那些方向方差的幅度。换言之,V表示旋转矩阵,而 表示一个缩放矩阵。协方差矩阵可以进一步...
  • 实践中常通过对 X​X​X​ 进行奇异值分解来替代协方差矩阵特征分解。 下面解释这句话的意思。 首先我们复习一下,将任意形状的矩阵 XXX 如何进行 SVD 分解,其基本思路是构造对称矩阵。 XTX=(VΣTUT)(UΣVT)=V...
  • 感谢原文作者,博客写的非常好,我这里将我需要的部分提取出来记录一下。 多变量的大数据集可以为研究提供丰富...降维的算法有很多,比如奇异值分解(SVD)、主成分分析(PCA)、因子分析(FA)、独立成分分析(ICA)。 ...
  • 摘要:机器之心编译参与:蒋思源本文先简要明了地介绍了特征向量和其与矩阵的关系,然后再以其为基础解释协方差矩阵和主成分分析法的基本概念,最后我们结合协方差矩阵和主成分分析法实现数据降维。
  • 通俗易懂理解协方差 协方差,可以通俗易懂理解为:两个变量在变化过程中是同方向变化?还是反方向变化?同向或反向程度如何? 你变大,同时我也变大,说明两个变量是同向变化的,这时协方差就是正的。 你变大,同时我变...
  • 复习笔记的上篇在这里:辰晞:矩阵分析-期末复习笔记(上)​zhuanlan.zhihu.com目录:特征值,特征向量,相似 (Eigenvalues, eigenvectors, similarity)酉相似 & 酉等价 & 正规矩阵 (Unitary similarity &...
  • 特征值与特征向量&协方差矩阵

    千次阅读 2020-12-25 09:18:55
    一、特征值与特征向量 教程观摩:b站视频 1、定义: ...观摩视频:协方差矩阵 1、针对一维样本求的协方差就是方差,方差是协方差的一种特殊情况,意义与方差相同,都是反映集合中各个元素的离散程度 2、针
  •  A的SVD分解出来的V就是(A'*A)这个矩阵特征向量!  所以PCA算法中我们不需要计算扩散矩阵(A'*A),对A进行SVD分解,  得到V,取V的前k个columns即可。 1) Alcohol 2) Malic acid 3) Ash 4)...
  • 从图中可以看出,坐标点平铺于二维平面(而不是在一条直线上),所以不用担心协方差矩阵不可逆的问题。 首先用矩阵的方法表示这些点 其中,统计向量还是按列向量表示,其上标表示序列标号而不是数值乘方运算。 ...
  • ,所以PCA算法有两种实现方法:基于特征分解协方差矩阵实现PCA算法、基于SVD分解协方差矩阵实现PCA算法。 既然提到协方差矩阵,那么就简单介绍一下方差和协方差的关系。然后概括介绍一下特征分解矩阵原理、奇异...
  • 坑 好像都是正交的, 所以PCA降维属于正交分解。 如果采用非正交的基,就是ICA降维了。
  • UKF-协方差矩阵分解

    2021-06-27 10:09:03
    UKF-协方差矩阵分解 在SUT变化中,需要对协方差矩阵进行分解。而matlab自带的chol函数只能分解正定矩阵。为保证求解不被中断,并能提示协方差矩阵的正定、半正定以及负定情况,对常规的Cholesky简单修改。 一、...
  • 协方差矩阵特征向量总是指向数据方差最大的方向,准确来说,特征值最大的特征向量是数据方差最大的方向,第二大特征值对应的特征向量指向与第一个特征向量正交的方向上方差最大的方向,以此类推。 参考链
  • 协方差矩阵特征向量的意义

    千次阅读 2015-05-12 08:11:00
    这是 Quora上的一篇文章:... 协方差矩阵最大特征值对应的特征向量的方向,就是数据变化最大的方向。其他特征向量依次正交。 转载于:https://www.cnblogs.com/573177885qq/p/44963...
  • 协方差矩阵相关概念、性质、应用意义及矩阵特征向量的用处
  • 协方差矩阵6. 参考资料 1. 均值: 均值描述的是样本集合的中间点,它告诉我们的信息是有限的, 2. 标准差: 标准差给我们描述的是样本集合的各个样本点到均值的距离之平均。 以这两个集合为例,[0, 8, 12, 20]和[8...
  • 针对直扩信号伪随机序列(PN码)的估计问题,在基于协方差矩阵特征分解算法的基础上,利用最大范数准则加以改进,提出了基于最大范数准则与矩阵特征分解的伪码序列估计方法,并对其进行了理论分析和实验仿真。...
  • pcl 库依赖 Eigen 第三方库,但是实践表明,Eigen 库的 Eigen::SelfAdjointEigenSolver 求的特征值和特征向量精度并不是很高,所以要换一种方法来求 主要用到了 pcl::eigen33 // pcl #include <pcl/point_types....
  • 这个定义还是很容易理解的,我们可以举一个三维的例子,假设数据集有三个维度,则协方差矩阵为: 可见,协方差矩阵是一个对称的矩阵,而且对角线是各个维度的方差。 尽管协方差...
  • 其大致的原理是通过对数据协方差矩阵进行特征分解找到使数据各维度方差最大的主成分,并将原数据投影到各主成分上达到去相关的目的,若在投影到各主成分时,仅选取特征值最大的前若干个主成分,则可同时实现去冗余的...
  • 基于多视协方差矩阵发展了一种综合选择性去取向和广义体散射的极化SAR四分量分解模型。首先引入交叉极化相关系数进行螺旋体散射抑制和非反射对称地物去取向;然后采用一种随HH和VV功率比值自适应变化的广义体散射...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,925
精华内容 4,770
关键字:

协方差矩阵特征分解