python - 在 Python 中实现相关和相关矩阵
问题描述
我想在不使用内置函数的情况下实现协方差和相关矩阵。
我的代码:
u1 = 1; u2 = 0; sigma1 = 1; sigma2 = 2; N = 1000
X = norm.rvs(u1 , sigma1,size=(1 , N))
Y= norm.rvs(u2 , sigma2,size=(1 , N))
XY = np.concatenate((X,Y))
fact = N - 1
cov_mat = np.dot(XY.T, XY.conj()) / fact
print(cov_mat)
结果
[[ 0.000136 -0.00045308 0.00041102 ... -0.00066916 -0.00048639
-0.00053653]
[-0.00045308 0.00686947 0.00272365 ... 0.00294479 0.00971417
0.00538347]
[ 0.00041102 0.00272365 0.0043675 ... -0.00147591 0.00471047
0.00112446]
...
[-0.00066916 0.00294479 -0.00147591 ... 0.00338792 0.00347361
0.0031199 ]
[-0.00048639 0.00971417 0.00471047 ... 0.00347361 0.01396131
0.00734893]
[-0.00053653 0.00538347 0.00112446 ... 0.0031199 0.00734893
0.00452921]]
结果并不如我所料。请协助。
使用 np.cov(),结果是:
[[0.98423898 0.01737643]
[0.01737643 3.8532223 ]]
谢谢你。
解决方案
和之间的协方差矩阵如下所示:X
Y
| var_X cov_XY |
| cov_XY var_Y |
var_X = E[(X - E[X])²]
同样,您有var_Y = E[(Y - E[Y])²]
和cov(X, Y) = E[(X - E[X])(Y - E[Y])]
。cov(X, Y)
是对称的。
您可以通过以下方式测量:
>>> var_X = ((X - X.mean())**2).mean()
>>> var_Y = ((Y - Y.mean())**2).mean()
>>> cov_XY = ((X - X.mean())*(Y - Y.mean())).mean()
然而和之间的相关矩阵看起来像:X
Y
| 1 r_YX |
| r_XY 1 |
其中r_XY = cov_XY / (std_X*std_Y)
,这意味着对称corr(X, Y)
使用cov_XY
、var_X
和var_Y
,相关矩阵可以构造为:
>>> corr_XY = cov_XY / np.sqrt(var_X*var_Y)
推荐阅读
- node.js - 使用 process.yml 时,PM2 环境验证为“未定义”
- linux - 当需要用户输入时,如何在启动时自动运行应用程序?
- angular - 使用 angularx-flatpickr 在 Angular 上加载语言环境时出错
- php - 如何避免带有大量换行符的文本?
- swift - 如何保持用户在firebase中的连接?
- ios - retrieveConnectedPeripheralsWithServices 不返回当前连接到系统的设备
- c# - 尝试使用 SaveChanges(实体框架核心)时,作为对象的属性变为空,这是为什么呢?
- android - 自定义异步任务的实现不起作用
- c# - 安装程序项目 - 使用提升的权限启动自定义操作
- javascript - 从 DataTable 中的逗号分隔列填充下拉菜单