线性回归是统计学中最基础的数学模型,几乎各个学科的研究中都能看到线性回归的影子,比如量化金融、计量经济学等;当前炙手可热的深度学习也一定程度构建在线性回归基础上。因此,每个人都有必要了解线性回归的原理。
线性回归对已有数据进行建模,可以对未来数据进行预测。有些人觉得线性回归太过简单,甚至不屑于称之为机器学习;另外一些人觉得很多编程库已经对线性回归做了封装,使用时调用一下函数就好,不必了解太多数学推导过程。实际上,线性回归是所有机器学习技术的一个最好起点,很多复杂的机器学习技术以及当前大火的深度神经网络都或多或少基于线性回归。
机器学习建模过程
机器学习最常见的场景是监督学习:给定一些数据,使用计算机学习到一种模式,然后用它来预测新的数据。一个简单的监督学习任务可以表示为,给定N个两两数据对 ( x i , y i ) i = 1 N (x_i, y_i)_{i=1}^N (xi,yi)i=1N,使用某种机器学习模型对其进行建模,得到一个模型(model),其中某个给定的数据对为样本(sample), x x x 为特征(feature), y y y 为真实值(label)。
例如,上图展示了收入数据集展示了受教育程度与年度收入之间的数据。根据我们的社会经验和图中的数据分布,我们觉得能使用一个直线来描述“收入会随着受教育时间的增多而增多”的现象。所以针对这个数据集,可以使用一个最简单的机器学习模型——一元线性回归。
一元线性回归
y = m x + b (0) y = mx + b \tag{0} y=mx+b(0)
中学时,我们经常使用上面的方程来解一些数学问题,方程描述了变量 y y y 随着变量 x x x 而变化。方程从图形上来看,是一条直线。如果建立好这样的数学模型,已知 x x x 我们就可以得到预测的 y ^ \hat{y} y^ 了。统计学家给变量带上了一个小帽子,表示这是预测值,以区别于真实观测到的数据。方程只有一个自变量 x x x,且不含平方立方等非一次项,因此被称为一元线性方程。
在对收入数据集进行建模时,我们可以对参数m
和b
取不同值来构建不同的直线,这样就形成了一个参数家族。参数家族中有一个最佳组合,可以在统计上以最优的方式描述数据集。那么监督学习的过程就可以被定义为:给定N个数据对$ (x, y)$,寻找最佳参数 m ∗ m^* m∗ 和 b ∗ b^* b∗,使模型可以更好地拟合这些数据。
上图给除了不同的参数,到底哪条直线是最佳的呢?如何衡量模型是否以最优的方式拟合数据呢?机器学习用损失函数(loss function)的来衡量这个问题。损失函数又称为代价函数(cost function),它计算了模型预测值ŷ
和真实值y
之间的差异程度。从名字也可以看出,这个函数计算的是模型犯错的损失或代价,损失函数越大,模型越差,越不能拟合数据。统计学家通常使用 L ( y ^ , y ) L(\hat{y}, y) L(y^,y)来表示损失函数。
对于线性回归,一个简单实用的损失函数为预测值与真实值误差的平方。上图展示了收入数据集上预测值与真实值之间的误差。
L ( y i ^ , y i ) = ( y i ^ − y i ) 2 (1) L(\hat{y_i}, y_i) = (\hat{y_i} - y_i)^2 \tag{1} L(yi^,yi)=(yi^−yi)2(1)
公式1来表示单个样本点上预测值与真实值的误差。
L ( y ^ , y ) = 1 N ∑ i = 1 N ( y i ^ − y i ) 2 (2) L(\hat{y}, y) = \frac{1}{N} \sum_{i=1}^N(\hat{y_i}- y_i)^2 \tag{2} L(y^,y)=N1i=1∑N(yi^−yi)2(2)
L ( y ^ , y ) = 1 N ∑ i = 1 N [ ( m x i + b ) − y i ] 2 (3) L(\hat{y}, y) =\frac{1}{N} \sum_{i=1}^N[(mx_i + b) - y_i]^2 \tag{3} L(y^,y)=N1i=1∑N[(mxi+b)−yi]2(3)
公式2表示将数据集的所有误差求和取平均,再在其基础上代入公式 y ^ = m x + b \hat{y}=mx + b y^=mx+b,得到公式3。
m ∗ , b ∗ = arg min m , b L ( m , b ) = arg min m , b 1 N ∑ i = 1 N [ ( m x i + b ) − y i ] 2 (4) m^*, b^* = \mathop{\arg\min}_{m, b}L(m, b) = \mathop{\arg\min}_{m, b}\frac{1}{N}\sum_{i=1}^N[(mx_i + b) - y_i]^2 \tag{4} m∗,b∗=argminm,bL(m,b)=argminm,bN1i=1∑N[(mxi+b)−yi]2(4)
公式4中arg min
是一种常见的数学符号,表示寻找能让L
函数最小的参数m*
和b*
。
误差从图形上看是一条线段,平方后就形成了一个正方形,将正方形的面积求和再取平均,就是公式3的损失函数。所有的正方形的平均面积越小,损失越小。对于给定数据集,x
和y
的值是已知的,参数m
和b
是需要求解的,模型求解的过程就是解公式4的过程。以上就是最小二乘法的数学表示,“二乘”表示取平方,“最小”表示损失函数最小。至此我们发现,有了损失函数,机器学习的过程被化解成对损失函数求最优解过程,即求一个最优化问题。
那为什么只能用取平方,不能用别的办法,比如取绝对值呢?中学的时候学过,平方函数有最小值,能保证后面求解参数的时候,用求导的方式快速找到最小值,而绝对值函数则不具有这个属性。
最小二乘法参数求解
对于公式4中的函数,可以对m
和b
分别