问题标签 [covariance-matrix]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
97 浏览

python - 获取 scipy 的 LSQUnivariateSpline 或 make_lsq_spline 的正态矩阵或方差-协方差矩阵(在给定权重的情况下)

我正在使用 scipy.interpolate 中的 LSQUnivariateSpline 或 make_lsq_spline 来获取给定的权重。有没有一种简单的方法不仅可以获得结果样条曲线,还可以获得样条曲线系数的方差 - 协方差矩阵?有没有一种简单的方法来获取在这些函数中生成并用于 LSQ 问题的法线矩阵?

0 投票
1 回答
449 浏览

python - Matplotlib - Python- GetDist 工具 - 通过调用两次 plot 函数重叠 2 个三角形图(三图):两者之间的可见优先级问题

在 python3 中,我使用工具GetDist 工具生成协方差矩阵的三元图时遇到了 2 个问题。

1)目前,我只需调用一次绘图函数(triangle_plot)就可以在同一个图形上绘制 2 个协方差矩阵。将要绘制的协方差矩阵列表指定为第一个输入足以具有每个矩阵的 (1 sigma,2 sigma) 轮廓。这里是由 2 个协方差矩阵生成的三元图示例(填充区域对应于 1 sigma 置信水平 (68%),阴影对应于 2 sigma CL (95%))。颜色标识每个矩阵(此处为红色和蓝色):

每个矩阵的轮廓 1 sigma 和 2 sigma

我的主要目标是我想通过这样的降序优先考虑重叠:

而在默认行为中,我具有以下降序优先级:

这里是生成上图的脚本:

最后,我只是希望 1 sigma 红色圆盘不要被 2 sigma 蓝色阴影所隐藏。

这是我想要的一个例子(注意,与我上面的三幅图相比,红色和蓝色之间存在反转):

想要的重叠示例

不要在意黄色的轮廓。如您所见,1 sigma 蓝色磁盘的优先级高于 2 红色阴影 sigma 磁盘。这与我想要的行为完全相同。

在我上面的三幅图中,我尝试了很多使用 alpha 参数的方法,但是由于颜色混合在一起并且不再与图例(红色和蓝色)相对应,所以它一团糟。

2)鉴于我没有发现在源代码中更改此优先级的事实GetDist,我尝试调用两次该函数triangle_plot,每次调用一个矩阵。

但不幸的是,在 2 次调用之后,2 个地块没有重叠。仅出现一个颜色三图(最后一次调用的那个)。例如,如果我像这样连续两次调用(matrix 2代表最大的红色椭圆和matrix1最小的椭圆):

是否可以保留第一个三图(矩阵 2 以红色表示)并再次调用triangle_plot函数以重叠,在第一个三图上,第二个三图(蓝色)?

实际上,这将允许我使用 Confidence 级别的标识符(CL:68% 或 95%),然后解决这个优先级问题。

不幸的是,当我调用 2 次 triangle_plot 函数时,重叠不起作用:只保留最后一次调用,第一次调用似乎已从图中删除。

在这种三元图上强制重叠(重叠轮廓但不重叠标签和刻度)的方法是什么?我们可以先验地认为这很简单,因为三图只是框/子图),但我不能仅仅设法执行这种重叠。我试图在两个电话之间插入:

但这不起作用。我认为这是因为我最后将图形保存在文件中:

更新 1

感谢史蒂夫。只是最后一个问题:水平和垂直 xticks 被轮廓和填充区域隐藏,我不知道后者是哪个zorder。这里有 2 个例子说明了这个问题:

xticks 蒙面的第一个例子

可以看到对应0.95的xtick被屏蔽了。

xticks 掩码的第二个示例

你可以看到右下角的 xtick 也被屏蔽了。

更新 2

完美的解决方案,@Stef但它仍然是一个小问题:xticks 和 yticks 被轮廓隐藏。

默认情况下,z-orderxticks 的 of 由下式给出:

返回:0

所以,当我绘制我的轮廓时,我把triangle_plot

这样,我可以让轮廓不被轮廓隐藏。例如,如下所示:

xtick 没有隐藏

这个解决方案不是很容易,因为我必须处理负值 ( [-1.7, -1.5, -0.1, -1.6, -1.4, -0.1])。

