1. 简介
简单线性回归中,您有一个因变量y和一个自变量X。该模型可以表示为:
y
=
m
x
+
b
y=mx+b
y=mx+b
其中
-
x
x
x: 自变量
-
y
y
y: 因变量
-
m
m
m: 斜率
-
b
b
b: 截距
最小二乘法是回归分析中用于估计线性回归模型参数的标准方法。它可以最小化误差的平方和,从而找到数据的最佳拟合直线。
在这里,误差是实际值和预测值之间的差异。实际值是观察到的值,而预测值是模型的估计值。
在这里,我们将使用最小二乘法来估计线性回归模型的参数。我们将使用以下公式来计算回归系数:
s
s
h
=
∑
i
=
1
n
(
y
i
−
(
m
x
i
+
b
)
)
2
ssh = \sum_{i=1}^{n}(y_i - (mx_i+b))^2
ssh=i=1∑n(yi−(mxi+b))2
根据链式法则,我们可以计算偏导数:
链式法则:
∂
∂
x
[
f
(
g
(
x
)
)
]
=
f
′
(
g
(
x
)
)
⋅
g
′
(
x
)
\frac{\partial}{\partial x}[f(g(x))] = f'(g(x)) \cdot g'(x)
∂x∂[f(g(x))]=f′(g(x))⋅g′(x)
公示得出,复合函数的导数等于外函数的导数乘以内函数的导数。
设:
u
=
y
i
−
(
m
x
i
+
b
)
u=y_i - (mx_i+b)
u=yi−(mxi+b)
所以:
∂
∂
x
[
f
(
g
(
x
)
)
]
=
u
2
⋅
(
y
i
−
(
m
x
i
+
b
)
)
\frac{\partial}{\partial x}[f(g(x))] = u^2 \cdot (y_i - (mx_i+b))
∂x∂[f(g(x))]=u2⋅(yi−(mxi+b))
导数规则:
- 常数:
f
(
x
)
=
c
f(x)=c
f(x)=c的导数为0
- 幂规则:
f
(
x
)
=
x
n
f(x)=x^n
f(x)=xn的导数为
n
x
n
−
1
nx^{n-1}
nxn−1
- 乘法常数规则:
f
(
x
)
=
c
⋅
g
(
x
)
的导数为
c
⋅
g
′
(
x
)
f(x)=c \cdot g(x)的导数为c \cdot g'(x)
f(x)=c⋅g(x)的导数为c⋅g′(x)
- 和差规则:
f
(
x
)
=
g
(
x
)
±
h
(
x
)
f(x)=g(x) \pm h(x)
f(x)=g(x)±h(x)的导数为
g
′
(
x
)
±
h
′
(
x
)
g'(x) \pm h'(x)
g′(x)±h′(x)
- 乘法规则:
f
(
x
)
=
g
(
x
)
⋅
h
(
x
)
f(x)=g(x) \cdot h(x)
f(x)=g(x)⋅h(x)的导数为
g
′
(
x
)
⋅
h
(
x
)
+
g
(
x
)
⋅
h
′
(
x
)
g'(x) \cdot h(x) + g(x) \cdot h'(x)
g′(x)⋅h(x)+g(x)⋅h′(x)
- 链式法则:
f
(
x
)
=
g
(
h
(
x
)
)
f(x)=g(h(x))
f(x)=g(h(x))的导数为
g
′
(
h
(
x
)
)
⋅
h
′
(
x
)
g'(h(x)) \cdot h'(x)
g′(h(x))⋅h′(x)
因为是二次方,所以使用幂规则:(
u
2
u^2
u2的导数为
2
u
2u
2u)
∂
∂
m
=
2
u
⋅
(
−
x
i
)
\frac{\partial }{\partial m} = 2u \cdot (-x_i)
∂m∂=2u⋅(−xi)
∂
∂
m
=
−
2
x
i
⋅
(
y
i
−
(
m
x
i
+
b
)
)
\frac{\partial }{\partial m} = -2x_i \cdot (y_i - (mx_i+b))
∂m∂=−2xi⋅(yi−(mxi+b))
因为0的0次方等于1,所以:
∂
∂
b
=
−
2
u
⋅
1
\frac{\partial }{\partial b} = -2u \cdot 1
∂b∂=−2u⋅1
∂
b
∂
b
=
−
2
(
y
i
−
(
m
x
i
+
b
)
)
\frac{\partial b}{\partial b} = -2(y_i - (mx_i+b))
∂b∂b=−2(yi−(mxi+b))
我们可以通过求导数来找到最小值。我们将导数设置为0,然后解出m和b。
∂
s
s
h
∂
m
=
−
2
∑
i
=
1
n
x
i
(
y
i
−
(
m
x
i
+
b
)
)
=
0
\frac{\partial ssh}{\partial m} = -2 \sum_{i=1}^{n}x_i(y_i - (mx_i+b)) = 0
∂m∂ssh=−2i=1∑nxi(yi−(mxi+b))=0
∂
s
s
h
∂
b
=
−
2
∑
i
=
1
n
(
y
i
−
(
m
x
i
+
b
)
)
=
0
\frac{\partial ssh}{\partial b} = -2 \sum_{i=1}^{n}(y_i - (mx_i+b)) = 0
∂b∂ssh=−2i=1∑n(yi−(mxi+b))=0
∑
i
=
1
n
x
i
(
y
i
−
(
m
x
i
+
b
)
)
=
0
\sum_{i=1}^{n}x_i(y_i - (mx_i+b)) = 0
i=1∑nxi(yi−(mxi+b))=0
∑
i
=
1
n
(
y
i
−
(
m
x
i
+
b
)
)
=
0
\sum_{i=1}^{n}(y_i - (mx_i+b)) = 0
i=1∑n(yi−(mxi+b))=0
∑
i
=
1
n
x
i
y
i
−
m
∑
i
=
1
n
x
i
2
−
b
∑
i
=
1
n
x
i
=
0
\sum_{i=1}^{n}x_iy_i - m\sum_{i=1}^{n}x_i^2 - b\sum_{i=1}^{n}x_i = 0
i=1∑nxiyi−mi=1∑nxi2−bi=1∑nxi=0
∑
i
=
1
n
y
i
−
m
∑
i
=
1
n
x
i
−
n
b
=
0
\sum_{i=1}^{n}y_i - m\sum_{i=1}^{n}x_i - nb = 0
i=1∑nyi−mi=1∑nxi−nb=0
接下来,我们将解出m和b。
关于b的方程:
n
b
=
∑
i
=
1
n
y
i
−
m
∑
i
=
1
n
x
i
nb = \sum_{i=1}^{n}y_i - m\sum_{i=1}^{n}x_i
nb=i=1∑nyi−mi=1∑nxi
b
=
∑
i
=
1
n
y
i
−
m
∑
i
=
1
n
x
i
n
b = \frac{\sum_{i=1}^{n}y_i-m\sum_{i=1}^{n}x_i}{n}
b=n∑i=1nyi−m∑i=1nxi
关于m的方程:
我们已知b的值,所以我们可以将其代入方程中:
∑
i
=
1
n
x
i
y
i
−
m
∑
i
=
1
n
x
i
2
−
∑
i
=
1
n
y
i
−
m
∑
i
=
1
n
x
i
n
∑
i
=
1
n
x
i
=
0
\sum_{i=1}^{n}x_iy_i - m\sum_{i=1}^{n}x_i^2 - \frac{\sum_{i=1}^{n}y_i-m\sum_{i=1}^{n}x_i}{n}\sum_{i=1}^{n}x_i = 0
i=1∑nxiyi−mi=1∑nxi2−n∑i=1nyi−m∑i=1nxii=1∑nxi=0
乘n消除分母:
n
∑
i
=
1
n
x
i
y
i
−
m
n
∑
i
=
1
n
x
i
2
−
(
∑
i
=
1
n
y
i
−
m
∑
i
=
1
n
x
i
)
∑
i
=
1
n
x
i
=
0
n\sum_{i=1}^{n}x_iy_i - mn\sum_{i=1}^{n}x_i^2 - (\sum_{i=1}^{n}y_i-m\sum_{i=1}^{n}x_i)\sum_{i=1}^{n}x_i = 0
ni=1∑nxiyi−mni=1∑nxi2−(i=1∑nyi−mi=1∑nxi)i=1∑nxi=0
n
∑
i
=
1
n
x
i
y
i
−
m
n
∑
i
=
1
n
x
i
2
−
∑
i
=
1
n
y
i
∑
i
=
1
n
x
i
+
m
∑
i
=
1
n
x
i
∑
i
=
1
n
x
i
=
0
n\sum_{i=1}^{n}x_iy_i - mn\sum_{i=1}^{n}x_i^2 - \sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i + m\sum_{i=1}^{n}x_i\sum_{i=1}^{n}x_i = 0
ni=1∑nxiyi−mni=1∑nxi2−i=1∑nyii=1∑nxi+mi=1∑nxii=1∑nxi=0
n
∑
i
=
1
n
x
i
y
i
−
m
n
∑
i
=
1
n
x
i
2
−
∑
i
=
1
n
y
i
∑
i
=
1
n
x
i
+
m
(
∑
i
=
1
n
x
i
)
2
=
0
n\sum_{i=1}^{n}x_iy_i - mn\sum_{i=1}^{n}x_i^2 - \sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i + m(\sum_{i=1}^{n}x_i)^2 = 0
ni=1∑nxiyi−mni=1∑nxi2−i=1∑nyii=1∑nxi+m(i=1∑nxi)2=0
得出mn的方程:
m
n
∑
i
=
1
n
x
i
2
−
m
(
∑
i
=
1
n
x
i
)
2
=
n
∑
i
=
1
n
x
i
y
i
−
∑
i
=
1
n
y
i
∑
i
=
1
n
x
i
mn\sum_{i=1}^{n}x_i^2 - m(\sum_{i=1}^{n}x_i)^2 = n\sum_{i=1}^{n}x_iy_i - \sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i
mni=1∑nxi2−m(i=1∑nxi)2=ni=1∑nxiyi−i=1∑nyii=1∑nxi
m
(
n
∑
i
=
1
n
x
i
2
−
(
∑
i
=
1
n
x
i
)
2
)
=
n
∑
i
=
1
n
x
i
y
i
−
∑
i
=
1
n
y
i
∑
i
=
1
n
x
i
m(n\sum_{i=1}^{n}x_i^2 - (\sum_{i=1}^{n}x_i)^2) = n\sum_{i=1}^{n}x_iy_i - \sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i
m(ni=1∑nxi2−(i=1∑nxi)2)=ni=1∑nxiyi−i=1∑nyii=1∑nxi
m
=
n
∑
i
=
1
n
x
i
y
i
−
∑
i
=
1
n
y
i
∑
i
=
1
n
x
i
n
∑
i
=
1
n
x
i
2
−
(
∑
i
=
1
n
x
i
)
2
m = \frac{n\sum_{i=1}^{n}x_iy_i - \sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i}{n\sum_{i=1}^{n}x_i^2 - (\sum_{i=1}^{n}x_i)^2}
m=n∑i=1nxi2−(∑i=1nxi)2n∑i=1nxiyi−∑i=1nyi∑i=1nxi
此时,我们已经得到了m和b的值。分别为:
m
=
n
∑
i
=
1
n
x
i
y
i
−
∑
i
=
1
n
y
i
∑
i
=
1
n
x
i
n
∑
i
=
1
n
x
i
2
−
(
∑
i
=
1
n
x
i
)
2
m = \frac{n\sum_{i=1}^{n}x_iy_i - \sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i}{n\sum_{i=1}^{n}x_i^2 - (\sum_{i=1}^{n}x_i)^2}
m=n∑i=1nxi2−(∑i=1nxi)2n∑i=1nxiyi−∑i=1nyi∑i=1nxi
b
=
∑
i
=
1
n
y
i
−
m
∑
i
=
1
n
x
i
n
b = \frac{\sum_{i=1}^{n}y_i-m\sum_{i=1}^{n}x_i}{n}
b=n∑i=1nyi−m∑i=1nxi
简写为:
m
=
n
(
∑
x
y
)
−
(
∑
x
)
(
∑
y
)
n
(
∑
x
2
)
−
(
∑
x
)
2
m = \frac{n(\sum_{}^{}xy) - (\sum_{}^{}x)(\sum_{}^{}y)}{n(\sum_{}^{}x^2) - (\sum_{}^{}x)^2}
m=n(∑x2)−(∑x)2n(∑xy)−(∑x)(∑y)
b
=
∑
y
−
m
(
∑
x
)
n
b = \frac{\sum_{}^{}y - m(\sum_{}^{}x)}{n}
b=n∑y−m(∑x)
我们可以使用这些公式来计算m和b的值。然后,我们可以使用这些值来计算预测值。
2. 代码实现
2.1 导入库
import numpy as np
import matplotlib.pyplot as plt
2.2 生成数据
x = np.array([1, 2])
y = np.array([2, 3])
2.3 计算m和b的值
n = len(x)
m = (n * np.sum(x * y) - np.sum(x) * np.sum(y)) / (n * np.sum(x ** 2) - np.sum(x) ** 2)
b = (np.sum(y) - m * np.sum(x)) / n
m,b
得出结果:
(1.0, 1.0)
2.4 计算预测值
根据线性回归模型:
y
=
m
x
+
b
y=mx+b
y=mx+b
因为m和b的值都为1,所以:
y
=
x
+
1
y=x+1
y=x+1
假设x为3,那么y的值为:
y
=
3
+
1
=
4
y=3+1=4
y=3+1=4
3. 其他
你可以记录下来,然后使用这些公式来计算m和b的值。然后,您可以使用这些值来计算预测值。
我们使用的值比较简单,你可以尝试使用更多的值来计算m和b的值。不过,这些值必须是线性相关的。