精华内容
下载资源
问答
  • 原标题:协方差矩阵、相关系数矩阵的EXCEL和python实现 CPDA广州19期学员现任职务:数据分析师史金乐优秀学员原创文章 要计算相关系数矩阵,那就不得不提协方差矩阵。在《概率论与数据统计》中协方差矩阵的定义具体...

    原标题:协方差矩阵、相关系数矩阵的EXCEL和python实现

    04fe8c3cc46a489aabc87e370a840770.jpeg

    17ab4e4ec63d4c848d13918e9a010c0f.jpeg

    CPDA广州19期学员

    现任职务:数据分析师

    史金乐

    优秀学员原创文章

    4b3ebe71689442179e2cf62e44f503d1.gif

    要计算相关系数矩阵,那就不得不提协方差矩阵。在《概率论与数据统计》中协方差矩阵的定义具体如下:

    11e37fe46fe04f7299844f58dd006ac1.png

    按照协方差矩阵中各元素cij的计算过程,我们可以得知要依次计算E(Xi),X - E(Xi),cij。

    在得到协方差矩阵之后,可以根据相关系数公式:(其中D(X)为矩阵X的方差)

    9b479da4ef0e45d38965b475bc35b050.png

    可以得出相关系数矩阵,具体如下:

    198f482cfcb1460a8f00d5961807a351.jpeg

    所以综上所述,要求相关系数矩阵,那么首先要求得协方差矩阵。接下来,就用Excel和python来分别求得协方差矩阵和相关系数矩阵。

    Excel

    原始数据如下:(取10组数据,X1、X2、X3为数据的特征)

    57ffdf575ee347bbb0c730c6ecaa0898.png

    接下来,打开Excel中的“数据”-“数据分析”(“数据分析”是Excel的加载项,添加方式是“文件”-“选项”-“加载项”-“Excel加载项”-转到-“分析工具库”-确定),然后选择协方差。

    433bd63d97ac4961a3e79d0873ece03d.jpeg

    输入区域选择X1-X3的区域,分组方式选择“逐列”,将“标志位于第一行”前面的钩子点上,输入区域选择本工作表的G1单元格,然后点击确定。

    a09af7a972ab4a0887f066da0cf51304.jpeg

    然后即可得出协方差矩阵。具体如下:

    3625676a216347399749356b681997f5.png

    在选择数据分析时,选择“相关系数”,然后同样的操作流程,即可得到相关系数矩阵。具体如下:

    bf5e8dfe924642ea99bfd0e993186bfc.png

    Excel中的实现比较简单,接下来就用python来计算相关系数矩阵和协方差矩阵。

    python

    首先整理下思路:

    1、加载数据;

    2、读取数据到Dataframe中;

    3、整理需要计算的数据到新的Dataframe中,准备应用于下一步计算;

    4、用Dataframe的cov方法来求协方差矩阵,用corr方法来求相关系数矩阵。

    编写代码,并运行后得到如下结果:

    bed4d072a4684fc0ac554317158bee9f.png

    细心的同学可以发现,协方差矩阵(上面的矩阵)得出的结果是和Excel里面计算的结果有所不同。原因是因为Dataframe中求协方差矩阵时候是进行了标准化处理,具体可查阅方法的文档说明:

    ad8613e9321043038acd5895a243ffbb.png

    那如何可以得到和Excel里面计算的结果一样呢?

    那就要把这10组数据当作是样本总体,使用numpy.cov(bias=True)方法来求即可。整体代码如下:

    ab5c8c42c9964af2b2bb0a6e043e536c.jpeg

    整体运行得到的结果如下:

    6e809f727dc8449dbd3f9f36bb2ff783.png

    其实不管是Excel还是python,求协方差矩阵和相关系数矩阵都很简单,但是要理解二者的计算过程,自己手动计算一遍求解过程还是很有必要的,下面是我自己在Excel里面的计算过程,贴出来供给大家参考。

    fe3e6af7a23e446e9e3cd132f362098b.jpeg

    总体上来讲,协方差矩阵和相关系数矩阵是数据分析中的基础知识点,计算过程和实现方法都是比较简单的。打好基础才能更深入的学习后续知识~

    福利到 CPDA全国线上沙龙活动

    将于5月15日晚7点如期举办!

    扫码进群即可免费参加

    责任编辑:

    展开全文
  • y)) [[ 11.71 -4.286 ] [ -4.286 2.14413333]] >>> print(np.cov(x)) 11.71 总结 理解协方差矩阵的关键就在于牢记它的计算是不同维度之间的协方差,而不是不同样本之间。拿到一个样本矩阵,最先要明确的就是一行是...

    Estimate a covariance matrix, given data and weights.

    Covariance indicates the level to which two variables vary together. If we examine N-dimensional samples,

    b3ab85e218058b4c30da2e0a11924c92136f0aa6.svg, then the covariance matrix element

    4ed77223efc2c4d9753baa716e137897ded9d6a6.svg is the covariance of

    7720e563212e11bf72de255ab82c2a3b97c1a7f5.svg and

    bdb2d04d69b82c2288f5ef46664d548355e130af.svg. The element

    559d3e41d69c86f7dcb2ad7d0adbdb43d00ad259.svg is the variance of

    7720e563212e11bf72de255ab82c2a3b97c1a7f5.svg.

    See the notes for an outline of the algorithm.

    Parameters:

    m : array_like

    A 1-D or 2-D array containing multiple variables and observations. Each row (行) of m represents a variable(变量), and each column(列) a single observation of all those variables(样本). Also see rowvar below.

    y : array_like, optional

    An additional set of variables and observations. y has the same form as that of m.

    rowvar : bool, optional

    If rowvar is True (default), then each row represents a variable, with observations in the columns. Otherwise, the relationship is transposed: each column represents a variable, while the rows contain observations.

    bias : bool, optional

    Default normalization (False) is by (N - 1), where N is the number of observations given (unbiased estimate). If bias is True, then normalization is by N. These values can be overridden by using the keyword ddof in numpy versions >= 1.5.

    ddof : int, optional

    If not None the default value implied by bias is overridden. Note that ddof=1 will return the unbiased estimate, even if both fweights and aweights are specified, and ddof=0 will return the simple average. See the notes for the details. The default value is None.

    New in version 1.5.

    fweights : array_like, int, optional

    1-D array of integer freguency weights; the number of times each observation vector should be repeated.

    New in version 1.10.

    aweights : array_like, optional

    1-D array of observation vector weights. These relative weights are typically large for observations considered “important” and smaller for observations considered less “important”. If ddof=0 the array of weights can be used to assign probabilities to observation vectors.

    New in version 1.10.

    Returns:

    out : ndarray

    The covariance matrix of the variables.

    See also

    Normalized covariance matrix

    Notes

    Assume that the observations are in the columns of the observation array m and let f = fweights and a = aweights for brevity. The steps to compute the weighted covariance are as follows:

    >>> w = f * a

    >>> v1 = np.sum(w)

    >>> v2 = np.sum(w * a)

    >>> m -= np.sum(m * w, axis=1, keepdims=True) / v1

    >>> cov = np.dot(m * w, m.T) * v1 / (v1**2 - ddof * v2)

    Note that when a == 1, the normalization factor v1 / (v1**2 - ddof * v2) goes over to 1 / (np.sum(f) - ddof) as it should.

    Examples

    Consider two variables,

    307e583980f527b3f26e1e159435e0a8d262736b.svg and

    fdf6501bec5987984965f15d09235c645fe06ccb.svg, which correlate perfectly, but in opposite directions:

    >>> x = np.array([[0, 2], [1, 1], [2, 0]]).T

    >>> x

    array([[0, 1, 2],

    [2, 1, 0]])

    Note how

    307e583980f527b3f26e1e159435e0a8d262736b.svg increases while

    fdf6501bec5987984965f15d09235c645fe06ccb.svg decreases. The covariance matrix shows this clearly:

    >>> np.cov(x)

    array([[ 1., -1.],

    [-1., 1.]])

    Note that element

    495bbd585c230cf7bec09029cf05dfe3af27a9b4.svg, which shows the correlation between

    307e583980f527b3f26e1e159435e0a8d262736b.svg and

    fdf6501bec5987984965f15d09235c645fe06ccb.svg, is negative.

    Further, note how x and y are combined:

    >>> x = [-2.1, -1, 4.3]

    >>> y = [3, 1.1, 0.12]

    >>> X = np.stack((x, y), axis=0)

    >>> print(np.cov(X))

    [[ 11.71 -4.286 ]

    [ -4.286 2.14413333]]

    >>> print(np.cov(x, y))

    [[ 11.71 -4.286 ]

    [ -4.286 2.14413333]]

    >>> print(np.cov(x))

    11.71

    总结

    理解协方差矩阵的关键就在于牢记它的计算是不同维度之间的协方差,而不是不同样本之间。拿到一个样本矩阵,最先要明确的就是一行是一个样本还是一个维度,心中明确整个计算过程就会顺流而下,这么一来就不会迷茫了。

    展开全文
  • 这是今天用到的所有代码:>>> import numpy>>> s=[100,120,140]>>> t=[50,60,70]>>> y=s+t>>> y[100, 120, 140, 50, 60, 70]>>> y=[s,t]>>> y[[100, 120, 140], [50, 60, 70]]>>> a=numpy.cov(y)>>> aarray([[ 400.,...

    这是今天用到的所有代码:

    >>> import numpy

    >>> s=[100,120,140]

    >>> t=[50,60,70]

    >>> y=s+t

    >>> y

    [100, 120, 140, 50, 60, 70]

    >>> y=[s,t]

    >>> y

    [[100, 120, 140], [50, 60, 70]]

    >>> a=numpy.cov(y)

    >>> a

    array([[ 400., 200.],

    [ 200., 100.]])

    >>>

    >>> x=[1,0,1]

    >>> y=[s,t,x]

    >>>

    >>> a=numpy.cov(y)

    >>> a

    array([[ 4.00000000e+02, 2.00000000e+02, 0.00000000e+00],

    [ 2.00000000e+02, 1.00000000e+02, 0.00000000e+00],

    [ 0.00000000e+00, 0.00000000e+00, 3.33333333e-01]])

    >>>

    >>>

    >>>

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

    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)
    
    展开全文
  • The computer I'm on doesn't have python so I can't test this, but try: z = zip(x,y) np.cov(z) Of course.... really what you want is probably more like: n=100 # number of points in each vector num_...
  • I am using numpy and want to compute the covariance matrix for an ndarray. I am trying to use numpy.cov() but am not getting the correct results. More details below.My ndarray is 768x8 for where 8 is ...
  • 在计算协方差矩阵时,我使用numpy.cov与numpy.dot得出了不同的结果.如果我的二维数组是(5,9),我想得到一个5×5(即NxN)协方差矩阵.这是我使用numpy.dot获得的.使用numpy.cov,我得到的协方差矩阵为9×9.这与我所需的...
  • Python计算矩阵的协方差矩阵 dataMatric = np.random.random((10,10)) #print(np.cov(y,rowvar=False)) #其中rowvar是布尔类型。默认为true是将行作为独立的变量、如果是flase的话,则将列作为独立的变量。 ...
  • 定义:设(X1,X2,X3,···,Xn)是一个n维随机变量,任意Xi与Xj的相关系数\(p_{ij}(i=1,2,···,n)\)存在,则以\(p_{ij}\...在python中,可以利用pandas的corr获取相关系数矩阵,代码如下: a = np.arange(1,10).resha...
  • 在PCA中会用到,记录一下numpy.cov()的作用是计算协方差矩阵,下面给出几个例子>>> x = np.array([[0, 2], [1, 1], [2, 0]]).T>>> xarray([[0, 1, 2],[2, 1, 0]])>>> np.cov(x)array([[ 1., -1.],[-1., 1.]])>>> x =...
  • numpy.cov()求协方差矩阵

    万次阅读 2017-09-05 10:23:13
    numpy.cov(m, y=None,...对给定的数据和权重,估计协方差矩阵 协方差表示两个变量在一起变化的水平。如果我们检查N维样本,则X = [x_1,x_2,... x_N] ^ T,则协方差矩阵元素C_ {ij}是x_i和x_j的协方差。元素C_ {ii}
  • python相关矩阵与协方差矩阵

    千次阅读 2020-01-10 16:20:22
    相关系数矩阵 pandas.DataFrame(数据).corr() import pandas as pd df = pd.DataFrame({ 'a': [11, 22, 33, 44, 55, 66, 77, 88, 99], 'b': [10, 24, 30, 48, 50, 72, 70, 96, 90], 'c': [91, 79, 72, 58, 53, 4....
  • import numpy as np matric = [ [11, 22, 33, 44, 55, 66, 77, 88, 99], [10, 24, 30, 48, 50, 72, 70, 96, 90], [91, 79, 72, 58, 53, 47, 34, 16, 10], [55, 20, 98, 19, 17, 10, 77, 89, 14]] ...
  • numpy求协方差矩阵(numpy.cov())

    万次阅读 2018-12-02 15:02:02
    1、关于方差与协方差 方差公式: 方差度量 协方差公式: 协方差矩阵的介绍和计算见: https://blog.csdn.net/Mr_HHH/article/details/78490576 2、numpy.cov()函数
  • import numpy as np x = np.array([[1,1,1], [0,0,-1], [1,-1,1],[-1,1,0]]).T print(x) ...y = np.cov(x)#协方差阵 print(y) print('---------') print(np.linalg.eigvals(y))#特征值 print('---------A2
  • 协方差矩阵python实现

    万次阅读 2020-08-06 22:32:16
    给出协方差矩阵的定义: 这个定义还是很容易理解的,我们可以举一个简单的三维的例子,假设数据集有三个维度,则协方差矩阵为 可见,协方差矩阵是一个对称的矩阵,而且对角线是各个维度上的方差。 Matlab协方差实战 ...
  • 代码如下: import cv2 import numpy as np from matplotlib import pyplot as plt # 计算三波段协方差 ''' 1.读取图像BGR三个波段的元素 ...4.得出协方差矩阵 ''' def Cov(image): w = image.shape[0] h = i...
  • from sklearn.decomposition import PCA import numpy as np def pca(data, dim=0): # 数据 降维大小(mle为auto) if dim == 0: dim = 'mle' pca_ = PCA(n_components=dim)... # 协方差矩阵 cov_matritx = pca_.
  • df = pd.DataFrame( np.array([[91, 97, 89, 95, 89, 96, 557], [89, 100, 90, 90, 88, 97, 554], [88, 97, 93, 93, 89, 91, 551], [96, 90, 97, 90, 86, 92, 551], [89, 94, 95.5, 85, 85, 96, 544.5], ...
  • 这个问题还有个关键是通过python求协方差矩阵的特征值和特征向量,np.linalg.eig()方法直接返回了特征值的向量和特征向量的矩阵 scipy.linalg.eigh()方法可以对返回的特征值和特征向量进行控制,通过eigvals参数,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,977
精华内容 3,190
关键字:

python求协方差矩阵

python 订阅