问题

如何计算一组三维空间角度数据的方差(或者说离散程度)?

回答
好的,我们来聊聊如何衡量一组三维空间角度数据的“分散程度”,也就是我们常说的方差或者离散程度。在很多工程、物理、生物等领域,我们都会遇到描述物体朝向或者方向的数据,比如相机镜头指向、机械臂末端姿态、甚至生物体的某种取向等等。这些数据都是角度,而且是在三维空间中的。

直接把三维角度当成普通的数值来计算方差,其实会遇到一些问题。最主要的原因是角度的“周期性”和“非线性”。比如,170度和+170度的角度,在数值上差了340度,但实际上它们指向的方向几乎是相反的。如果我们直接求平均再计算偏差的平方和,很容易得出错误的结论。

所以,我们需要一些更合适的方法来处理三维角度数据的离散性。下面我将分几个方面来介绍,尽量说得透彻一些。

一、 理解三维角度数据的本质:向量表示

在讨论方差之前,我们得先明确,三维空间中的一个方向,用什么来表示最方便、最准确。虽然我们可以用欧拉角(比如绕x、y、z轴的旋转角度组合)或者四元数来描述方向,但对于计算离散程度,将角度转化为单位向量会是更直接、更不容易出错的方式。

为什么是单位向量?因为单位向量的长度始终为1,它只保留了“方向”的信息,消除了“尺度”的影响。而且,单位向量的计算比较直观:如果一个方向在球坐标系下由球心指向球面上,那么这个方向的单位向量就是从球心指向该点的坐标向量。

假设我们有一组三维角度数据,比如是相机在不同时刻指向的三个方向。我们可以将每个方向表示为一个单位向量 $mathbf{v}_i$(其中 $i$ 从1到n,n是数据的总数)。

二、 计算平均方向(Mean Direction)

在普通数值的方差计算中,我们首先需要计算平均值。对于三维角度,我们需要计算一个“平均方向”。这也不是简单地把单位向量的每个分量加起来然后除以n,那样得到的向量很可能不是单位向量,而且方向也可能不准确,尤其是在向量们分布比较分散的时候。

计算平均方向的正确方法是:

1. 将所有方向表示为单位向量:如前所述,我们得到一组单位向量 ${mathbf{v}_1, mathbf{v}_2, dots, mathbf{v}_n}$。
2. 计算向量的算术平均:将这些单位向量的对应分量相加,然后除以向量的数量 $n$。
$mathbf{ar{v}} = frac{1}{n} sum_{i=1}^{n} mathbf{v}_i$
3. 将平均向量归一化为单位向量:计算出 $mathbf{ar{v}}$ 后,它的模长(长度)可能不为1了。我们需要将它再次归一化,得到最终的平均方向单位向量 $mathbf{mu}$。
$mathbf{mu} = frac{mathbf{ar{v}}}{|mathbf{ar{v}}|}$
其中 $|mathbf{ar{v}}|$ 是向量 $mathbf{ar{v}}$ 的模长。

这个 $mathbf{mu}$ 就是我们这组三维角度数据的“平均方向”。你可以想象,如果所有向量都指向同一个方向,那么 $mathbf{mu}$ 就是那个方向;如果它们分布在球面上,$mathbf{mu}$ 就会是这些向量“聚集”的那个中心方向。

三、 计算离散程度(方差的替代度量)

现在,我们有了平均方向 $mathbf{mu}$。如何衡量其他向量 $mathbf{v}_i$ 与这个平均方向 $mathbf{mu}$ 的“偏离程度”呢?对于三维角度,我们有几种常用的度量方式,它们都可以看作是方差的某种体现:

方法一:基于角度差的平均(Average Angular Deviation)

最直观的想法是计算每个向量 $mathbf{v}_i$ 与平均方向 $mathbf{mu}$ 之间的夹角,然后计算这些角度的平均值。

1. 计算每个向量与平均方向的夹角:
对于每个 $mathbf{v}_i$,它与 $mathbf{mu}$ 的夹角 $ heta_i$ 可以通过点积来计算:
$cos( heta_i) = mathbf{v}_i cdot mathbf{mu}$
由于 $mathbf{v}_i$ 和 $mathbf{mu}$ 都是单位向量,它们的点积就是它们夹角的余弦值。为了得到角度 $ heta_i$,我们可以使用反余弦函数:
$ heta_i = arccos(mathbf{v}_i cdot mathbf{mu})$
注意,$arccos$ 的输出范围是 $[0, pi]$(即0到180度)。这正好符合我们关心的方向的“偏离”程度,因为角度的相反方向(相差180度)我们也看作是很大的偏离。
2. 计算平均夹角:
将所有这些夹角 $ heta_i$ 求平均:
$ ext{Average Angular Deviation} = frac{1}{n} sum_{i=1}^{n} heta_i$