现在,多亏了@Stef,我可以修改 的这个值 g.fig.axes[0].xaxis.get_major_ticks()[0].zorder,例如等于3

但如果我在那之后做:

xticks 仍然被轮廓隐藏,而阈值设置为3:我不明白这种行为:

xtick 隐藏

可能有什么问题?

更新 3

在这里,我试图解决关于我想要在刻度上的优先级的问题的最后一件事,即使 xticks/yticks 出现在轮廓前面,而不是瞬间发生的相反。

zorder如果我默认打印get_major_ticks()and的值get_ticklines()[0]),我得到:

==>

get_major_ticks()和有什么区别get_ticklines()

您可以理解为什么我可以设法在所有轮廓前面设置刻度,即通过在给出的解决方案中设置负值@Stef

zorder2我可以通过放置来修改上述内容:

但我不可能修改zorder10默认情况下)。

我怎么能改变这个0zorder1(它引用get_ticklines())?

0 投票
0 回答
162 浏览

r - “x”熔岩错误中的无限值或缺失值

我确信我遗漏了一些明显的东西,但这是我第一次在统计类之外使用 SEM。

大局是我正在尝试对多元调节中介分析进行建模,直到今天早上我开始遇到此错误时才遇到问题:

我想我已经完成了我之前关于这个错误的问题的尽职调查,并且我推测我观察到的协方差矩阵是奇异的。我一直试图找出导致问题的确切原因,并最终将我的模型缩减为单个潜在变量,但我仍然遇到此错误。因此,我在两个观察到的变量上对其进行了测试,得到了相同的错误,并使用三个不同的观察到的变量进行了尝试:

我仍然遇到同样的错误。我应该提到,我还在一个数据集上测试了这些,只有具有完整数据的案例并得到了相同的错误。

PS:我知道这是极少数的引导重采样,但由于我在排除故障时一直在重新运行模型,所以我选择了它来保持运行。

以下是一些数据(来自省略不完整案例的数据框)

0 投票
1 回答
1091 浏览

python - 如何计算图像数据集中 RGB 值的 3x3 协方差矩阵?

我需要计算图像数据集中 RGB 值的协方差矩阵,然后将 Cholesky 分解应用于最终结果。

RGB 值的协方差矩阵是一个 3x3 矩阵 M,其中 M_(i, i) 是通道 i 的方差,M_(i, j) 是通道 i 和 j 之间的协方差。

最终结果应该是这样的:

即使 Numpy 具有 Cov 功能,我也更愿意坚持使用 PyTorch 功能。

我试图在这里基于其他 cov 实现和克隆在 PyTorch 中重新创建 numpy Cov 函数:

数据集加载将是这样的:

目前我只是在试验用torch.randn(batch_size, 3, height, width).

编辑:

我试图在这里复制 Tensorflow 的 Lucid 中的矩阵,并在 distill.pub 上进行一些解释。

第二次编辑:

为了使输出类似于示例之一,您必须这样做而不是使用 Cholesky:

然后可以使用生成的矩阵来执行颜色去相关,这对于可视化特征(DeepDream)很有用。我已经在我的项目中实现了

0 投票
1 回答
461 浏览

r - R:需要使用双向(阶乘)MANOVA 执行 boxM() 的示例 - 我收到错误消息

我正在尝试为双向 MANOVA 运行 Box 的协方差矩阵同质性 M 检验。

我从昨天下午开始搜索一个例子。我看到了许多将 boxM 与单向 MANOVA 结合使用的示例。在每种情况下,如果源还涵盖双向 MANOVA,则它们不包括演示在双向情况下运行 boxM 测试。我只需要一个工作示例。一旦我掌握了语法,我就可以让它工作。

biotools 包中的 boxM 函数表示它适用于一个分类因子(单向 MANOVA)。
https://www.rdocumentation.org/packages/biotools/versions/3.1/topics/boxM

heplots 包中的 boxM 函数表示它适用于一个或多个分类因素——https:
//www.rdocumentation.org/packages/heplots/versions/1.3-5/topics/boxM

-- 但是,当我尝试使用它时出现错误:“模型必须是完全交叉的公式。”

下面,我展示了单独使用任何一个因素时我都没有得到错误,但是任何交叉因素的安排都会产生这个错误。注意:在跨变量的情况下运行 Levene 的测试时,我没有收到此错误。

