### 前言
量化课堂也有一阵子没更新了,从现在起将陆续推出一套数学课堂,内容将含括量化交易会用到的数学基础:线性代数、数学分析、测度论、概率统计、随机过程,还有为没经历过严格数学训练的同学准备的数学逻辑和证明方法基础。数学课堂目标是能让学员有能力理解量化分析相关文献中的数学和统计学论证。目标不小,咱慢慢来。
先从线性代数开始。
先从“为什么要学线性代数”开始。
\[ \]
###导语
线性代数是数学中最基础却极其重要的一门学科,因为任何科学领域都绕不过线性代数,把线性代数称数学中最有必要掌握的一门也不为过。就拿其他数学分支来说,代数中的群表示论的基本是从任意群到矩阵群(一般线性群的子群)的同态映射;分析中的泛函分析是对无限维度的赋范线性空间和其上的线性算子的研究;几何中的流形是局部同胚于线性空间的拓扑空间,它们的切从是用线性空间来表示,这些线性的性质也延伸到上同调的理论;在离散数学中,代数图论是用邻接矩阵来表示一个图并用线性代数的技术展开研究,还有正如其名的矩阵胚,是有限域上的矩阵的一种延伸,在图论和组合学中有重要应用。
当然线性代数的作用远不局限于数学中,在物理、工程、计算机、金融、人工智能等科学领域中,线性代数以及上述需要线性代数的数学分支都有不计其数的应用场景。本篇介绍线性代数在各个方面的一些应用,覆盖面肯定不全,但足以展示线性代数的常用概念以及它对量化交易的重要性。
\[ \]
### 解决线性系统
线性最直接的应用应该就在于解决**线性系统**。大家一定都熟悉鸡兔同笼的问题。我们就举个例子,有一个笼子里有好多鸡和兔子和蚂蚁,三个物种分别有 $2$、$4$、$6$ 只脚。鸡和兔子加起来一共有 $22$ 只脚,兔子和蚂蚁加起来一共 $46$ 只脚,鸡和蚂蚁加起来一共 $60$ 只脚,请问三种动物各有多少。
设我们有鸡 $x$ 只、兔 $y$ 只和蚂蚁 $z$ 只,那么上面的条件可以写为系统
\begin{align*}
2x + 4 y & = 22\\
4y + 6 z & = 46\\
2x + 6z & = 60,
\end{align*}
通过线性代数的符号我们可以将这个系统写为矩阵和向量的乘积
\[ \begin{bmatrix} 2 & 4 & 0 \\ 0 & 4 & 6 \\ 2 & 0 & 6 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \end{bmatrix} = \begin{bmatrix} 22 \\ 46 \\ 60 \end{bmatrix}. \]
使用 NumPy(或者手算,$3 \times 3$ 的矩阵并不大),我们计算出等式中矩阵的逆矩阵为
\[ \begin{bmatrix} \frac{1}{4} & -\frac{1}{4} & \frac{1}{4} \\ \frac{1}{8} & \frac{1}{8} & -\frac{1}{8}\\ -\frac{1}{12} & \frac{1}{12} & \frac{1}{12} \end{bmatrix}, \]
所以可以计算出
\[ \begin{bmatrix} x \\ y \\ z \end{bmatrix} = \begin{bmatrix} \frac{1}{4} & -\frac{1}{4} & \frac{1}{4} \\ \frac{1}{8} & \frac{1}{8} & -\frac{1}{8}\\ -\frac{1}{12} & \frac{1}{12} & \frac{1}{12} \end{bmatrix} \begin{bmatrix} 22 \\ 46 \\ 60 \end{bmatrix} = \begin{bmatrix} 9 \\ 1 \\ 7 \end{bmatrix} ,\]
有 $7$ 只鸡、$1$ 只兔子和 $9$ 只蚂蚁。
\[ \]
### 空间的操作
线性代数中两个主要的数学对象是空间本身,叫做**线性空间**,和对线性空间的各种操作,叫做**矩阵**,它等同于线性映射,有时也叫做线性变换。比如说,一个二维的旋转矩阵的形式为
\[ R_\theta = \begin{bmatrix} \cos \theta & \sin \theta \\ -\sin \theta & \cos \theta \end{bmatrix}, \]
它的作用是将整个空间旋转 $\theta$ 的弧度(radian)。比如说,我们有一张图片(图片源:SciPy 数据库)
![image1.png][1]
这个图片的像素为 $1024 \times 768$,它的信息被储存为一个矩阵的数据
\[ \begin{bmatrix} c_{1,1} & \dots & c_{1,1024} \\ \vdots & \ddots & \vdots \\ c_{768,1} & \dots & c_{768,1024} \end{bmatrix},\]
$c_{x,y}$ 的值代表这个图片在坐标 $(x,y)$ 的颜色。我们想把这个图片旋转 $60^\circ$,也就是 $\frac{\pi}{3}$,那么就要把这个图片所在的整个二维空间用旋转矩阵 $R_{\frac{\pi}{3}}$ 进行变换。一个坐标 $\begin{bmatrix} x \\ y \end{bmatrix}$ 在转变之后的新坐标是
\[ \begin{bmatrix} x_{\text{new}} \\ y_{\text{new}} \end{bmatrix} = R_{\frac{\pi}{3}} \begin{bmatrix} x \\ y \end{bmatrix} .\]
那么就在一个新的画板上,把坐标 $(x_{\text{new}}, y_{\text{new}})$ 的颜色定义为 $c_{x,y}$,得到的就是旋转 $60^\circ$ 之后的图像结果(因为旋转之后的坐标不是整数,整数化之后留下一些黑点,这需要其他的图像处理技巧来解决,这里就不延伸)
![image2.png][2]
然后我们可以使用另一个矩阵
\[ \begin{bmatrix} 1.5 & 0 \\ 0 & 0.5 \end{bmatrix} \]
来进行同样的操作,这次得出的结果是把图片按 $x$ 轴拉伸为 $1.5$ 倍并按 $y$ 轴挤压为 $0.5$ 倍,得出结果
![image3.png][3]
\[ \]
### 线性回归
[线性回归](https://www.joinquant.com/post/1786?f=study&m=python)是统计学中一个常用的工具,给定一组二维空间上的点(后面图中的蓝点)
\[ \{ (x_1, y_1), (x_2, y_2), \dots, (x_n, y_n) \}, \]
我们想找到一条线(后面图中的绿线)
\[ y = ax + b \]
并希望这条绿线和这些蓝点是最贴近的。评判“最近”的方法就是使数据点离之线的距离平方和(图中红色线段的平方的和)
\[ \text{RSS}(a,b) = \sum_{i=1}^n(y_i - (ax_i+b))^2\]
是最小的。
![linreg1.png][4]
但是,直接分析这个 RSS 函数比较困难,这时就能用到矩阵的强大表达力了,我们可以把这个公式写为矩阵的形式。设·
\[ \mathbf X = \begin{bmatrix} 1 & x_1 \\ 1 & x_2 \\ \vdots & \vdots \\ 1 & x_{n} \end{bmatrix} \]
和
\[ \mathbf y = \begin{bmatrix} y_1 \\ \vdots \\ y_n \end{bmatrix} \]
以及
\[ \beta = \begin{bmatrix} a \\ b \end{bmatrix}, \]
上面的公式可以被转写为矩阵形式
\[ \text{RSS}(\beta) = (\mathbf y - \mathbf X \beta)^{\mathsf T} (\mathbf y - \mathbf X \beta). \]
然后通过矩阵微积分的方法可以推导出,当
\begin{equation} \beta = (\mathbf X ^{\mathsf T} \mathbf X)^{-1} \mathbf X^{\mathsf T} \mathbf y \end{equation}
时,RSS 的值是最小的,它给我们下图中的这条绿线。
![linreg2.png][5]
当然,线性回归的公式 (1) 不仅仅适用于二维空间中,如果我们有更高维的数据点
\[ \{ (x_{1,1}, x_{1,2}, \dots, x_{1,k}, y_1), (x_{2,1}, x_{2,2},\dots , x_{2,k}, y_2), \dots , (x_{n,1}, x_{n,2}, \dots, x_{n,k}, y_n) \}, \]
并想找到一条直线
$ y = a_0 + a_1x_1 + a_2 x_2 + \dots + a_k x_k $
来拟合这组高维的数据,等式 (1) 的结论同样适用,只不过矩阵 $\mathbf X$ 会更大,有 $k+1$ 列,相应的 $\beta = (a_0, a_1, \dots, a_k)$ 长度为 $k+1$。值得强调的是,如果没有矩阵的表述方法,公式 (1) 将会是不可想象的复杂,我们有这样简短的表达式全归功于矩阵的简便性。
\[ \]
### MPT 资产配置
在[现代资产配置理论(MPT)](https://www.joinquant.com/post/1991?f=study&m=financial)的模型中,假设有风险资产 $i = 1,2,\dots, n$,对应收益的随机变量 $r_i$。对于一个权重向量 $\mathbf w = (w_1, \dots, w_n)$,这个向量对应的组合有收益率和方差
\begin{align*}
\mathbb E[r_{\mathbf w}] & = \sum_{i=1}^n w_i \mathbb E[r_i]\\
\text{Var}[r_{\mathbf w}] & = \sum_{i=1}^n \sum_{j=1}^n w_i w_j \text{Cov}(r_i, r_j).
\end{align*}
所有这些资产组合的期望和标准差放到坐标图上构成一个子弹状的图像
![mpt1.jpg][6]
所有这些点在最左端勾勒出的曲线叫做[有效前沿](https://www.joinquant.com/post/1991?f=study&m=financial),是给定一个收益率能找到的风险最小的组合,这条曲线对于资产配置理论有着至关重要的意义,而计算出这条曲线就需要矩阵的帮助。定义**协方差矩阵**
\[ \pmb \Sigma = \begin{bmatrix} \text{Cov}(r_1, r_1) & \text{Cov}(r_1, r_2) & \dots & \text{Cov}(r_1, r_n) \\ \text{Cov}(r_2, r_1) & \text{Cov}(r_2, r_2) & \dots & \text{Cov}(r_2, r_n) \\ \vdots & \vdots & \ddots & \vdots \\ \text{Cov}(r_n, r_1) & \text{Cov}(r_n, r_2) & \dots & \text{Cov}(r_n, r_n) \end{bmatrix} \]
以及
\[ \mathbf r = \begin{bmatrix} \mathbb E[r_1] \\ \mathbb E[r_2] \\ \vdots \\ \mathbb E[r_n] \end{bmatrix},\ \mathbf 1_n = \begin{bmatrix} 1 \\ 1 \\ \vdots \\ 1 \end{bmatrix}. \]
通过[拉格朗日乘子](https://www.joinquant.com/post/3796?f=study&m=math),可以算出,设
\[ a = \mathbf r^{\mathsf T}\pmb \Sigma ^{-1} \mathbf r,\ b = \mathbf 1_n ^{\mathsf T} \pmb \Sigma ^{-1} \mathbf r , \ c = \mathbf 1_n ^{\mathsf T} \pmb \Sigma ^{-1} \mathbf 1_n,\]
可以算出有效前沿的曲线
\[ \sigma (\mu ) = \sqrt{\frac{1}{ac-b^2} (c\mu ^2 - 2b \mu +a)}, \]
根据这个公式可以画出有效前沿的曲线
![mpt2.png][7]
\[ \]
### Markov 链
Markov 链是随机过程的一种,在这个链中每个时间点出现某种状态的概率取决于上一个时间的状态。比如,我们假设股市的涨跌符合 Markov 链的模型,将每天涨跌的状态分为“涨”、“平”、“跌”三种。“涨”代表当天涨幅 $1\%$ 以上,“跌”代表当天跌幅 $1\%$ 以上,当涨跌在正负 $1\%$ 之内时视为“平”。通过统计,我们得出下述概率关系:
![MC.jpg][8]
在这个表中,从一个状态到另一个状态的数字代表从今天状态到明天状态的概率,比如说,如果今天涨,那么明天继续涨的概率是 $28\%$,如果今天跌,那么明天平的概率是 $51\%$。考虑这么一个问题,如果当前的状态是“涨”,那么 $2$ 天后状态的概率分布是什么?
解决这个问题需要使用转移矩阵,这个矩阵的第 $i$ 列的第 $j$ 个数就是从状态 $i$ 到状态 $j$ 的概率,如下
![mat.jpg][9]
想计算 $2$ 天后的状态概率,我们取转移矩阵的 $2$ 次方
\[ T_2 = T^2 = \begin{bmatrix} 0.2344 & 0.2312 & 0.2392 \\ 0.5838 & 0.583 & 0.5778 \\ 0.1818 & 0.1858 & 0.183 \end{bmatrix}, \]
从第一列(也就是对应着“涨”的那里一列)读出来,如果今天是“涨”,那么两天后有 $23.44\%$ 的概率是涨,$58.38\%$ 会平,另有 $18.18\%$ 会跌。
那如果是 $250$ 天之后呢?我们取转移矩阵的 $250$ 次方。这个运算虽然对于人脑来说有点大,但用计算机来算还是很快的,
\[ T_{250} = T^{250} \approx \begin{bmatrix} 0.2334& 0.2334 & 0.2334 \\ 0.5822 & 0.5822 & 0.5822 \\ 0.1843 & 0.1843 & 0.1843 \end{bmatrix}. \]
这个矩阵的三列的的数都是一样的,理解起来也很直观,由于时间隔得太过久远,具体今天是什么状态对 $250$ 天后的状态已经没有什么影响了,这个矩阵的一列代表的就是三种状态整体的分布,也就是说在整体上,每一天都有 $23.34\%$ 的概率是涨,$58.22\%$ 概率平,$18.43\%$ 的概率跌。\\
有些时候转移矩阵不一定收敛得这么快(尤其是状态很多矩阵很大的情况下),可能计算出 $T^{1000}$ 发现每列之间的的差别还是比较大,而我们又想知道几种状态无条件的概率分布,那么就需要计算转移矩阵幂的极限
\[ T_\infty = \lim _{k \to \infty} T^k. \]
这个看起来可能无从下手,但通过对角化的方法可以解决这个问题,即把 $T$ 分解为
\[ T = PD P^{-1} , \]
这里 $P$ 是一个可逆矩阵,$D$ 是一个对角矩阵,它在对角线上的值是 $T$ 的特征值,即
\[ D = \begin{bmatrix} \lambda_1 & 0 & \dots & 0 \\ 0 & \lambda_2 & \dots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \dots & \lambda_n \end{bmatrix}, \]
要注意的是这些特征值 $\lambda$ 不一定是实数,有可能是复数。在这个表示下,$T$ 的次方的极限可以写为
\begin{align*}
\lim _{k \to \infty} T^k & = \lim_{k \to \infty} (P D P^{-1}) ^k\\
& = \lim _{k \to \infty} P D^k P^{-1}\\
& = \lim _{k \to \infty} P \begin{bmatrix} \lambda_1^k & 0 & \dots & 0 \\ 0 & \lambda_2^k & \dots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \dots & \lambda_n^k \end{bmatrix} P^{-1}.
\end{align*}
如果 $|\lambda _m|<1$ 那么 $\lambda _m ^k \to 0$,如果 $|\lambda _m|=1$ 但是 $\lambda _m \ne 1$ 那么 $\lambda _m^k$ 不会收敛,如果 $\lambda _m = 1$ 那很显然 $\lambda _m^k = 1 \to 1$,而由于 $T$ 的每一列加和都是 $1$ 它的特征值不可能有 $|\lambda _m| > 1$。根据这个观测,计算对角矩阵次方的极限 $\lim_{k \to \infty} D^k$ 就很简单了,相应地 $T^k$ 的极限也就计算出来了。
比如说,通过特征值和特征向量的分析,上面例子中的转移矩阵可以写为
\[ T = P D P^{-1}\]
这里
\[ P \approx \begin{bmatrix} 0.3570 & 0.6667 & 0.6667 \\ 0.8905 & -0.4167-0.3997i & -0.4167+0.3997i \\ 0.2820 & 0.2500+0.3997i & 0.2500 - 0.3997i \end{bmatrix}, \]
\[ D \approx \begin{bmatrix} 1 & 0 & 0 \\ 0 & 0.05 + 0.0480i & 0 \\ 0 & 0 & 0.05 - 0.0480i \end{bmatrix}, \]
根据上面的结论,
\[ \lim _{k \to \infty} T^k = P \begin{bmatrix} 1 & 0 & 0 \\ 0 & 0 & 0 \\ 0 & 0 & 0 \end{bmatrix}P^{-1} \approx \begin{bmatrix} 0.2334& 0.2334 & 0.2334 \\ 0.5822 & 0.5822 & 0.5822 \\ 0.1843 & 0.1843 & 0.1843 \end{bmatrix}, \]
这和之前计算的 $T^{250}$ 是吻合的。
\[ \]
### 多元正态分布
正态分布是概率论和统计学中最最最重要的概率分布。一个均值为 $\mu$ 方差为 $\sigma ^2$ 的正态分布函数是
\[ \mathcal N(x \mid \mu , \sigma ^2) = \frac{1}{(2 \pi \sigma ^2)^{1/2}} \exp \left( -\frac{1}{2\sigma ^2} (x - \mu) ^2\right) .\]
但是现实中很多数据不是一维的,而是多元的,这就要用到多元的正态分布。对于一列长度为 $d$ 的均值向量 $\pmb \mu \in \mathbb R^d$ 和协方差矩阵 $\pmb \Sigma$,相应的多元正态分布函数是
\[ \mathcal N (\mathbf x \mid \pmb \mu , \pmb \Sigma) = \frac{1}{(2\pi)^{d/2}} \frac{1}{| \pmb \Sigma | ^{1/2} } \exp \left( - \frac{1}{2} (\mathbf x - \pmb \mu)^{\mathsf T} \pmb \Sigma ^{-1} (\mathbf x - \pmb \mu) \right) \]
举例来说,下面展示的就是两个二元正态分布。
![normal1.png][10]
![normal2.png][11]
这两个二元正态分布的每一个变量都是 $\mathcal N(0,1)$ 的正态分布,但是放到一起的二元分布的热力图却截然不同。这两个二元分布的差别就在于它们的协方差矩阵 $\pmb \Sigma$,通过研究这个矩阵可以分析出多元正态分布形状。一个 $n \times n$ 协方差矩阵一个重要的特性就是 $\pmb \Sigma$ 是正定矩阵,它有一个正交的特征向量基 $\{\mathbf u_1, \mathbf u_2, \dots, \mathbf u_n \}$,每个 $u_i$ 对应特征值
$\lambda _i$,也就是说 $\pmb \Sigma \mathbf u_i = \lambda _i \mathbf u_i$ 并且 $\{ \pmb u_i : i = 1,\dots, n \}$ 是 $\mathbb R^n$ 的一个基,并且当 $i \ne j$ 时有 $\mathbf u_i^\mathsf T \mathbf u_j=0$。
对于一个分布 $\mathcal N (\pmb \mu, \pmb \Sigma)$,和某个 $0<y<1$,它的同概率轮廓为
\[ C_y = \{ \mathbf x \in \mathbb R^n: \mathcal N(\mathbf x \mid \pmb \mu , \pmb \Sigma) = y \}. \]
这个轮廓是一个椭圆体,椭圆体的中心是 $\pmb \mu$,它的 $n$ 个主轴的方向是
\[ \{\pmb \mu + t \mathbf u_i: t \in \mathbb R\} \]
分别对应 $i = 1,2,\dots, n$,并且主轴的长度分别是 $t \lambda _i$ 对于某个 $t > 0$。
比如说,上面第一个图中的分布的协方差矩阵是
\[ \pmb \Sigma = \begin{bmatrix} 1 & 0.9 \\ 0.9 & 1 \end{bmatrix}, \]
这个矩阵的特征值是 $1.9$ 和 $-0.1$,分别对应特征向量
\[ \begin{bmatrix} 1 \\ 1 \end{bmatrix} \text{ 和 } \begin{bmatrix} 1 \\ -1 \end{bmatrix}. \]
那么这个分布的同概率椭球的主轴分别在 $(1,1)$ 和 $(-1, 1)$ 的方向,长度分别是 $1.9t $ 和 $0.1t$,如下图所示。
![normal3.png][12]
通过对正定矩阵的分析,我们可以对联合正态分布的同概率椭球有清晰的认识,这对这些分布的分析起到很大作用。
\[ \]
### 结语
不学好线性代数是无法在这个世界生存下去的。
\[ \]
```
本文由JoinQuant量化课堂推出,版权归JoinQuant所有,商业转载请联系我们获得授权,非商业转载请注明出处。
文章迭代记录
v1.0,2017-09-09 文章上线
```
[1]: https://image.joinquant.com/63bffd9745e979c659bf011608161bf5
[2]: https://image.joinquant.com/e6efc5e5f52d352265f97ae8fbfb33b3
[3]: https://image.joinquant.com/c250dc8019c45c8094506b35307a4181
[4]: https://image.joinquant.com/8cc391707b6d333f2e16cbcd478e7fcd
[5]: https://image.joinquant.com/19bccaa7286030730e7923d5a6899226
[6]: https://image.joinquant.com/8223c15b963bda0c60366402ca6339b4
[7]: https://image.joinquant.com/8cbd3f809c90a6e639567bce82cc7664
[8]: https://image.joinquant.com/8352f1e576884756410fa57776de37df
[9]: https://image.joinquant.com/34179248cb7e3bf9e76f98a1ac01c2a0
[10]: https://image.joinquant.com/718753840148dac772b727cf984122e4
[11]: https://image.joinquant.com/0af7656380f74bcb4c3bc0193fff1c6a
[12]: https://image.joinquant.com/bcca378deab5ca771c71d2bfc7aa8966
马克!
扯句题外话,鸡兔同笼至今看到最科学的解法还是假设动物训练有素,吹一声哨抬一只脚,鸡的脚抬完了剩下的脚数量除以2就是兔子数量23333(大误)
2017-09-11
当然,学好线性代数式最基础的,你还要学好一堆数学,你要懂应用最多的概率论方面的知识(注意不是简单的古典概率),你先得学实变函数、傅里叶分析吧?接着泛函分析你得学吧,之后你才学得会随机过程里头一堆复杂的理论。你要是小打小闹可以跳过,直接开整,但我可以保证你会死的很惨。但是你学好了,你也用不好,生活就是这么无奈┓( ´∀` )┏
2017-09-19
一个毕业多年,工科专业的人,表示看起来,还真很吃力
2017-09-20
这贴太赞了. 一下把线代和机器学习 量化的关系一目了然, 感谢!!! 希望这样的贴子越来越多
2017-09-25
矩阵是怎么算的都忘了,当年就没认真学这块。没想到这块对机器学习等领域很重要。。
2017-09-25
最后是不是笔误了呀,特征值是0.1而不是-0.1,毕竟正定矩阵的特征值应该都为正实数吧
2017-09-30
不学好线性代数是无法在这个世界生存下去的。
赞最后一句
2018-06-25