线性回归 – 原理
线性回归 –python 实现(不使用框架)
线性回归 –sklearn 框架实现
通常我们学习机器学习都是从线性回归模型开始的。线性回归模型形式简单、易于建模,但是我们可以从中学习到机器学习的一些重要的基本思想。
回归一词的由来:这个术语是英国生物学家兼统计学家高尔顿在 1886 年左右提出来的。人们大概都注意到,子代的身高与其父母的身高有关。高尔顿以父母的平均身高 X 作为自变量,其一成年儿子的身高 Y 为因变量。他观察了 1074 对父母及其一成年儿子的身高,将所得 (X, Y) 值标在直角坐标系上,发现二者的关系近乎一条直线,总的趋势是 X 增加时 Y 倾向于增加,这是意料中的结果. 有意思的是, 高尔顿对所得数据做了深入一层的考察,而发现了某种有趣的现象。
高尔顿算出这 1074 个 X 值的算术平均为 68 英寸(1 英寸为 2.54 厘米),而 1074 个 Y 值的算术平均为 69 英寸,子代身高平均增加了 1 英寸,这个趋势现今人们也已注意到。以此为据,人们可能会这样推想:如果父母平均身高为 a 英寸,则这些父母的子代平均身高应为 a + 1 英寸,即比父代多 1 英寸。但高尔顿观察的结果与此不符,他发现:当父母平均身高为 72 英寸时,他们的子代身高平均只有 71 英寸, 不仅达不到预计的 72+1=73 英寸,反而比父母平均身高小了。反之, 若父母平均身高为 64 英寸,则观察数据显示子代平均身高为 67 英寸,比预计的 64+1=65 英寸要多。
高尔顿对此的解释是:大自然有一种约束机制,使人类身高分布保持某种稳定形态而不作两极分化。这就是种使身高“回归于中心“的作用。例如,父母身高平均为 72 英寸,比他们这一代平均身高 68 英寸高出许多,“回归于中心”的力量把他们子代的身高拉回来些:其平均身高只有 71 英寸,反比父母平均身高小,但仍超过子代全体平均 69 英寸。反之,当父母平均身高只有 64 英寸,远低于他们这代的平均值 68 英寸时,“回归于中心”的力量将其子代身高拉回去一些,其平均值达到 67 英寸,增长了 3 英寸,但仍低于子代全体平均值 69 英寸。
正是通过这个例子,高尔顿引人了“回归”这个名词。
线性回归的模型形如:
线性回归得出的模型不一定是一条直线,在只有一个变量的时候,模型是平面中的一条直线;有两个变量的时候,模型是空间中的一个平面;有更多变量时,模型将是更高维的。
线性回归模型有很好的可解释性,可以从权重 W 直接看出每个特征对结果的影响程度。
线性回归适用于 X 和 y 之间存在线性关系的数据集,可以使用计算机辅助画出散点图来观察是否存在线性关系。例如我们假设房屋价格和房屋面积之间存在某种线性关系,画出散点图如下图所示。
看起来这些点分布在一条直线附近,我们尝试使用一条直线来拟合数据,使所有点到直线的距离之和最小。实际上,线性回归中通常使用残差平方和,即点到直线的平行于 y 轴的距离而不用垂线距离,残差平方和除以样本量 n 就是均方误差。均方误差作为线性回归模型的代价函数(cost function)。使所有点到直线的距离之和最小,就是使均方误差最小化,这个方法叫做最小二乘法。
代价函数:
其中,
下面求使 J 最小的 W 和 b:
1. 偏导数法
偏导数法是非常麻烦的,需要一个一个地计算 w。为了方便,这里以单变量线性回归为例。
2. 正规方程法
正规方程使用矩阵运算,可以一次求出 W 向量。但是当变量 (feature) 个数大于数据个数时,会导致 xTx 不可逆,这时候就不能用此方法了。
使用正规方程法,如果希望得到的模型带有偏置项 b,就要先给数据集 X 增加全为 1 的一列,这样才会把 b 包含在 W 中;如果不添加,那么模型是强制过原点的。
3. 梯度下降
这里的代价函数 J 的海森矩阵 H 是半正定的,因此 J 一定有全局最小值,所以也可以使用梯度下降法来求解。梯度下降法是一种迭代解法,不仅可以求解最小二乘问题,也适用于其它代价函数的问题。但是需要设置学习率 α,α 设置的过大或过小,都不能很好地训练出模型,而且梯度下降法需要对数据集进行特征缩放。一般会在数据集特别大的时候或者 xTx 不可逆的时候使用梯度下降法,后面再做介绍。
4. 其他
还有一些方法就不一一列举了。例如奇异值分解,QR 分解,乔姆斯基分解等等。
计算出的模型如下图。
再放一个两个变量的情况的,如下图。