这个值越小,说明数据越集中在平均方向附近。

方法二:基于向量模长的度量(Concentration Parameter)

另一种衡量离散程度的方法,也是在统计学中更常用的,是看所有向量与平均方向的“一致性”。我们可以利用前面计算的平均向量 $mathbf{ar{v}}$ 的模长 $|mathbf{ar{v}}|$。

还记得我们计算平均方向 $mathbf{mu}$ 时是用 $mathbf{ar{v}} = frac{1}{n} sum_{i=1}^{n} mathbf{v}_i$ 吗?
$mathbf{ar{v}}$ 的模长 $|mathbf{ar{v}}|$ 可以写成:
$|mathbf{ar{v}}| = |frac{1}{n} sum_{i=1}^{n} mathbf{v}_i|$

这个模长 $|mathbf{ar{v}}|$ 的值实际上反映了所有向量的“合力”有多大。如果所有向量都非常接近,它们的合力会很大,$|mathbf{ar{v}}|$ 就会接近1。如果向量们分布很分散,甚至相互抵消,$|mathbf{ar{v}}|$ 就会接近0。

所以,我们可以用 $1 |mathbf{ar{v}}|$ 来衡量离散程度。这个值越大,表示向量们越分散,与平均方向的整体一致性越差。
$ ext{Dispersion} = 1 |mathbf{ar{v}}| = 1 |frac{1}{n} sum_{i=1}^{n} mathbf{v}_i|$

有时为了方便理解,人们也会用集中参数(Concentration Parameter)来表示数据的集中程度,比如 $R = n|mathbf{ar{v}}|$。 $R$ 越大,数据越集中。那么,我们这里的离散程度就可以看作是 $n R = n(1 |mathbf{ar{v}}|)$ 的某种形式。

一个更常用的集中参数是 KDE (Kernel Density Estimation) 中使用的集中度度量,或者直接使用 $kappa$(kappa)参数来描述像冯·米塞斯菲舍尔(Von MisesFisher)分布的集中程度。

对于球形分布的向量,我们可以用以下方法来量化其“集中度”或“离散度”。一个常用的度量是计算向量与平均方向的点积的平均值。

考虑 $mathbf{mu} = frac{1}{|sum mathbf{v}_i|} sum mathbf{v}_i$ 是单位平均向量。
我们可以计算 $mathbf{v}_i cdot mathbf{mu}$ 的平均值。
$ ext{Mean Cosine Similarity} = frac{1}{n} sum_{i=1}^{n} (mathbf{v}_i cdot mathbf{mu})$

注意,$mathbf{v}_i cdot mathbf{mu}$ 就是夹角 $ heta_i$ 的余弦值,即 $cos( heta_i)$。
所以,$frac{1}{n} sum_{i=1}^{n} (mathbf{v}_i cdot mathbf{mu}) = frac{1}{n} sum_{i=1}^{n} cos( heta_i)$。
这个值是介于 1 和 1 之间的。

现在,我们来定义一个与方差概念更接近的度量:

我们可以把前面计算的平均向量 $mathbf{ar{v}} = frac{1}{n} sum_{i=1}^{n} mathbf{v}_i$ 的模长,与向量数量 $n$ 结合起来,定义一个“方差”度量。

在某些文献中,离散度的计算是基于方差的一种类比。我们可以定义一个“方差”的度量为:

$ ext{Variancelike measure} = n n |mathbf{ar{v}}| = n(1 |frac{1}{n} sum_{i=1}^{n} mathbf{v}_i|)$

这个值越大,说明数据越分散。它的范围是从0(所有向量都完全相同)到 $2n$ (所有向量指向相反方向,或者均匀分布在球面)。

另一种与方差更直接关联的度量(来自球形统计学):

在球形统计学中,通常会使用一个“离散度”的度量,它是基于计算每个向量与平均方向的夹角的平方的平均值,或者直接使用向量的离散度。

考虑向量与平均方向之间的夹角的余弦值:$cos( heta_i) = mathbf{v}_i cdot mathbf{mu}$。
我们前面已经计算了 $frac{1}{n} sum cos( heta_i)$。

一个常用的离散度度量是 $1 (frac{1}{n} sum cos( heta_i))$。
$ ext{Dispersion Metric} = 1 frac{1}{n} sum_{i=1}^{n} cos( heta_i) = 1 frac{1}{n} sum_{i=1}^{n} (mathbf{v}_i cdot mathbf{mu})$

