主方向计算

主方向计算

1 前言

有时,我们需要在一系列方向向量中,找到一个特征方向向量来表示这些方向向量的主方向, 或者对方向向量聚类成一个特征方向向量。
这里设已知的\(n\)个已经归一化的方向向量序列为\(\mathbf{p}_1,\mathbf{p}_2,\mathbf{p}_3,…,\mathbf{p}_n\), 待求的归一化后的特征方向向量为\(\mathbf{d}\)。这里\(\mathbf{d}\)就是需要求解的向量。

2 理论

2.1 点直线距离平方和最小

要求单位特征方向向量\(\mathbf{d}\), 记得先约定特征方向向量形式。试想一下,所有序列向量均是从原点往外延伸1个单元得到一个位置,要求特征向量位置距离所有序列向量的位置最短, 这里使用欧式距离进行约定, 因此求特征向量等价于求如下问题的解:  
(1)
$$
\begin{aligned}
\mathbf{min}:e_1 &= \sum_{i=1}^nw_i||\mathbf{d}-\mathbf{p}_i||_2^2
\\
&=2\sum_{i=1}^nw_i(1-\mathbf{d}\cdot\mathbf{p}_i)
\\
&\Updownarrow
\\
\mathbf{max}:e_2&=\sum_{i=1}^nw_i\mathbf{d}\cdot\mathbf{p}_i=\mathbf{d}\cdot\mathbf{q}=\cos(\angle(\mathbf{d},\mathbf{q})) |\mathbf{q}| \leq |\mathbf{q}|
\\
&\Updownarrow
\\
\mathbf{d}&=\dfrac{\mathbf{q}}{|\mathbf{q}|}
\end{aligned}
$$
公式里\(w_i\)表示第\(i\)个向量为求特征向量贡献的权重,如果所有权重一致,则直接可设置为1。其中向量\(\mathbf{q}\)来自如下公式  
(2)
$$
\mathbf{q}=\begin{bmatrix}
\sum_{i=1}^nw_i\mathbf{p}_{i,1}
\\
\\
\sum_{i=1}^nw_i\mathbf{p}_{i,2}
\\
\\
\sum_{i=1}^nw_i\mathbf{p}_{i,3}
\\
\\

\end{bmatrix}
$$
公式里\(\mathbf{p}_{i,j}\)表示向量\(\mathbf{p}_i\)在第\(j\)个维度的值。

2.2 点弧线距离平方和最小

这里同样所有序列向量均是从原点往外延伸1个单元得到一个位置,要求特征向量位置距离所有序列向量以半径为1弧线走过的距离最短, 这里定义的距离并不是两点直线距离,而是弧线绕过的距离, 因此求特征向量等价于求如下问题的解:  
(3)
$$
\begin{aligned}
\mathbf{min}:e_1&=\sum_{i=1}^nw_i (2\pi \times 1 \times \dfrac{\arccos(\mathbf{d}\cdot\mathbf{p}_i)}{2\pi})^2
\\
&=\sum_{i=1}^nw_i \arccos(\mathbf{d}\cdot\mathbf{p}_i)^2
\end{aligned}
$$
从(3)可以发现, 这个原理等价于(夹角)角度平均。对于这个公式,在向量维度大于2的情况下,一般使用非线性拟合方式求得\(\mathbf{d}\),而对于维度为2时,则可以简化为角度。

对于二维情况, 这里设\(\mathbf{p}_1,\mathbf{p}_2,\mathbf{p}_3,…,\mathbf{p}_n\)对应的角度为\(p_1,p_2,p_3,…,p_n\)(角度取值范围\((-\pi,\pi]\))。这里设特征向量\(\mathbf{d}\)对应的角度为\(d\)。由于(3)的原理是角度平均,但是不能简单将所有角度相加取平均,因为角度在\(-\pi\)与\(\pi\)上下时抖动时,即使抖动微小,它们数值也变化剧烈。因此需要单独处理,在处理时,设置如下中间变量

(4)
$$
\begin{aligned}
\mathbf{sign}(x) &=\begin{cases}
-1 &,x<0
\\
1 &,x \geq 0
\end{cases}
\\
a&=\sum_{i=1}^nw_i(1-\mathbf{sign}(p_i))p_i
\\
b&=\sum_{i=1}^nw_i(1+\mathbf{sign}(p_i))p_i
\\
m_a&=\sum_{i=1}^nw_i(1-\mathbf{sign}(p_i))
\\
m_b&=\sum_{i=1}^nw_i(1+\mathbf{sign}(p_i))
\\
v_a&=\begin{cases}
0&,m_a=0
\\
\dfrac{a}{m_a}&,m\neq 0
\end{cases}
\\
v_b&=\begin{cases}
0&,m_b=0
\\
\dfrac{b}{m_b}&,m\neq 0
\end{cases}
\end{aligned}
$$
最终按如下方式计算\(d\)  
(5)
$$
d=\begin{cases}
\dfrac{a+b}{m_a+m_b}&,\ v_b – v_a  \leq \pi
\\
\\
\dfrac{a+b+2\pi m_a}{m_a+m_b}&,v_b – v_a  > \pi
\end{cases}
$$

发表回复

您的电子邮箱地址不会被公开。

蜀ICP备17029856号-1