



在机器学习领域,高维空间中椭圆(又称超椭圆)的概念会频繁出现。这里,我们会回顾并重新探讨这些概念。
回想一下高中数学中椭圆的方程:
这是一个简单的二维椭圆,中心位于原点,它的长轴和短轴与坐标轴对齐。如果将位置向量表示为
,则该方程可以重写为
x T Λx = 1
其中
是一个对角矩阵,这种表达方式可以推广到
n
维,表示一个以原点为中心、长轴和短轴与坐标轴对齐的
n
维椭圆。现在让我们对坐标轴应用一个旋转变换
R
。则每个向量
x
会变换为
Rx
。在旋转后的坐标系中,新的椭圆方程为
( Rx ) T Λ ( R x )= 1
⇔ x T ( R T ΛR ) x = 1
其中 A =( R T ΛR )。
综上,椭圆的广义方程可以表示为
x T Ax = 1
请注意以下几点:
·椭圆不再与坐标轴对齐。
·矩阵 A 不再是对角矩阵。
· A 是对称的。我们可以很容易地验证 A T =( R T ΛR ) T = R T Λ T R = R T ΛR (请记住,对角矩阵的转置是它本身)。
此外,如果还想摆脱“以原点为中心”的假设,我们将得到
现在让我们反过来思考这个问题。假设我们有一个一般的 n 维椭圆。我们该如何计算它的轴的方向?
显然,如果我们可以旋转坐标系,使得中间的矩阵变为对角矩阵,那么问题便迎刃而解了。因此,对角化方法(见2.15节)就是我们所需要的解决方案。具体来说,我们需要构建一个旋转矩阵 S ,其列由 A 的特征向量组成,又因为 A 是对称的,所以 S 是正交的。我们通过应用这个矩阵来变换(旋转)坐标系。在这个新的坐标系中,椭圆的轴与坐标轴是对齐的。换句话说,新的坐标轴既是 A 的特征向量,也是椭圆的轴。
超椭圆的PyTorch代码实现
让我们尝试找到方程5 x 2 +6 xy +5 y 2 =20所描述的超椭圆的轴。注意,虽然为了便于可视化,示例中实际使用的椭圆是二维的,但我们开发的代码具有通用性,可以扩展到多维空间。
通过使用矩阵和向量,该椭圆方程可以表示为 x T Ax =1,其中,
为了找到超椭圆的轴,我们需要转换坐标系,以使中间的矩阵变为对角矩阵。以下为具体的实现方法:如果将矩阵 A 对角化为 SΣS -1 ,那么椭圆方程就变成了 x T SΣS -1 x =1,其中 Σ 是一个对角矩阵。由于 A 是对称的,其特征向量是正交的。因此,将这些特征向量作为列的矩阵也是正交的,即 S -1 = S T 。换句话说, S 是一个旋转矩阵。所以,椭圆方程变为 x T SΣS T x =1或( x T S ) Σ ( S T x )=1或 y T Σy =1,其中 y = S T x 。这是我们期望的形式,因为 Σ 是一个对角矩阵。记住, S 是一个旋转矩阵。因此,通过 S 旋转坐标系,可以使坐标轴与椭圆的轴对齐。具体实现代码如代码清单2.21所示。
代码清单2.21 超椭圆的轴
图2.16 注意椭圆的长轴与 X 轴成45°夹角。通过将坐标系旋转45°,可以使椭圆的轴与坐标轴对齐。相应地,第一个主向量也将沿着该方向