线性回归问题
回归问题
定义:因变量(待预测的值target、y)与一个或多个数值型的自变量(影响因素x)之间的关系,是一种解决连续值的问题。
简单线性回归
定义:只有一个自变量,即简单的一次函数。
公式:
y
=
k
x
+
b
y = kx + b
y=kx+b
多元线性回归
定义:由多个自变量拟合而成的待线性解决问题。
三种类型的公式,意义是一样的,根绝个人选择略有差异,但是在计算的时候一般用线性代数来进行矩阵运算。
公式1:
y
^
=
w
1
x
1
+
w
2
x
2
+
.
.
.
.
+
w
n
x
n
+
b
\hat{y} =w_1x_1 + w_2x_2+....+w_nx_n+b
y^=w1x1+w2x2+....+wnxn+b
公式2:
y
^
=
w
1
x
1
+
w
2
x
2
+
.
.
.
.
+
w
n
x
n
+
w
0
\hat{y} =w_1x_1 + w_2x_2+....+w_nx_n+w_0
y^=w1x1+w2x2+....+wnxn+w0
公式3:(线性代数表示)
y
^
=
W
T
X
\hat{y} =W^TX
y^=WTX
正规方程
定义:通过最小二乘法可讲误差方程转换成有确定解的代数方程组(方程组的数目=未知数的个数),从而可求解出未知数。
例如:
y
1
=
w
1
x
1
1
+
w
2
x
1
2
+
.
.
.
.
.
w
n
x
1
n
y
2
=
w
1
x
2
1
+
w
2
x
2
2
+
.
.
.
.
.
w
n
x
2
n
.
.
.
.
y
n
=
w
1
x
n
1
+
w
2
x
n
2
+
.
.
.
.
.
w
n
x
n
n
y_1 = w_1x_11+w_2x_12+.....w_nx_1n\\ y_2 = w_1x_21+w_2x_22+.....w_nx_2n\\ ....\\ y_n = w_1x_n1+w_2x_n2+.....w_nx_nn
y1=w1x11+w2x12+.....wnx1ny2=w1x21+w2x22+.....wnx2n....yn=w1xn1+w2xn2+.....wnxnn
最小二乘法
定义:通过最小化误差的平方和寻找数据的最佳函数匹配。
公式1:h(x)是预测值,也称为模型、算法、方程,y是真实值(下同)
J
(
θ
)
=
1
2
∑
i
=
0
n
(
h
θ
(
x
i
)
−
y
i
)
2
J
(
θ
)
是损失函数的值
θ
是线性回归模型的参数(通常包括斜率和截距)
h
θ
(
x
i
)
表示模型对第
i
个训练样本的预测值
y
i
第
i
个训练样本的实际目标值
J(\theta)=\frac{1}{2}\sum_{i=0}^{n}(h_\theta(x_i)-y_i)^2\\ J(\theta)是损失函数的值\\ \theta是线性回归模型的参数(通常包括斜率和截距)\\ h_\theta(x_i)表示模型对第 i 个训练样本的预测值\\ y_i第 i 个训练样本的实际目标值
J(θ)=21i=0∑n(hθ(xi)−yi)2J(θ)是损失函数的值θ是线性回归模型的参数(通常包括斜率和截距)hθ(xi)表示模型对第i个训练样本的预测值yi第i个训练样本的实际目标值
公式2:
J
(
θ
)
=
1
2
(
X
θ
−
y
)
T
(
X
θ
−
y
)
J(\theta)=\frac{1}{2}(X\theta-y)^T(X\theta-y)
J(θ)=21(Xθ−y)T(Xθ−y)
如何求解h(x)中的权重参数w?或者说如何求解θ?
公式:
θ
/
W
=
(
X
T
X
)
−
1
X
T
y
\theta/W=(X^TX)^{-1}X^Ty
θ/W=(XTX)−1XTy
最小二乘法推导的相关知识
误差
ε i = ∣ y i − y ^ ∣ = ∣ y i − W T X i ∣ y i : 实际值 y ^ : 预测值 \varepsilon_{i}=|y_{i}-\hat{y}|=|y_{i}-W^TX_{i}|\\ y_{i}:实际值\\ \hat{y}:预测值 εi=∣yi−y^∣=∣yi−WTXi∣yi:实际值y^:预测值
注:在机器学习中,假设误差符合均值为0,方差为定值的高斯分布。
最大似然估计
定义:求估计量的方法,明确地使用概率模型,其目标是寻找能够以较高概率产生观察数据的系统发生树。是一类完全基于统计的系统发生树重建方法的代表。
有存放取样公式:
P
=
C
m
n
(
a
A
)
n
(
A
−
a
A
)
m
−
n
n
:
取样次数
m
:
总次数
a
:
抽取的样本个数
A
:
样本总数
P=C_{m}^{n}(\frac{a}{A})^n(\frac{A-a}{A})^{m-n}\\ n:取样次数 m:总次数 a:抽取的样本个数 A:样本总数
P=Cmn(Aa)n(AA−a)m−nn:取样次数m:总次数a:抽取的样本个数A:样本总数
高斯分布-概率密度函数
公式:
正态分布
N
(
μ
,
δ
2
)的概率密度函数
f
(
x
)
=
1
2
π
δ
e
−
(
x
−
μ
)
2
2
δ
2
正态分布N(\mu,\delta^2)的概率密度函数\\ f(x)=\frac{1}{\sqrt{2\pi}\delta}e^{-\frac{(x-\mu)^2}{2\delta^2}}
正态分布N(μ,δ2)的概率密度函数f(x)=2πδ1e−2δ2(x−μ)2
图像如下:
公式转换:
P
=
f
(
x
∣
μ
,
δ
2
)
=
1
2
π
δ
e
−
(
x
−
μ
)
2
2
δ
2
P=f(x|\mu,\delta^2)=\frac{1}{\sqrt{2\pi}\delta}e^{-\frac{(x-\mu)^2}{2\delta^2}}
P=f(x∣μ,δ2)=2πδ1e−2δ2(x−μ)2
带入误差均为为零可得下式:
P
=
f
(
x
∣
0
,
δ
2
)
=
1
2
π
δ
e
−
ε
2
2
δ
2
P=f(x|0,\delta^2)=\frac{1}{\sqrt{2\pi}\delta}e^{-\frac{\varepsilon^2}{2\delta^2}}
P=f(x∣0,δ2)=2πδ1e−2δ2ε2
有误差总似然,带入ε,即下式:
ε
=
∣
y
i
−
W
T
X
i
∣
则可得
P
=
∏
i
=
0
n
f
(
x
∣
0
,
δ
2
)
=
∏
i
=
0
n
1
2
π
δ
e
−
(
y
i
−
W
T
X
i
)
2
2
δ
2
W
T
为未知变量,即方程系数,其余为常量
\varepsilon=|y_{i}-W^TX_{i}|\\ 则可得\\ P=\prod_{i=0}^{n} f(x|0,\delta^2)=\prod_{i=0}^{n}\frac{1}{\sqrt{2\pi}\delta}e^{-\frac{(y_{i}-W^TX_{i})^2}{2\delta^2}}\\ W^T为未知变量,即方程系数,其余为常量
ε=∣yi−WTXi∣则可得P=i=0∏nf(x∣0,δ2)=i=0∏n2πδ1e−2δ2(yi−WTXi)2WT为未知变量,即方程系数,其余为常量
由于累乘对人还是计算机都不是很友好,故通过对数运算,将累乘转换成累加:
log
e
(
P
W
)
=
log
w
(
∏
i
=
0
n
1
2
π
δ
e
(
−
(
y
i
−
W
T
X
i
)
2
2
δ
2
)
)
log
e
(
P
W
)
=
∑
i
=
0
n
log
e
(
1
2
π
δ
e
(
−
(
y
i
−
W
T
X
i
)
2
2
δ
2
)
)
log
e
(
P
W
)
=
∑
i
=
0
n
(
log
e
1
2
π
δ
−
1
2
δ
2
(
y
i
−
W
T
X
i
)
2
)
求解最大似然估计,故需要下式最小,即:
L
(
W
)
=
1
2
∑
i
=
0
n
(
y
i
−
W
T
X
i
)
2
\log_{e}(P_{W})=\log_{w}(\prod_{i=0}^{n}\frac{1}{\sqrt{2\pi}\delta}e^(-\frac{(y_i-W^TX_{i})^2}{2\delta^2}))\\ \log_{e}(P_{W})=\sum_{i=0}^{n}\log_{e}(\frac{1}{\sqrt{2\pi}\delta}e^(-\frac{(y_i-W^TX_{i})^2}{2\delta^2}))\\ \log_{e}(P_{W})=\sum_{i=0}^{n}(\log_{e}\frac{1}{\sqrt{2\pi}\delta}-\frac{1}{2\delta^2}(y_{i}-W^TX_{i})^2)\\ 求解最大似然估计,故需要下式最小,即:\\ L(W) = \frac{1}{2}\sum_{i=0}^{n}(y^i-W^TX_{i})^2
loge(PW)=logw(i=0∏n2πδ1e(−2δ2(yi−WTXi)2))loge(PW)=i=0∑nloge(2πδ1e(−2δ2(yi−WTXi)2))loge(PW)=i=0∑n(loge2πδ1−2δ21(yi−WTXi)2)求解最大似然估计,故需要下式最小,即:L(W)=21i=0∑n(yi−WTXi)2
L(W)即是最小二乘法的表达式。
正规方程的推导
根据最小二乘法公式本身推算得出正规方程
首先根据最小二乘法的线性代数表示可得下式:
J
(
θ
)
=
1
2
(
X
θ
−
y
)
T
(
X
θ
−
y
)
化简可得
J
(
θ
)
=
1
2
(
θ
T
X
T
X
θ
−
θ
T
X
T
y
−
y
T
X
θ
+
y
T
y
)
J(\theta)=\frac{1}{2}(X\theta-y)^T(X\theta-y)\\ 化简可得\\ J(\theta)=\frac{1}{2}(\theta^TX^TX\theta-\theta^TX^Ty-y^TX\theta+y^Ty)
J(θ)=21(Xθ−y)T(Xθ−y)化简可得J(θ)=21(θTXTXθ−θTXTy−yTXθ+yTy)
对其求导可得下式:
J
’
(
θ
)
=
1
2
(
X
T
X
θ
+
(
θ
T
X
T
X
)
T
−
X
T
y
−
(
y
T
X
)
T
)
J
’
(
θ
)
=
1
2
(
X
T
X
θ
+
X
T
X
θ
−
X
T
y
−
X
T
y
)
J
’
(
θ
)
=
1
2
(
2
X
T
X
θ
−
2
X
T
y
)
J
’
(
θ
)
=
X
T
(
X
θ
−
y
)
J^{’}(\theta)=\frac{1}{2}(X^TX\theta+(\theta^TX^TX)^T-X^Ty-(y^TX)^T)\\ J^{’}(\theta)=\frac{1}{2}(X^TX\theta+X^TX\theta-X^Ty-X^Ty)\\ J^{’}(\theta)=\frac{1}{2}(2X^TX\theta-2X^Ty)\\ J^{’}(\theta)=X^T(X\theta-y)
J’(θ)=21(XTXθ+(θTXTX)T−XTy−(yTX)T)J’(θ)=21(XTXθ+XTXθ−XTy−XTy)J’(θ)=21(2XTXθ−2XTy)J’(θ)=XT(Xθ−y)
因为我们要求函数J的最小值,因此其导数要为0,可得下式
J
’
(
θ
)
=
0
=
X
T
(
X
θ
−
y
)
故可得
θ
=
(
X
T
X
)
−
1
X
T
y
J^{’}(\theta)=0=X^T(X\theta-y)\\ 故可得\\ \theta=(X^TX)^{-1}X^Ty
J’(θ)=0=XT(Xθ−y)故可得θ=(XTX)−1XTy
测试正规方程
内容:
气温会随着海拔高度的升高而降低,,我们可以通过测量不同海拔高度的气温来预测海拔高度和气温的关系。我们假设海拔高度和气温的关系可以使用如下公式表达:v(气温)= w * x(海拔)+b,提供了在9个不同高度测量的气温值,请你根据今天学习的线性回归(正轨方程)方法预测w和b的值。根据这个公式,我们预测一下在8000米的海拔,气温会是多少?
height | temperature |
---|---|
0 | 12.83 |
500 | 10.19 |
1000 | 5.50 |
1500 | 2.85 |
2000 | -0.70 |
2500 | -4.06 |
3000 | -7.12 |
3500 | -10.06 |
4000 | -13.21 |
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
height = np.array([[0],[500],[1000],[1500],[2000],[2500],[3000],[3500],[4000]])
temperature = np.array([12.83, 10.19, 5.50, 2.85, -0.70, -4.06, -7.12, -10.06, -13.21])
display(height,temperature)
# 法一
# 计算数据点的数量
n = len(height)
# 计算斜率 m
m = (n * np.sum(height * temperature) - np.sum(height) * np.sum(temperature)) / (n * np.sum(height**2) - (np.sum(height))**2)
# 计算截距 b
b = (np.sum(temperature) - m * np.sum(height)) / n
# 使用计算得出的斜率和截距进行预测
height_to_predict = 8000
temperature1 = m * height_to_predict + b
print("预测高度为8000时的温度:", temperature1)
# 法二
model = LinearRegression()
# 注意:LinearRegression 模型在拟合时要求输入特征矩阵是二维的
model.fit(height,temperature)
temperature2 = model.predict([[8000]])
# temperature2 = -39.832
# 错解:不符合最小二乘法,他是y=kx+b,而不是单一的计算权重w
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
height = np.array([[0],[500],[1000],[1500],[2000],[2500],[3000],[3500],[4000]])
temperature = np.array([12.83, 10.19, 5.50, 2.85, -0.70, -4.06, -7.12, -10.06, -13.21])
display(height,temperature)
W = np.linalg.inv(height.T.dot(height)).dot(height.T).dot(temperature)
temperature1 = W * 8000
# temperature1 = -16.64156863
# ————————————改错——————————
import numpy as np
height = np.array([0, 500, 1000, 1500, 2000, 2500, 3000, 3500, 4000])
temperature = np.array([12.83, 10.19, 5.50, 2.85, -0.70, -4.06, -7.12, -10.06, -13.21])
# 创建一个新的矩阵 X,包括高度和截距
X = np.column_stack((height, np.ones_like(height)))
# 使用矩阵运算计算 W
W = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(temperature)
# W 的第一个值即为斜率 m,第二个值即为截距 b
m = W[0]
b = W[1]
print("斜率 m:", m)
print("截距 b:", b)
y = 8000 * m + b
# 注意:np.column_stack() 函数用于将给定的一维数组以列的形式堆叠起来,创建一个二维数组。