这个值也介于 0 和 2 之间。
当所有向量都指向平均方向时,$mathbf{v}_i = mathbf{mu}$,$cos( heta_i) = 1$,所以度量为 $1 1 = 0$ (最集中)。
当所有向量都指向平均方向的相反方向时,$mathbf{v}_i = mathbf{mu}$,$cos( heta_i) = 1$,所以度量为 $1 (1) = 2$ (最分散,在这个特定意义上)。
当向量均匀分布在球面时,平均夹角余弦值会趋于0,度量会趋于1。

总结一下这几种方法:

1. 平均夹角 (Average Angular Deviation):$frac{1}{n} sum arccos(mathbf{v}_i cdot mathbf{mu})$。直接告诉你平均偏离了多少度。范围是 $[0, pi]$。
2. 基于平均向量模长的度量 ($1 |mathbf{ar{v}}|$):衡量了所有向量的“合力”大小。值越大表示越分散。范围是 $[0, 1]$。
3. 基于平均余弦值的度量 ($1 frac{1}{n} sum cos( heta_i)$):衡量了向量与平均方向的整体“一致性”。值越大表示越分散。范围是 $[0, 2]$。

哪种方法“最好”?

这取决于你的具体应用场景和想表达的“离散程度”的含义。

如果想知道平均来说,每个方向偏离平均方向有多少角度,就用 平均夹角。
如果想衡量所有方向的 整体一致性 或 集中度,那么基于 平均余弦值 的度量(或者其相关的集中参数 $kappa$)通常是更优的选择,因为它在数学上更易处理,并且与很多描述方向的概率分布(如冯·米塞斯菲舍尔分布)有直接联系。这个度量也更“像是”方差的推广。

四、 举个例子

假设我们有一组三个方向向量(已经转化为单位向量):
$mathbf{v}_1 = [1, 0, 0]$
$mathbf{v}_2 = [0, 1, 0]$
$mathbf{v}_3 = [0, 0, 1]$

这些向量分别指向x轴正方向、y轴正方向和z轴正方向。

1. 计算平均向量 $mathbf{ar{v}}$:
$mathbf{ar{v}} = frac{1}{3} ([1, 0, 0] + [0, 1, 0] + [0, 0, 1]) = frac{1}{3} [1, 1, 1]$
2. 计算平均方向单位向量 $mathbf{mu}$:
$|mathbf{ar{v}}| = sqrt{(frac{1}{3})^2 + (frac{1}{3})^2 + (frac{1}{3})^2} = sqrt{frac{3}{9}} = sqrt{frac{1}{3}} = frac{1}{sqrt{3}}$
$mathbf{mu} = frac{mathbf{ar{v}}}{|mathbf{ar{v}}|} = frac{[frac{1}{3}, frac{1}{3}, frac{1}{3}]}{frac{1}{sqrt{3}}} = [frac{sqrt{3}}{3}, frac{sqrt{3}}{3}, frac{sqrt{3}}{3}]$
也就是 $mathbf{mu} = [frac{1}{sqrt{3}}, frac{1}{sqrt{3}}, frac{1}{sqrt{3}}]$。这个向量指向空间中的第一个卦限,与x、y、z轴成等角度。

3. 计算离散度(使用基于平均余弦值的度量):
计算 $mathbf{v}_1 cdot mathbf{mu} = [1, 0, 0] cdot [frac{1}{sqrt{3}}, frac{1}{sqrt{3}}, frac{1}{sqrt{3}}] = frac{1}{sqrt{3}}$
计算 $mathbf{v}_2 cdot mathbf{mu} = [0, 1, 0] cdot [frac{1}{sqrt{3}}, frac{1}{sqrt{3}}, frac{1}{sqrt{3}}] = frac{1}{sqrt{3}}$
计算 $mathbf{v}_3 cdot mathbf{mu} = [0, 0, 1] cdot [frac{1}{sqrt{3}}, frac{1}{sqrt{3}}, frac{1}{sqrt{3}}] = frac{1}{sqrt{3}}$
计算平均余弦值:$frac{1}{3} (frac{1}{sqrt{3}} + frac{1}{sqrt{3}} + frac{1}{sqrt{3}}) = frac{1}{3} (frac{3}{sqrt{3}}) = frac{1}{sqrt{3}} approx 0.577$
离散度度量为:$1 frac{1}{sqrt{3}} approx 1 0.577 = 0.423$

这个值0.423,表示这三个方向相对平均方向有一定的偏离。

