【问题标题】:pearson correlation using np.random.rand failing使用 np.random.rand 的 pearson 相关性失败
【发布时间】:2019-02-15 01:38:02
【问题描述】:

我有以下代码使用两种不同的方式计算相关系数来生成数字序列。它不适用于第一种方式(corr_coeff_pearson),但适用于第二种方式(corr_coeff_pearson_1)。为什么会这样?在这两种情况下,变量都属于“numpy.ndarray”类

import numpy as np

np.random.seed(1000)

inp_vct_lngt = 5

X = 2*np.random.rand(inp_vct_lngt,1)
y=4+3*X+np.random.randn(inp_vct_lngt,1)
print(type(X))

corr_coeff_pearson=0
corr_coeff_pearson = np.corrcoef(X,y)
print("Pearson Correlation:")
print(corr_coeff_pearson)

X_1 = np.random.randint(0,50,5)
y_1 = X_1 + np.random.normal(0,10,5)
print(type(X_1))

corr_coeff_pearson_1 = np.corrcoef(X_1,y_1)
print("Pearson Correlation:")
print(corr_coeff_pearson_1)

有没有什么方法可以“转换”第一种方式来生成我缺少的系列的数字?

【问题讨论】:

  • 什么不起作用?它抛出错误吗?为什么你用0 初始化corrcoeff_pearson 而你没有用另一个coeff 来初始化?

标签: python numpy


【解决方案1】:

问题在于Xy 是二维的:

>>> X
array([[1.9330627 ],
       [0.19204405],
       [0.21168505],
       [0.65018234],
       [0.83079548]])
>>> y
array([[8.60619212],
       [6.09210226],
       [5.33097283],
       [5.71649684],
       [5.18771916]])

所以corrcoef在想

x 的每一行代表一个变量,每一列都是对所有这些变量的一次观察

(引自docs

您可以做的是将二维平面化为一维:

>>> np.corrcoef(X.flatten(),y.flatten())
array([[1.        , 0.84196446],
       [0.84196446, 1.        ]])

或者使用rowvar=False:

>>> np.corrcoef(X,y,rowvar=False)
array([[1.        , 0.84196446],
       [0.84196446, 1.        ]])

【讨论】:

  • 完美!我也是这么想的,但我不知道如何把它弄平。关于何时应该使用 .flatten() 与 rowvar=False 有什么想法吗?
  • 我认为rowvar=False 更合适,但这只是因为它迫使用户思考他们正在实现的目标......
猜你喜欢
  • 1970-01-01
  • 2020-02-06
  • 2017-03-08
  • 1970-01-01
  • 2011-05-31
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
  • 2016-05-09
相关资源
最近更新 更多