以度数为单位的回归预处理值以避免不连续性

问题描述

我有一组图像数据,我正在尝试训练一个神经网络来预测一个以度为单位的值,作为 [-180. 180) 范围内的输出。我不喜欢 -180 和 180(或等效于 0 和 360)之间的大不连续性对于基本相同的值的想法,并且我不想使用分类解决这个问题(例如 used here - 尽管请注意,我没有进行图像方向校正),因为这是一个有点精确的方位角。

我的一个想法是将度数值映射到三角函数上,例如在 0 度附近连续的正弦和余弦函数。但是,反正弦和反余弦仅定义在 -90 到 90 度之间,因此逆函数不适用于所有角度。我可以使用反正弦和反余弦的某种组合来获得所有可能的度数值,这些值可以使正弦或余弦在我想要的范围内输出某个值,但是我需要同时投影到正弦和余弦上以唯一地标识我想要的度数值因为每个都有两种可能性。

对于一个概念上很简单的问题,这种方法似乎太费力了。 有没有更好的方法可以按度数预处理我的值,使它们更适合回归?

我使用的是 Python,所以如果有一些库函数可以做到这一点,那就太好了,但问题更普遍。

解决方法

说到三角函数来解决不连续性问题,看看 versine 可能有用吗? Versine 可以处理 180 度角,而不是余弦和正弦的 90 度

,
import numpy as np
import matplotlib.pyplot as plt

您可以使用复数。即,如果您有一堆角度(以弧度为单位):

angles=np.arange(0,2*np.pi,0.01)

可以从它们生成复数:

cmplx=\
np.cos(angles)+1j*np.sin(angles)

当然,他们都会围成一圈:

plt.figure(figsize=(5,5))
plt.scatter(cmplx.real,cmplx.imag)

enter image description here

无间断!


我认为您不能仅使用实数进行映射。我不确定,但我认为 Showing that f:(0,2π]→S1 is not a homeomorphismShow that unit circle is compact? 是相关的。