如果我们换一组数据:
$mathbf{v}_1 = [1, 0, 0]$
$mathbf{v}_2 = [0.99, 0.1, 0]$
$mathbf{v}_3 = [0.98, 0.2, 0]$

这些数据会更集中。计算平均向量和离散度会得到一个更小的数值,说明数据更集中。

五、 使用统计软件或库

在实际操作中,我们通常不会手动进行这些计算。很多科学计算库(如Python的NumPy、SciPy,或者MATLAB)都有处理向量和进行球形统计的函数。

NumPy/SciPy:可以用来计算向量的点积、模长、归一化。SciPy 的 `spatial.transform.Rotation` 模块虽然主要用于旋转表示,但也可以帮助处理方向数据。更直接的是,一些专门用于统计分析的库可能会有球形统计的函数。
Pandas:虽然不是直接用于向量计算,但可以方便地管理和组织你的数据。

通常,你会将你的三维角度数据(例如欧拉角)转换成单位向量,然后使用向量运算来计算平均方向和离散度。

总结一下关键步骤:

1. 数据表示:将所有三维角度数据统一转换为单位向量。
2. 计算平均方向:对所有单位向量求算术平均,然后将结果归一化为单位向量。
3. 选择离散度度量:
平均夹角:直接衡量角度偏差。
基于平均余弦值的度量:衡量整体一致性,更常用。
4. 进行计算:使用向量点积和平均值来计算选定的离散度度量。

通过这些方法,我们就能有效地量化一组三维空间角度数据的分散程度了,而避免了直接对角度数值进行操作时可能出现的误导。这比直接计算数值方差来得更科学和准确。

网友意见

user avatar

其实问题可以等价成“单位球球面上的数据点离散程度应该如何刻画”

离散程度小的时候直接用平面近似就行了。

大的时候,其实“方差”的概念已经不合适了。

“方差”概念的引入,其实基于对数据的两个假设:

1.数据的偏差位置在概率上满足正态分布。

2.每个数据点的偶然偏差正态分布的σ是相同的。

虽然实际中往往人们强行用方差仍然能得到还不错的结果。但严格的来说,只有在以上两个条件满足的时候,方差才能表示离散程度。

=============

下面以一维为例做个解释:

我们测了三次某物的长度,测量结果为x1、x2、x3,但是我们深知除了这个物体本身的固有原因,温度变化导致的热胀冷缩、测量误差等很多原因,均会对测量值造成影响。

我们想知道如下两个数据:

1.下次测量时,得到哪个数的概率密度最大?

2.那些造成测量值波动的因素,它们到底有多大?

在通常情况下(满足前面说的两个条件),第一个问题的结果是“平均数”,第二个问题的结果是“方差”。

推导如下:

测量值是有固定值x0和变化值Δx相加得到的。Δx是有很多独立的微小的影响因素叠加而成的,可以用随机行走的概率分布模拟。易证在平直空间中这个分布为正态分布g(x)=exp-((x-x0)/σ)²,由问题本身的物理背景可以基本确定三次测量中这个σ相同。

由于x0和σ的具体值是不可知的,我们试图得到一个x0'和σ'使得实际值等于它们的概率最大。

那么,也就是说,我们要使得

exp-((x1-x0')/σ)² × exp-((x2-x0')/σ)² × exp-((x3-x0')/σ)²

的值最大。

由于σ相同,所以也就是说问题等价于选取x0'使得

(x1-x0')²+(x2-x0')²+(x3-x0')²

的值最小。

故x0'=(x1+x2+x3)/3 。x0'为x0的概率分布极大值。也就是我们说的“平均数”。

同时,我们也用(x1-x0')²+(x2-x0')²+(x3-x0')²来定义了残差(乘常数项不造成影响)

s≡⅓[(x1-x0')²+(x2-x0')²+(x3-x0')²]

易证s同样为σ²的概率极大值。

===========

我们也可以用同样的方法得到二维的线性拟合公式——恩就是教科书上教我们的那个。同样思想,就是找实际斜率和截距的概率最大值。

===========

但是球面上这就出问题了,因为球面上的随机行走结果分布它

不!是!正!态!分!布!

所以说“方差”的概念已经不存在了,我们需要根据球面随机行走的分布函数重新定义一个参数来作为离散度指标。

=============

这也是同样此问题不能用协方差的原因,协方差计算方法是有适用范围的,空间不是平直的时候不能乱用。如果用协方差矩阵计算的话,计算两组数据A和B,A为一些离散程度小的点和一些离散程度很大的点,B所有的点都离散程度适中。在本模型中由于空间非平直,用协方差计算会低估A的离散程度,而高估B的离散程度。

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有