Response1、Response2 和 Response3 是连续的。
Factor1 有 2 个水平。Factor2 有 5 个级别。

0 投票
0 回答
73 浏览

hidden-markov-models - 当协方差矩阵值在 hmmlearn - GMMHMM 中都相同时,这意味着什么?

我正在与来自 hmm learn 的 GMMHMM 合作进行说话人识别。训练模型后,我发现协方差矩阵(covars_)中的所有值都具有相同的值。我初始化我的嗯如下

model = hmm.GMMHMM(n_components=5, n_mix = 3, n_iter=100, covariance_type='diag)

用从语音数据中提取的 MFCC 特征样本对其进行拟合。

model.fit(X,lengths)

打印出来后model.covars_,我的输出看起来像下面打印出来的

[[[1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392] [1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392] [1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392 1.00120392]]

这是针对单个州的,但所有州的值完全相同。

是否有一个原因?

0 投票
1 回答
80 浏览

r - R 语言:3-d 数组数据的计算机协方差矩阵

如何在 iris 数据集(一个 3-d 数组数据集)上使用 r 中的 apply() 函数来计算Setosa、Versicolor 和Virginica,表示为 3 维数组。

这是数据集的前 6 行

0 投票
1 回答
615 浏览

python - Python中的不确定性包:使用给定的协方差矩阵来获取数据的不确定性

我相信我的问题很容易理解,但我想把它说得很清楚,因此这篇文章的长度。

我在下面总结的初始情况类似于本文中解释的情况(https://stats.stackexchange.com/questions/50830/can-i-convert-a-covariance-matrix-into-uncertainties- for-variables ),但特别关注 python 包不确定性如何处理这种情况。

情况如下:

  • 我拥有一组与某些测量值的标称值相对应的数据点(通过标称值,我的意思是没有考虑任何不确定性的裸值)。

  • 每个数据点都有其不确定性,这也提供给了我。更重要的是,由于测量中的一些系统性,不同的数据点不是独立的,而是相关的。因此,给了我一个具有非零非对角元素的整个协方差矩阵。

我想做的是以不确定性适当传播的方式对我的数据进行计算。最终,我希望在控制台中以标称值 +/- 不确定性的形式显示值。python 包“不确定性”似乎是正确的方法,但我不确定它为我的初始数据点提供的不确定性数字的含义。

我所期望的是,我的初始数据点的不确定性对应于“朴素”标准偏差,即我的协方差矩阵的对角线元素的平方根。这忽略了数据中的相关性,但以标称值 +/- 不确定性的形式显示相关结果无论如何都不会显示相关性,只要后者在进一步计算中被正确考虑,这应该不是问题。

但是,包装上显示的另一个数字是不确定性,我不知道它来自哪里。软件包文档几乎没有帮助。我想知道我是否可能滥用该软件包。

谁能帮我了解一下情况?非常感谢 !!

这是一个最小的可重现示例:

0 投票
0 回答
391 浏览

neural-network - 这是计算二维特征图协方差矩阵的正确方法吗?

在神经网络中,我有一些 2D 特征图,其值介于 0 和 1 之间。对于这些图,我想根据每个坐标的值计算协方差矩阵。不幸的是,pytorch 没有.cov()像 numpy 那样的功能。所以我改写了以下函数:

这是正确的方法吗?

编辑:

这是与numpy函数的比较:

显然,我的值太小了 2 倍。为什么会这样?

Edit2:啊,我想通了。它必须除以(h*w/2 - 1):) 然后值匹配。

0 投票
1 回答
109 浏览

python - 在numpy中生成随机二进制数组,具有由索引给出的不同概率

我有一个对称矩阵 A,其中A.shape = (30, 30), 的每一行都A与 3 个唯一标签中的一个相关联[0, 1, 2]

我有另一个矩阵 M:

我想X用 shape制作一个新数组(30, 3)。调用此数组的每一行Xi及其相关标签k(k 为 0、1 或 2)。

我希望 的ith元素为Xi1,概率为 m1 ifi == k和 m2 if i != k

我编写了一些使用嵌套 for 循环的工作代码来执行此操作,但我想使用纯 numpy 执行此操作。有什么建议么?

这是当前效率低下的实现,跳过了我定义Alabels和的部分M