【初中生讲机器学习】10. 新手向,线性回归算法原理一篇吃透!

21 篇文章 6 订阅
15 篇文章 1 订阅

创建时间:2024-02-16
最后编辑时间:2024-02-17
作者:Geeker_LStar

你好呀~这里是 Geeker_LStar 的人工智能学习专栏,很高兴遇见你~
我是 Geeker_LStar,一名初三学生,热爱计算机和数学,我们一起加油~!
⭐(●’◡’●) ⭐ 那就让我们开始吧!

emm,其实最开始的更新计划是先把分类算法大概讲完再讲回归算法,but 在我开始学逻辑回归的时候我发现还是要从线性回归开始的。so 这一篇,线性回归启动!

一、预备知识

一些统计学概念

well,可以说回归模型背后都是统计学,所以我们需要先明确一些统计学概念。

1. 方差和标准差
嗯,这差不多是初二的知识了,公式直接贴在这里,其中 n 为样本总量,x 为样本平均值:
s 2 = ∑ i = 1 n ( x i − x ) 2 n s^2 = \frac{\sum_{i=1}^{n}(x_i-x)^2}{n} s2=ni=1n(xix)2

方差用于衡量一组数据的波动程度,方差越小,数据的波动程度越小,即数据越集中。

标准差就是方差的算数平方根即 s 2 \sqrt{s^2} s2 ,也被称为均方差。标准差的单位和原始数据的单位是一致的。

2. 正态分布
怎么说,正态分布是最简单同时用途最广的一种分布。

说它简单,是因为决定正态分布的只有两个因素——平均值和标准差
至于用途广泛,中心极限定理已经给出很好的说明了,同时正态分布的英文是 normal distribution,那可不就是 “正常” 嘛。

