一元线性回归
回归主要用于预测数值型数据,根据观测到的数据设计一种模型,描述数据之间蕴含的关系。
回归的典型例子,就是通过给定的数据点拟合出最优的曲线,在这个例子中面积和房价之间的关系可以近似地表示成一根直线,因此这种模型被称为线性回归,在这个模型中只包含一个自变量x,因此这种线性回归模型被称为一元线性回归。
在一元线性回归模型y=wx+b
中,x称为模型变量,w和b称为模型参数,其中w为权重,b为偏置值。
我们要解决的问题就是如何根据样本数据来确定模型参数,w和b呢,
假设有n组样本( x 1 x_1 x1, y 1 y_1 y1), ( x 2 x_2 x2, y 2 y_2 y2), …( x i x_i xi, y i y_i yi), …( x n x_n xn, y n y_n yn),下标i是样本的序号, x i x_i xi是样本属性,例如房屋面积, y i y_i yi是样本标记,例如房屋价格。
对于平面中的这n个点可以有无数条直线来拟合它们,那么哪条直线拟合的最好呢?
假设这是其中的一条拟合直线,这条直线上的值称为估计值用
y
^
\hat{y}
y^表示。
例如这个点表示面积为86.21的房子实际销售的房价是95.3万元,而使用这条直线估计出来的房价是82.5万元左右,也就是说样本标签
y
i
=
95.3
y_i=95.3
yi=95.3,而模型估计值
y
^
i
=
82.5
\hat{y}_i=82.5
y^i=82.5,我们把样本点实际的标记值和预测值
y
^
\hat{y}
y^之间的误差称为拟合误差,也称为残差。
y ^ \hat{y} y^是直线上的点,因此值为 w x i + b wx_i+b wxi+b,把它带入残差公式,那么da个点的误差就是 y i − ( w x i + b ) y_i-(wx_i+b) yi−(wxi+b)综合所有的样本点来看最佳拟合直线应该使得所有样本总的拟合误差达到最小,也就是说最佳拟合直线应该使得所有点的残差累计值最小。
- 损失函数/代价函数
模型的预测值与真实值的不一致程度- 残差和最小
L o s s = ∑ i = 1 n ( y i − y i ^ ) = ∑ i = 1 n ( y i ^ − ( w x i + b ) ) Loss=\sum^n_{i=1}(y_i-\hat{y_i})=\sum^n_{i=1}(\hat{y_i}-(wx_i+b)) Loss=∑i=1n(yi−yi^)=∑i=1n(yi^−(wxi+b))
残差值是有符号的,在这条直线上方的点残差是正的,在这条直线下方的点残差是负的。如果将残茶简单的相加,那么正的残渣值和负的残渣值就会相互抵消,这样做的话有可能每个样本单独的残差都很大,而计算出来的残差的累计核却很小,这样的直线显然不满足我们的预期,因此损失函数的值应该是一个非负的数,那么我们很容易想到可以使用绝对值消除残差中符号的影响 - 残差绝对值和最小
L o s s = ∑ i = 1 n ∣ y i − y i ^ ∣ = ∑ i = 1 n ∣ y i ^ − ( w x i + b ) ∣ Loss=\sum^n_{i=1}|y_i-\hat{y_i}|=\sum^n_{i=1}|\hat{y_i}-(wx_i+b)| Loss=∑i=1n∣yi−yi^∣=∑i=1n∣yi^−(wxi+b)∣
使用残差绝对值的和作为损失函数,可以避免正负误差相互抵消的问题,但是求残差和最小是一个求最值的问题,在求函数的最值时,一般要进行求导运算,而绝对值是不利于求导运算的。 - 残差平方和最小
为了绝对值运算可以将这个公式中的绝对值改为平方,使得所有样本点的残差的平方和最小,这里增加了一个系数1/2,是考虑到对平方项求导后运算方便,这个Loss函数称为平方损失函数。
L o s s = 1 2 ∑ i = 1 n ( y i − y i ^ ) 2 = 1 2 ∑ i = 1 n ( y i ^ − ( w x i + b ) ) 2 Loss=\frac{1}{2}\sum^n_{i=1}(y_i-\hat{y_i})^2=\frac{1}{2}\sum^n_{i=1}(\hat{y_i}-(wx_i+b))^2 Loss=21∑i=1n(yi−yi^)2=21∑i=1n(yi^−(wxi+b))2
- 残差和最小
平方损失函数
平方损失函数不仅计算方便而且有非常好的几何意义,我们来放大这个图看一下,
A个样本点的坐标是 ( x i , y i ) (x_i, y_i) (xi,yi),通过直线模型估计出来的点坐标是 ( x i , y i ^ ) (x_i, \hat{y_i}) (xi,yi^),这是它们之间的欧式距离。平方损失函数中的每一项,其实反映的就是每个样本点和它的估计值之间的欧式距离的大小,因此,所找到的这条直线也就是总体上最接近这些点的直线。
损失函数的两个性质:
- 非负性:保证样本误差不会相互抵消
- 一致性:损失函数的值和误差变化一致,单调有界,而且收敛为0。
均方误差
L
o
s
s
=
1
2
n
∑
i
=
1
n
(
y
i
−
y
i
^
)
2
=
1
2
n
∑
i
=
1
n
(
y
i
^
−
(
w
x
i
+
b
)
)
2
Loss=\frac{1}{2n}\sum^n_{i=1}(y_i-\hat{y_i})^2=\frac{1}{2n}\sum^n_{i=1}(\hat{y_i}-(wx_i+b))^2
Loss=2n1∑i=1n(yi−yi^)2=2n1∑i=1n(yi^−(wxi+b))2
在实际的编程应用中,我们经常使用它来作为衡量误差的指标,基于均方误差最小化来进行的模型求解的方法,称为最小二乘法。最小二乘法的用途非常广泛,并不仅仅用于线性回归。在线性回归中最小二乘法就是试图找到一条直线,使所有样本到直线上的欧氏距离之和最小。
下面我们来看一下求解的过程。
L
o
s
s
=
1
2
∑
i
=
1
n
(
y
i
−
y
i
^
)
2
=
1
2
∑
i
=
1
n
(
y
i
^
−
(
w
x
i
+
b
)
)
2
Loss=\frac{1}{2}\sum^n_{i=1}(y_i-\hat{y_i})^2=\frac{1}{2}\sum^n_{i=1}(\hat{y_i}-(wx_i+b))^2
Loss=21∑i=1n(yi−yi^)2=21∑i=1n(yi^−(wxi+b))2
在模型求解阶段,所有的样本数据(
x
1
x_1
x1,
y
1
y_1
y1), (
x
2
x_2
x2,
y
2
y_2
y2), …(
x
i
x_i
xi,
y
i
y_i
yi), …(
x
n
x_n
xn,
y
n
y_n
yn)都是已知的模型参数,w和b是变化量,不同的取值,对应不同的直线。
现在需要确定w和b取值为多少时,可以使损失函数的取值达到最小。显然,这是一个求函数的最小值问题,我们知道极值点的偏导数必然为0,因此只要分别对w和b求偏导数就可以了。
这是对w求偏导数,这是对b求偏导数,让它们的结果等于0,求解这个方程组得到的w和b的值,就是使损失函数达到最小值的模型参数。
∂ L o s s ∂ x ∑ i = 1 n ( y i − b − w x i ) ( − x i ) = 0 \frac{\partial{Loss}}{\partial{x}}\sum^n_{i=1}(y_i-b-wx_i)(-x_i)=0 ∂x∂Loss∑i=1n(yi−b−wxi)(−xi)=0
∂ L o s s ∂ x ∑ i = 1 n ( y i − b − w x i ) ( − 1 ) = 0 \frac{\partial{Loss}}{\partial{x}}\sum^n_{i=1}(y_i-b-wx_i)(-1)=0 ∂x∂Loss∑i=1n(yi−b−wxi)(−1)=0
求解这个方程组并不困难,学习过高等数学的同学都应该能够做到,大家可以下去试一下,求解的过程不同,所得到的解的形式也可能不同,例如这就是我通过计算得到的两种结果,他们虽然形式上不同,实质上是等价的,可以通过等式变换得到。
显然右边这种形式看起来更加的简洁 ,在后面的实例中,我们也会采用这种解来编写程序这个求解的过程,是根据严格的公式推导和计算得到的,这样得到的姐解称为解析解。解析解是一个封闭形式的函数,给出任意的自变量,就可以通过严格的公式求出准确的因变量,因此解析解也被称为封闭解或者闭式解。