创建时间: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=n∑i=1n(xi−x)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πσ1e−2σ2(x−μ)2
的确它看着很复杂,但实际上决定这个函数的只有 μ μ μ 和 σ σ σ。
- 平均值
μ
μ
μ:决定了正态分布的中心所在的位置,直观来看就是下图中最高的地方对应的横坐标。
- 标准差
σ
σ
σ:决定了数据的离散程度,
σ
σ
σ 越大,数据越离散,表现在图上就是更多的数据分布在距离中心比较远的位置上,图像会比较 “矮胖”。
关于正态分布,我会在各种分布(正态、二项、泊松等)那一篇里再详细说,在这里我们只需要知道正态分布图像的特征:
- 正态分布密度曲线呈钟型,中间高,两端低,关于 x = μ x=μ x=μ 对称,且当 x = μ x=μ x=μ 时, f ( x ) f(x) f(x)取得最大值 1 / ( 2 π σ ) 1/(\sqrt{2π} σ) 1/(2πσ)。这说明数据集中在平均值附近,距离平均值越近,数据分布越密集;距离平均值越远,数据分布越稀疏。
- 正态分布图像下方面积为 1,对应概率和为 1。
- 当固定 σ σ σ,改变 μ μ μ 的大小,图像的形状不变,只是沿着 x x x 轴做平移变换。
- 当固定 μ μ μ,改变 σ σ σ 的大小,图形的对称轴不变而形状在改变, σ σ σ 越大,图像越 “矮胖”, σ σ σ 越小,图形越 “瘦高”。
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 i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
时间 t i / h t_i/h ti/h | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
刀具厚度 y i / m m y_i/mm yi/mm | 27.0 | 26.8 | 26.5 | 26.3 | 26.1 | 25.7 | 25.3 | 24.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,(a、b∈R)。
最理想的情况当然是直线
y
=
a
t
+
b
y = at+b
y=at+b 完美地正好经过这八个点,但是肯定不可能,因为(如果画出图的话)这八个点本来就不在一条直线上。
因此,我们只能尝试选取
a
、
b
a、b
a、b,使得
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)
yi−f(ti),(i=0,1,...,7)都很小。
so,这怎么办捏。一个常见的想法是让所有残差的和,也就是
∑
i
=
0
7
[
y
i
−
f
(
t
i
)
]
\sum_{i=0}^{7}[y_i-f(t_i)]
i=0∑7[yi−f(ti)]很小,来保证每个残差都很小。
不过,不难发现,这条路走不通,因为前面讲过,正常来说残差会有正有负,要是这么搞的话正负就抵消了,那我 1000+(-1000) 的偏差和还变成 0 了呢,可是残差还是很大的。
emm,那加个绝对值行不行呢??就是让 ∑ i = 0 7 ∣ y i − f ( t i ) ∣ \sum_{i=0}^{7}|y_i-f(t_i)| ∑i=07∣yi−f(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=0∑7[yi−f(ti)]2=i=0∑7∣yi−(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=07∣yi−(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.
{∂a∂M=−2∑i=07[yi−(ati+b)]ti=0∂b∂M=∑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=0∑i=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.
{a∑i=07ti2+b∑i=07ti=∑i=07yitia∑i=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 | |
---|---|---|---|---|
0 | 0 | 27.0 | 0 | |
1 | 1 | 26.8 | 26.8 | |
2 | 4 | 26.5 | 53.0 | |
3 | 9 | 26.3 | 78.9 | |
4 | 16 | 26.1 | 104.4 | |
5 | 25 | 25.7 | 128.5 | |
6 | 36 | 25.3 | 151.8 | |
7 | 49 | 24.8 | 173.6 | |
合计 | 28 | 140 | 208.5 | 717.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ˆ=X⋅W。
嗯,如果你看过 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=1∑m(yi−yˆi)2=i=1∑m(yi−xiW)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)=(Y−X⋅W)2=(Y−X⋅W)T(Y−X⋅W)=(YT−XT⋅WT)(Y−X⋅W)=YTY−YTXW−YXTWT+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)=YTY−YTXW−YXTWT+XTXWTW∂W∂Z(W)=∂WYTY−∂WYTXW−∂WYXTWT+∂WXTXWTW=0−YTX−XTY+XTXW+XXTW=2XTXW−2XTYOK!求导搞完了别的就好办了,让这玩意等于 0:
2
X
T
X
W
−
2
X
T
Y
=
0
2X^TXW-2X^TY=0
2XTXW−2XTY=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