如何理解线性回归?
下面是机器学习的《监督式学习》课程的一篇试读文章,进行了一下重新排版,然后展示在这里。由于格式的限制,缺少了一些习题、可运行的代码、证明、注释等,可能会导致解释差强人意,所以介意的同学可以直接访问 线性回归与最小二乘,以获得最佳的阅读体验。
回归大致可以理解为根据数据集
,拟合出近似的曲线,所以回归也常称为拟合(Fit),像下列右图一样拟合出来是直线的就称为 线性回归:
下面就来解释其中的一些细节。
1.1 均值回归
“回归”这个词源于弗朗西斯·高尔顿爵士(英文:Sir Francis Galton,1822年2月16日-1911年1月17日):
他发现高个子父亲的儿子身高会矮一些,而矮个子父亲的儿子身高会高一些(否则高个子家族会越来越高,而矮个子家族会越来越矮),也就是说人类的身高都会回到平均值附近,他将这种现象称为 均值回归 。
1.2 线性回归
高尔顿的研究过程用现在的数学语言来表述就是,首先对一些父子的身高进行了抽样,得到数据集
;然后根据数据集拟合出一条直线;最后通过该直线就可以对某父亲
的儿子的身高进行预测了:
高尔顿拟合的直线方程为(单位为米):
将方程和
联立,可得:
也就是说这两条直线会交于点 (1.77, 1.77),这说明身高低于1.77米的父亲,他的儿子身高会高一些;而高于1.77米的父亲,他的儿子身高会矮一些:
所以这条拟合出来的直线,其实就表示了均值回归现象,因此拟合直线的过程被称为 线性回归(Linear Regression)。
2.1 假设空间
首先肯定是用直线来进行拟合:
所以假设空间为:
和感知机的假设空间差不多,只是少了
函数。
2.2 数据集
在历史上,高尔顿总共采集了近千个父子身高的数据来拟合。本课为了方便讲解,我们从中抽取了六个(原始数据的单位是“英寸”,这里全部转为了“米”)作为数据集
:
2.3 经验误差
随便找一条假设空间中的直线
,对于某父亲身高
,该直线给出的
和真实的儿子身高
是存在距离的,这个距离也称为点与直线的误差,高尔顿用两者差的平方来表示
:
中所有点与该直线的误差加起来,再进行算术平均就是该直线在数据集
上的经验误差:
表示该数据集的大小。
中挑选离
最近的
作为
:
具体到线性回归中,其经验误差函数为:
根据经验误差最小原则,只需要求出使得该经验误差函数取得最小值的
和
:
实际上就得到了离
最近的
,本节就来介绍如何求解
和
。
3.1 凸函数
首先,将手上的数据集
:
代入线性回归的经验误差函数后可得:
可见
是关于
和
的函数,并且是 凸函数(Convex Function)。凸函数意味着画出来看上去像山谷:
3.2 凸函数的最小值
就如山谷肯定有最低点一样,凸函数肯定有最小值,这说明最小值是一定存在的。并且凸函数更重要的性质是,使得经验误差函数
取得最小值的
和
,可以通过求解下面方程组得到:
因为线性回归的经验误差函数
是平方之和,所以本节介绍的求解该经验误差函数的最小值的方法被称为 最小平方法 ,国内各种教材中也常称为 最小二乘法 。
和
:
from sympy import symbols, diff, solve
import numpy as np
# 数据集 D
X = np.array([1.51, 1.64, 1.6, 1.73, 1.82, 1.87])
y = np.array([1.63, 1.7, 1.71, 1.72, 1.76, 1.86])
# 构造经验误差函数
w, b = symbols('w b', real=True)
RDh = 0
for (xi, yi) in zip(X, y):
RDh += (yi - (xi*w + b))**2
RDh *= 1/len(X)
# 对 w 和 b 求偏导
eRDhw = diff(RDh, w)
eRDhb = diff(RDh, b)
# 求解方程组
ans = solve((eRDhw, eRDhb), (w, b))
print('使得经验误差函数 RD(h) 取最小值的参数为:{}'.format(ans))
上面代码运行后,可以解出
以及
,得到的结果和高尔顿几乎一样:
我们通过通俗易懂、图形化的方式,对机器学习中的《监督式学习》进行了精讲,目前还在连载中,可以享受早鸟价格,可以点击下面的链接购买:
👉 也可以直接点击下面这个图片购买机器学习的前置课程,《线性代数》、《单变量微积分》、《多变量微积分》、《概率论与数理统计》:
最易懂的数学知识库:
马同学高等数学
看图学数学
微信公众号ID :matongxue314