引言
对于矩阵的特征向量、特征值,大多时候可能仅限于运算求解,公式套用,而对其本身所代表的含义并没有一个相对深入的理解。如果仅仅停留在会算的基础上,那么将这样一个数学知识应用于实际问题时,过程是痛苦的。诸如,主成分分析PCA (Principal Components Analysis)、奇异值分解SVD (Singular Value Decomposition)、协方差矩阵 (Covariance Matrix) 等等,从一定程度上说,上面这几种方法都是对特征向量和特征值的运用,理解了他们的含义,是掌握上面几种方法的基础。
1.矩阵是什么?矩阵乘法是什么?
关于矩阵是什么,维基百科上面的解释是:在数学中,矩阵是一个由数学、符号或者表达式组成的矩形数组或表格,按照行和列进行排列,用于表示数学对象或对象属性。简单说就是,数的排列组合。
那么矩阵乘法又是什么,这里为了使问题看起来更简单,用一个方阵和一个向量相乘。
A是n
∗
\ast
∗ n的矩阵,x是n
∗
\ast
∗ 1的列向量,得到的结果y是一个n
∗
\ast
∗ 1的列向量。这代表什么意思呢?将问题进一步简化,我们选取n=2。并设A,x,y如下。
来看上面两个被圈出的部分,形式转换之后是不是初见端倪。我们知道二维列向量可以用坐标形式表示如下。
对比两个式子
二维直角坐标系下的基是[1,0]
T
^T
T,[0,1]
T
^T
T,将向量用坐标形式表示时,其实就是将向量各个维度分别与对应的基向量相乘再相加。那么上图中,第二个式子是否也可以这么理解呢?答案是肯定的,抛去一些约束(比如正交和单位向量),我们可以发现基向量其实只是二维空间中任意两个线性无关向量中的一种特殊情况。二维空间中任意两个线性无关的向量可以表示整个二维空间内的所有向量,换句话说,只要不嫌麻烦,任意两个线性无关向量都可以用来当作基向量(显然,这里的基向量并不是数学定义中的基向量,下述中不再强调)。为了更加直观的理解,我们把矩阵和向量进行实例化,如下图。
可以看出,矩阵与向量相乘,其实就是进行了一步转换。将原本基于直角坐标系基的向量,转换为以矩阵列向量为基的向量。这或许就是矩阵与向量相乘的本质。有意思的一点是
从某种角度上说,原向量和相乘之后得到向量,他们的坐标是相同的,只是基于不同的基,这导致了他们方向上的改变和大小上的变化。这就是矩阵起到的作用,当一个矩阵与一个向量相乘之后,会改变原向量的方向,经常被称为旋转,同时也会改变原向量的大小,被称为伸缩。
要说明的是,上面举的例子其实很简单,这是为了便于理解,对于更复杂的矩阵与矩阵相乘还是有很多角度去解析的。
2.矩阵的特征向量和特征值
从上面的结论可以得到的是,矩阵起到旋转、伸缩的作用。而矩阵是如何进行旋转和伸缩的,这就涉及到矩阵的特征向量和特征值。关于矩阵的特征向量和特征值的求解,肯定离不开下面这个公式。
上面这个公式其实展示了一个非常特殊的现象,我们利用矩阵对向量进行旋转和伸缩的时候,发现某些向量的方向并未发生改变,而只进行了伸缩,伸缩程度是
λ
\lambda
λ 。同样为了便于理解,设一个矩阵A如下,并求解其特征值和特征向量。
求解特征值和特征向量如下。
我们再把所有得到的结果都放入原式中
这一点变得更加清晰,矩阵的所有特征向量是指那些在矩阵作用之后方向不发生改变的向量(这里的方向指在同一条线上)。而特征值的作用也变得明显了,表示在其对应的特征向量方向上的变化程度。
总结
上述中,举例说明了矩阵的一些特点,为了便于理解,举的例子其实是非常特殊的,对于一般性的矩阵,对其分析要更复杂,但这并不影响对矩阵特征值和特征向量的理解。总的来说,矩阵对应着一种变换,这种变换包括方向上的旋转和尺度上的伸缩,特征向量表示要旋转的方向,特征值表示在这个方向上旋转的程度。
理解了这些,再去学习PCA、SVD、Covariance matrix等会更容易一些,同时对机器学习中的一些其他数据处理方法也能有一个更好的认识,毕竟数据就是矩阵!