正态分布的概率密度函数(也即正态曲线的函数表达式)是:
f ( x ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 f(x)=\frac{1}{\sqrt{2\pi}\sigma}{\rm e}^{-\frac{(x-\mu)^2}{2\sigma^2}} f(x)=2π σ1e2σ2(xμ)2

的确它看着很复杂,但实际上决定这个函数的只有 μ μ μ σ σ σ

  • 平均值 μ μ μ:决定了正态分布的中心所在的位置,直观来看就是下图中最高的地方对应的横坐标。
    μ
  • 标准差 σ σ σ:决定了数据的离散程度 σ σ σ 越大,数据越离散,表现在图上就是更多的数据分布在距离中心比较远的位置上,图像会比较 “矮胖”。
    σ

关于正态分布,我会在各种分布(正态、二项、泊松等)那一篇里再详细说,在这里我们只需要知道正态分布图像的特征:

  1. 正态分布密度曲线呈钟型,中间高,两端低,关于 x = μ x=μ x=μ 对称,且当 x = μ x=μ x=μ 时, f ( x ) f(x) f(x)取得最大值 1 / ( 2 π σ ) 1/(\sqrt{2π} σ) 1/(2π σ)。这说明数据集中在平均值附近,距离平均值越近,数据分布越密集;距离平均值越远,数据分布越稀疏。
  2. 正态分布图像下方面积为 1,对应概率和为 1。
  3. 当固定 σ σ σ,改变 μ μ μ 的大小,图像的形状不变,只是沿着 x x x 轴做平移变换。
  4. 当固定 μ μ μ,改变 σ σ σ 的大小,图形的对称轴不变而形状在改变, σ σ σ 越大,图像越 “矮胖”, σ σ σ 越小,图形越 “瘦高”。

3. 随机扰动项
定义:随机扰动项是指包含在模型主要变量以外的信息,具有不确定性。
随机扰动项出现在获取数据的过程中(模型训练之前)。在获取数据的时候,我们不可能找全影响因变量(比如房价)的所有自变量,同时对于找到的自变量,在测量、观测等时候也会出现这样或那样的误差,这些都是不可避免的。这些随机的、不可预知、不可抗力的因素造成的偏差被称为随机扰动项

一般情况下,随机扰动项应该服从均值为 0,方差一致的正态分布。这挺好理解的,随机扰动项既然是随机的,那肯定得有正有负,并且总体上正的数量和正的大小应该和负的可以相互抵消,所以均值是 0;同时,既然是随机的,那我这 100 组数据的随机扰动项和那 1000 组数据的随机扰动项的波动程度(也就是方差)应该得差不多。
说白了,就是对称、均匀,否则就不是随机了。

4. 残差
定义:残差是模型预测值和实际值之间的差距。
残差出现在 “预测数据” 的过程中(模型训练的时候)。由于随机扰动项的存在等诸多因素,模型不可能是完全精确的,预测值和实际值之间一定存在差距,这个差距就是残差。

一般情况下,残差应该服从正态分布。

什么是线性回归

在第二篇中我讲过,回归算法的目的是 “寻找最优拟合”,它用于预测连续的变量,常用的性能评价指标有均方差,R 方等。
线性回归是一个统计学方法,它基于一个或多个自变量(预测变量)来预测因变量(目标变量)的值。 之所以被称为 “线性回归”,是因为这个算法默认自变量和因变量之间是线性相关的,也就是说,我们可以找到一条直线或一个超平面来拟合每一对(自变量,因变量)。

线性回归的使用条件

既然都叫线性回归了,那首要条件肯定是自变量和因变量之间呈线性相关

如何判断自变量和因变量之间是不是线性相关呢?我们可以绘制散点图,比如在下图中,左边的情况符合线性相关,中间和右边的则不符合。
线性相关
第二,如果有多个自变量(多重线性回归),自变量之间要满足彼此独立(相关系数最好不要超过 0.5)。也就是说给定任意两个自变量 A 和 B,它们之间不可以有线性关系,否则模型会出现多重共线性,变得不稳定。
岭回归是回归模型的一种,它专门负责处理自变量之间强相关的情况,so 关于多重共线性的详细分析及处理方法会在岭回归那一篇讲。

第三,不能出现离群值。直观来讲,线性回归的目的是拟合,如果某个值和其它值偏差过大,必然会对拟合直线造成较大的影响(表现在拟合直线为了 “照顾” 离群值而偏离正常值)。and,在后面讲完拟合直线的系数是如何确定的之后,会进一步理解这一条。

二、一元线性回归

一元线性回归是线性回归中最简单的形式,前面已经铺垫很多了,这里直接给出式子: y = k x + b y = kx+b y=kx+b,对没错就是熟悉的一次函数。

理论部分很多都在前面,我们现在通过一个实际的例子来看看一元线性回归是如何求解的。

例:为了测定刀具的磨损速度,我们做这样的实验:经过一定时间(如每隔 1h),测量一次刀具的厚度,得到一组实验数据如下:

顺序编号 i i i01234567
时间 t i / h t_i/h ti/h01234567
刀具厚度 y i / m m y_i/mm yi/mm27.026.826.526.326.125.725.324.8

嗯其实应该先画个图,看一下自变量和因变量之间是不是线性的,不过这里就省了()它俩确实是线性的(要不然我选这个例子干嘛)。

我们的目的就是找到 y y y t t t 之间的最优拟合线性函数关系(也就是刀具厚度和时间的经验公式),不妨先设它为 y = f ( t ) = a t + b , ( a 、 b ∈ R ) y= f(t) = at+b,(a、b ∈ R) y=f(t)=at+b,(abR)
最理想的情况当然是直线 y = a t + b y = at+b y=at+b 完美地正好经过这八个点,但是肯定不可能,因为(如果画出图的话)这八个点本来就不在一条直线上。
因此,我们只能尝试选取 a 、 b a、b ab,使得 f ( t ) = a t + b f(t) = at+b f(t)=at+b t 0 , t 1 , . . . , t 7 t_0, t_1, ..., t_7 t0,t1,...,t7 处的函数值与实际数据 t 0 , t 1 , . . . , t 7 t_0, t_1, ..., t_7 t0,t1,...,t7 相差都很小,也就是说,要使残差
y i − f ( t i ) , ( i = 0 , 1 , . . . , 7 ) y_i-f(t_i), (i=0,1,...,7) yif(ti),(i=0,1,...,7)都很小。

so,这怎么办捏。一个常见的想法是让所有残差的和,也就是
∑ i = 0 7 [ y i − f ( t i ) ] \sum_{i=0}^{7}[y_i-f(t_i)] i=07[yif(ti)]很小,来保证每个残差都很小。
不过,不难发现,这条路走不通,因为前面讲过,正常来说残差会有正有负,要是这么搞的话正负就抵消了,那我 1000+(-1000) 的偏差和还变成 0 了呢,可是残差还是很大的。

emm,那加个绝对值行不行呢??就是让 ∑ i = 0 7 ∣ y i − f ( t i ) ∣ \sum_{i=0}^{7}|y_i-f(t_i)| i=07yif(ti) 的值很小。理论上是可以的,不过上过初中的我们都知道,绝对值是个处理起来令人头疼的玩意,我们一般把他转换为平方再搞。

yesyes,正解来了,平方呀!平方也满足大于等于 0 的性质的。so,我们可以让
M = ∑ i = 0 7 [ y i − f ( t i ) ] 2 = ∑ i = 0 7 ∣ y i − ( a t i + b ) ∣ 2 M = \sum_{i=0}^{7}[y_i-f(t_i)]^2 = \sum_{i=0}^{7}|y_i-(at_i+b)|^2 M=i=07[yif(ti)]2=i=07yi(ati+b)2最小,来保证每一个残差都很小。(and,平方会放大 >1 的偏差,所以其实对于最小化来说还蛮有利的)
yes! 这种通过让残差平方和最小来确定系数的方法叫最小二乘法,在机器学习中十分常用。

好嘞,接下来我们就要来研究, a , b a, b a,b 取什么值的时候 M = ∑ i = 0 7 ∣ y i − ( a t i + b ) ∣ 2 M = \sum_{i=0}^{7}|y_i-(at_i+b)|^2 M=i=07yi(ati+b)2 最小,也就是 M ( a , b ) M(a, b) M(a,b) 最小。注意,这个时候的自变量可就不是 t t t 了喔,而是 a , b a, b a,b,这其实是个二元函数

嗯。。。(没有约束条件的)多元凸函数的最值问题(没错这是个凸函数,否则偏导还不太好搞),高数告诉我们,求它偏导就 ok 了,对 a a a 和对 b b b偏导都为 0 的点就是这个函数的最小值点。emm,其实严格来说这么求出来的是极值点而不是最值点,不过因为凸函数只有一个极值,so 极值肯定也就是它的最值咯~
嗯,SVM 理论那篇分析了条件极值的求解方法,即拉格朗日乘数法,而像这样的没有条件约束的多元函数的极值,一般偏导就 ok~,不过最值还是要再进一步分析的。

我们要的是: { M a ( a , b ) = 0 M b ( a , b ) = 0 \left\{\begin{matrix}M_a(a,b)=0 \\M_b(a,b)=0 \end{matrix}\right. {Ma(a,b)=0Mb(a,b)=0

写出偏导(偏导的求法就是把无关变量全部看成常数,只对要求导的那一个变量求导):
{ ∂ M ∂ a = − 2 ∑ i = 0 7 [ y i − ( a t i + b ) ] t i = 0 ∂ M ∂ b = ∑ i = 0 7 [ y i − ( a t i + b ) ] = 0 \left\{\begin{matrix}\frac{\partial M}{\partial a} = -2\sum_{i=0}^{7}[y_i-(at_i+b)]t_i = 0 \\\frac{\partial M}{\partial b} = \sum_{i=0}^{7}[y_i-(at_i+b)] = 0 \end{matrix}\right. {aM=2i=07[yi(ati+b)]ti=0bM=i=07[yi(ati+b)]=0

变个形:
{ ∑ i = 0 7 [ y i − ( a t i + b ) ] t i = 0 ∑ i = 0 7 [ y i − ( a t i + b ) ] = 0 \left\{\begin{matrix}\sum_{i=0}^{7}[y_i-(at_i+b)]t_i = 0 \\\sum_{i=0}^{7}[y_i-(at_i+b)] = 0 \end{matrix}\right. {i=07[yi(ati+b)]ti=0i=07[yi(ati+b)]=0

最后还是要转化为 y , a , b y, a, b y,a,b 之间的关系式的,so 把未知数 a , b a,b a,b 分离到同一边:
{ a ∑ i = 0 7 t i 2 + b ∑ i = 0 7 t i = ∑ i = 0 7 y i t i a ∑ i = 0 7 t i + 8 b = ∑ i = 0 7 y i \left\{\begin{matrix}a\sum_{i=0}^{7}t_i^2+b\sum_{i=0}^{7}t_i = \sum_{i=0}^{7}y_it_i \\a\sum_{i=0}^{7}t_i+8b = \sum_{i=0}^{7}y_i \end{matrix}\right. {ai=07ti2+bi=07ti=i=07yitiai=07ti+8b=i=07yi

okkkk 现在很明显能看出来,这是个二元一次方程组 y i , t i y_i, t_i yi,ti 都是已知的~我们列表来计算一下它们,然后带进去就 ok 啦!

t i t_i ti t i 2 t_i^2 ti2 y i y_i yi y i t i y_it_i yiti
0027.00
1126.826.8
2426.553.0
3926.378.9
41626.1104.4
52525.7128.5
63625.3151.8
74924.8173.6
合计28140208.5717.0

ok 啊,带回原方程组,得到:
{ 140 a + 28 b = 717 28 a + 8 b = 208.5 \left\{\begin{matrix}140a+28b = 717 \\ 28a+8b = 208.5 \end{matrix}\right. {140a+28b=71728a+8b=208.5

完美,把它解出来,我们得到 a = − 0.3036 , b = 27.125 a = -0.3036, b=27.125 a=0.3036,b=27.125,那么我们的线性回归方程就是:
y = f ( t ) = − 0.3036 t + 27.125 y=f(t)=-0.3036t+27.125 y=f(t)=0.3036t+27.125

偏差的平方和,也就是 M M M,等于 0.108165,它的平方根等于 0.329,被称为均方误差(注意,不等于均方差,均方差是标准差),它在一定程度上反映了线性回归方程的拟合准确程度。一般来讲均方误差小比较好。

嗯!那这个例子就到这里了,通常一元线性回归问题就长这样,一般最小二乘法+偏导就可以解决它啦!

哦,对了,一个彩蛋:这个例子来自于《高等数学(下册)》第九章第十节(最小二乘法),是个很好的例子!

三、多元线性回归

okkk,其实多元和一元的套路是完全一样的(()只不过矩阵算起来有点麻烦就是了,不过没事,我会在适当的地方补充矩阵相关内容哒。

嗯,如果一元的回归线是二维平面中的直线,那多元的 “回归线” 其实就是高维空间中的超平面。比如这个图就是三维空间中的 “回归线”(yes 一个平面):

三维空间
现在开始数学推导。
在一元线性回归那里,我们只有一个自变量 t t t,但是这种情景在实际情况中太少了,大部分时候,影响某个因变量的因素会有很多,也就是我们会有多个自变量,不妨把它们设为 x 1 , x 2 , . . . , x n x_1, x_2,..., x_n x1,x2,...,xn。这种情况下,我们的回归方程就变成了:
y ˆ ( i ) = w 1 x 1 ( i ) + w 2 x 2 ( i ) + . . . + w n x n ( i ) + b \^y^{(i)} = w_1x_1^{(i)}+w_2x_2^{(i)}+...+w_nx_n^{(i)}+b yˆ(i)=w1x1(i)+w2x2(i)+...+wnxn(i)+b其中, y ˆ \^y yˆ 代表预测值, b b b 即为偏置(直观来看就是截距),右上角的 ( i ) ^{(i)} (i) 代表这是第 i i i 组数据(因为我们肯定会有很多组数据)。

插一句, w i w_i wi,也就是每一项的系数,代表该项(自变量)对因变量的影响程度 w i w_i wi 越大,表示这个自变量对因变量的影响程度越大。简单说就是这个自变量的变化会引起因变量较大的变化

嗯,上一个式子中最后那个 b b b 看着很难受诶,我们让它也对应一个自变量,只不过那个自变量是常数 1(加在最前面了):
y ˆ = w 0 x 0 ( i ) + w 1 x 1 ( i ) + w 2 x 2 ( i ) + . . . + w n x n ( i ) , x 0 = 1 \^y = w_0x_0^{(i)}+w_1x_1^{(i)}+w_2x_2^{(i)}+...+w_nx_n^{(i)}, x_0=1 yˆ=w0x0(i)+w1x1(i)+w2x2(i)+...+wnxn(i),x0=1

目前这个式子已经变成了我们相当熟悉的形式,把它转换为两个向量相乘的形式,即:
W = ( w 0 , w 1 , . . . , w n ) T x ( i ) = ( x 0 ( i ) , x 1 ( i ) , . . . , x n ( i ) ) y ˆ = x ( i ) ⋅ W W = (w_0,w_1,...,w_n)^T \\ x^{(i)} = (x_0^{(i)},x_1^{(i)},...,x_n^{(i)}) \\\^y = x^{(i)}·W W=(w0,w1,...,wn)Tx(i)=(x0(i),x1(i),...,xn(i))yˆ=x(i)W

嗯, x x x 上边带个 ( i ) ^{(i)} (i) 还是不太好看(),我们不妨把它再转变为矩阵的形式,设一共有 m m m 组数据。
计算起来就是 X X X 的每一行都乘上 W W W 那一列, X X X k k k 行第 i i i 个对应 W W W i i i 个。
X = ( 1 x 1 ( 1 ) x 2 ( 1 ) . . . x n ( 1 ) 1 x 1 ( 2 ) x 2 ( 2 ) . . . x n ( 2 ) . . . . . . 1 x 1 ( m ) x 1 ( m ) . . . x n ( m ) ) , W = ( w 0 w 1 . . . w n ) X=\begin{pmatrix} 1 & x_{1}^{(1)} & x_{2}^{(1)}& ...&x_{n}^{(1)}\\ 1 & x_{1}^{(2)} & x_{2}^{(2)} & ... & x_{n}^{(2)}\\ ... & & & &... \\ 1 & x_{1}^{(m)} & x_{1}^{(m)} &...&x_{n}^{(m)} \end{pmatrix}, W=\begin{pmatrix}w_0 \\w_1 \\... \\w_n \end{pmatrix} X= 11...1x1(1)x1(2)x1(m)x2(1)x2(2)x1(m).........xn(1)xn(2)...xn(m) ,W= w0w1...wn 这样的话, y ˆ = X ⋅ W \^y=X·W yˆ=XW

嗯,如果你看过 SVM 理论篇的话,其实这个理解起来还挺简单的。

ok,然后我们用和一元线性回归一样的方法,最小二乘法,让残差平方和也就是这个式子最小:
∑ i = 1 m ( y i − y ˆ i ) 2 = ∑ i = 1 m ( y i − x i W ) 2 \sum^m_{i=1}(y_i-\^y_i)^2 = \sum^m_{i=1}(y_i-x_iW)^2 i=1m(yiyˆi)2=i=1m(yixiW)2

类似的, y i y_i yi 也可以化为一个矩阵,仿照 x , w x, w x,w 的形式,这样我们就可以把上面的式子整个用矩阵表示,即:
Z ( W ) = ( Y − X ⋅ W ) 2 = ( Y − X ⋅ W ) T ( Y − X ⋅ W ) = ( Y T − X T ⋅ W T ) ( Y − X ⋅ W ) = Y T Y − Y T X W − Y X T W T + X T X W T W Z(W)=(Y-X·W)^2 = (Y-X·W)^T(Y-X·W) \\=(Y^T-X^T·W^T)(Y-X·W) \\=Y^TY-Y^TXW-YX^TW^T+X^TXW^TW Z(W)=(YXW)2=(YXW)T(YXW)=(YTXTWT)(YXW)=YTYYTXWYXTWT+XTXWTW

用转置 T 还是因为矩阵的乘法是一行对一列。

ok,现在需要最小化的式子已经出来的,我们接下来对它求偏导,让偏导为 0 就 ok 啦!(对其实除了矩阵运算稍微麻烦点,别的和一元线性回归都一样)
先补充一下矩阵求导法则,至于推导emm我可能会在数学系列中的某一篇里给一下叭,还没学呢(逃)。

矩阵求导法则

行我选择先记住公式,然后把它套到之前求出的式子里面。
Z ( W ) = Y T Y − Y T X W − Y X T W T + X T X W T W ∂ Z ( W ) ∂ W = Y T Y ∂ W − Y T X W ∂ W − Y X T W T ∂ W + X T X W T W ∂ W = 0 − Y T X − X T Y + X T X W + X X T W = 2 X T X W − 2 X T Y Z(W)=Y^TY-Y^TXW-YX^TW^T+X^TXW^TW \\ \frac{\partial Z(W)}{\partial W} = \frac{Y^TY}{\partial W}-\frac{Y^TXW}{\partial W}-\frac{YX^TW^T}{\partial W}+\frac{X^TXW^TW}{\partial W} \\ = 0-Y^TX-X^TY+X^TXW+XX^TW \\ = 2X^TXW-2X^TY Z(W)=YTYYTXWYXTWT+XTXWTWWZ(W)=WYTYWYTXWWYXTWT+WXTXWTW=0YTXXTY+XTXW+XXTW=2XTXW2XTYOK!求导搞完了别的就好办了,让这玩意等于 0:
2 X T X W − 2 X T Y = 0 2X^TXW-2X^TY=0 2XTXW2XTY=0也即: X T X W = X T Y X^TXW = X^TY XTXW=XTY解出 W W W W = X T Y X T X = ( X T X ) − 1 X T Y W = \frac{X^TY}{X^TX} = (X^TX)^{-1}X^TY W=XTXXTY=(XTX)1XTY

好!大功告成!!!!cheer~~!

嗯,这就是多元线性回归的原理推导!其实也并不难啦~主要就是矩阵的各种运算比较让人头疼emmm,待会去更一下矩阵的基本运算。。。

手搓代码 & sklearn 例子将在下一篇给出~!


这篇文章详细推导了线性回归算法的数学原理,希望对你有所帮助!⭐
欢迎三连!!一起加油!🎇
——Geeker_LStar

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值