之前在“为什么学习线性代数”中宽泛地谈过我们需要矩阵的原因,本文这里再介绍一个我们课程《监督式学习》中通过矩阵来提升运算效率的例子。
先简单介绍下,之前在“如何理解线性回归”中介绍过线性回归的方法(简称为“老方法”),当特征较多时老方法效率很低(比如下文会提到的波士顿房价数据集),修改为矩阵算法之后效率会提高非常多倍:
下面就来解释其中的细节,文中有一些复杂的公式,忽略应该也不会影响理解大意。
既然是和老方法比较,那么先简单复述下“如何理解线性回归”中介绍的老方法,需要了解细节的可以点击该链接回看。如果知道的可以跳到下一节“效率问题”。
首先,回归就是根据数据集
比如父子身高数据集
我们通过最小二乘法来拟合直线,即假设要求的直线为
将数据集
然后通过求该经验误差的最小值来拟合直线,即通过解下面方程组求出直线的参数:
根据上面描述的数学原理,可以借助 Python 来求出 w 和 b:
上面代码运行后,可以解出
上面的数据集
比如在 sklearn 中,有一个美国人口普查局收集的美国马萨诸塞州波士顿公寓价格的数据集:
该数据集总共有 506 条数据,每条数据对应一所房屋,每所房屋包含 13 个特征,标签是各个房屋的价格。下面展示该数据集的前五条(前面 13 列为特征,最后 1 列为价格):
别管这些特征具体是什么,当尝试在该数据集
你会发现
此时光是通过 sympy 构造经验误差函数
更不要说之后求偏导、解方程组了。所以需要寻找对于计算机来说更高效的算法。
上面解释了,通过解下列方程组来完成线性回归实在太低效了:
如果引入矩阵,可以将上面方程组的求解等价地转换为如下形式(其中
矩阵算法非常高效,可以轻松完成对波士顿房价数据集的线性回归:
上面代码求出来的
从上表中可以看出,对房价正面影响最大的是 RM(每处住房的平均房间数)以及 CHAS(是否在查理斯河边),负面影响最大的则是 NOX (一氧化氮浓度,即空气质量),这都符合我们对房屋价格的直觉。