问题背景
假设银行根据你的工资水平和年龄来确定给你贷款的额度。目标:在已知工资和年龄的情况下,预测银行会贷款给你多少钱。并且已知如下数据。
工资 | 年龄 | 额度 |
---|---|---|
4000 | 25 | 20000 |
8000 | 30 | 70000 |
5000 | 28 | 35000 |
7500 | 33 | 50000 |
12000 | 40 | 85000 |
问题分析
本问题的额度只受工资水平和年龄的影响,这里存在两个自变量工资 x 1 x_1 x1 和年龄 x 2 x_2 x2 ,一个因变量额度 y ( x ) y(x) y(x) 。我们容易想到最简单的数学模型,用一个平面 y ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 y(x)=\theta_0 + \theta_1x_1 + \theta_2x_2 y(x)=θ0+θ1x1+θ2x2 来拟合这些数据点,算出参数 θ i \theta_i θi ,这样我们就能够在给定条件 x = ( x 1 , x 2 ) x=(x_1,x_2) x=(x1,x2) 下算出额度 y(x) 了。
模型假设
上述模型等价于 y ( x ) = ∑ i = 0 2 θ i x i y(x) = \sum_{i=0}^2\theta_ix_i y(x)=∑i=02θixi ,其中 x 0 = 1 , i = 0 , 1 , 2 x_0=1,i=0,1,2 x0=1,i=0,1,2 。这里只考虑了两个自变量,我们考虑可通用的情况,即考虑 n 个自变量的情况,即考虑 y ( x ) = ∑ i = 0 n θ i x i = θ T x y(x) = \sum_{i=0}^n\theta_ix_i=\theta^Tx y(x)=∑i=0nθixi=θTx ,其中 x 0 = 1 , i = 0 , 1 , 2 , ⋯ , n , θ x_0=1,i=0,1,2,\cdots,n,\theta x0=1,i=0,1,2,⋯,n,θ 未知 。故特征维数为 n n n ,令 m m m 为样本个数。注意: θ \theta θ 和 x x x 都是 n + 1 n+1 n+1 维列向量, y y y 是 m m m 维列向量。
由于真实值 y ( j ) y^{(j)} y(j) ( 其中 j = 1 , 2 , ⋯ , m j=1,2,\cdots,m j=1,2,⋯,m ) 和预测值 θ T x ( j ) \theta^Tx^{(j)} θTx(j) 之间存在误差,为了增加模型的准确性,我们给每个样本增加一个误差 ϵ ( j ) \epsilon^{(j)} ϵ(j) ,即 y ( j ) = θ T x ( j ) + ϵ ( j ) y^{(j)}=\theta^Tx^{(j)}+\epsilon^{(j)} y(j)=θTx(j)+ϵ(j) 。并且每个样本的误差 ϵ ( j ) \epsilon^{(j)} ϵ(j) 是独立同分布的,并服从均值为 0 0 0 ,方差为 σ 2 \sigma^2 σ2 的正态分布。
模型建立
由于误差服从高斯分布,故 p ( ϵ ( j ) ) = 1 2 π σ e x p ( − ( ϵ ( j ) ) 2 2 σ 2 ) p(\epsilon^{(j)})=\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(\epsilon^{(j)})^2}{2\sigma^2}) p(ϵ(j))=2πσ1exp(−2σ2(ϵ(j))2),又 y ( j ) = θ T x ( j ) + ϵ ( j ) y^{(j)}=\theta^Tx^{(j)}+\epsilon^{(j)} y(j)=θTx(j)+ϵ(j),故 p ( y ( j ) ∣ x ( j ) ; θ ) = 1 2 π σ e x p ( − ( y ( j ) − θ T x ( j ) ) 2 2 σ 2 ) p(y^{(j)}|x^{(j)};\theta)=\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(y^{(j)}-\theta^Tx^{(j)})^2}{2\sigma^2}) p(y(j)∣x(j);θ)=2πσ1exp(−2σ2(y(j)−θTx(j))2) ,表示第 j j j 个样本 x ( j ) x^{(j)} x(j)在参数 θ \theta θ 下为真实值的概率。
而我们的目标是要求所有样本在参数 θ \theta θ 下为真实值的概率最大,等价于求似然函数: L ( θ ) = ∏ i = 1 m p ( y ( j ) ∣ x ( j ) ; θ ) = ∏ i = 1 m 1 2 π σ e x p ( − ( y ( j ) − θ T x ( j ) ) 2 2 σ 2 ) L(\theta)=\prod_{i=1}^mp(y^{(j)}|x^{(j)};\theta)=\prod_{i=1}^m\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(y^{(j)}-\theta^Tx^{(j)})^2}{2\sigma^2}) L(θ)=∏i=1mp(y(j)∣x(j);θ)=∏i=1m2πσ1exp(−2σ2(y(j)−θTx(j))2) 的最大值。
模型求解
对
L
(
θ
)
L(\theta)
L(θ) 取对数,则
l
n
(
L
(
θ
)
)
=
l
n
(
∏
i
=
1
m
1
2
π
σ
e
x
p
(
−
(
y
(
j
)
−
θ
T
x
(
j
)
)
2
2
σ
2
)
)
.
ln(L(\theta))=ln(\prod_{i=1}^m\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(y^{(j)}-\theta^Tx^{(j)})^2}{2\sigma^2})).
ln(L(θ))=ln(∏i=1m2πσ1exp(−2σ2(y(j)−θTx(j))2)).
等式右边拆开得:
l
n
(
L
(
θ
)
)
=
m
l
n
(
1
2
π
σ
)
−
1
σ
2
1
2
∑
i
=
1
m
(
y
(
j
)
−
θ
T
x
(
j
)
)
2
.
ln(L(\theta))=mln(\frac{1}{\sqrt{2\pi}\sigma}) - \frac{1}{\sigma^2}\frac{1}{2}\sum_{i=1}^m(y^{(j)}-\theta^Tx^{(j)})^2.
ln(L(θ))=mln(2πσ1)−σ2121∑i=1m(y(j)−θTx(j))2.
由于等式右边 m l n ( 1 2 π σ ) mln(\frac{1}{\sqrt{2\pi}\sigma}) mln(2πσ1)为常数,要使得似然函数 L ( θ ) L(\theta) L(θ) 最大,故问题转化为极小化 J ( θ ) = 1 2 ∑ i = 1 m ( y ( j ) − θ T x ( j ) ) 2 J(\theta)=\frac{1}{2}\sum_{i=1}^m(y^{(j)}-\theta^Tx^{(j)})^2 J(θ)=21∑i=1m(y(j)−θTx(j))2 ,而 J ( θ ) J(\theta) J(θ) 就是我们熟悉的最小二乘法。
下面是求解过程:
m
i
n
:
J
(
θ
)
=
1
2
∑
i
=
1
m
(
y
(
j
)
−
θ
T
x
(
j
)
)
2
.
min:J(\theta)=\frac{1}{2}\sum_{i=1}^m(y^{(j)}-\theta^Tx^{(j)})^2.
min:J(θ)=21∑i=1m(y(j)−θTx(j))2.
令 X = ( x 1 , x 2 , x 3 , ⋯ , x m ) T X=(x^1,x^2,x^3,\cdots,x^m)^T X=(x1,x2,x3,⋯,xm)T,其中 x j = ( 1 , x 1 j , x 2 j , x 3 j , ⋯ , x n j ) T , ( j = 1 , 2 , 3 , ⋯ , m ) x^j=(1,x_1^j,x_2^j,x_3^j,\cdots,x_n^j)^T,(j=1,2,3,\cdots,m) xj=(1,x1j,x2j,x3j,⋯,xnj)T,(j=1,2,3,⋯,m) ,则 X X X为 m m m 行 n + 1 n+1 n+1 列矩阵。
J
(
θ
)
J(\theta)
J(θ) 对
θ
\theta
θ 求偏导:
Δ
θ
J
(
θ
)
\Delta_\theta J(\theta)
ΔθJ(θ)
=
Δ
θ
(
1
2
∑
i
=
1
m
(
y
(
j
)
−
θ
T
x
(
j
)
)
2
)
=\Delta_\theta(\frac{1}{2}\sum_{i=1}^m(y^{(j)}-\theta^Tx^{(j)})^2)
=Δθ(21∑i=1m(y(j)−θTx(j))2)
=
Δ
θ
(
1
2
(
X
θ
−
y
)
T
(
X
θ
−
y
)
)
=\Delta_\theta(\frac{1}{2}(X\theta-y)^T(X\theta-y))
=Δθ(21(Xθ−y)T(Xθ−y))
=
Δ
θ
(
1
2
(
θ
T
X
T
−
y
T
)
(
X
θ
−
y
)
)
=\Delta_\theta(\frac{1}{2}(\theta^TX^T-y^T)(X\theta-y))
=Δθ(21(θTXT−yT)(Xθ−y))
=
Δ
θ
(
1
2
(
θ
T
X
T
X
θ
−
θ
T
X
T
y
−
y
T
X
θ
+
y
T
y
)
)
=\Delta_\theta(\frac{1}{2}(\theta^TX^TX\theta-\theta^TX^Ty-y^TX\theta+y^Ty))
=Δθ(21(θTXTXθ−θTXTy−yTXθ+yTy))
=
1
2
(
2
X
T
X
θ
−
X
T
y
−
(
y
T
X
)
T
)
=\frac{1}{2}(2X^TX\theta-X^Ty-(y^TX)^T)
=21(2XTXθ−XTy−(yTX)T)
=
X
T
X
θ
−
X
T
y
.
=X^TX\theta-X^Ty.
=XTXθ−XTy.
令偏导等于
0
0
0 ,则
θ
=
(
X
T
X
)
−
1
X
T
y
.
\theta=(X^TX)^{-1}X^Ty.
θ=(XTX)−1XTy.
模型应用
根据问题背景可知,
n
=
2
,
m
=
5
,
y
=
(
20000
,
70000
,
35000
,
50000
,
85000
)
T
,
n=2,m=5,y=(20000,70000,35000,50000,85000)^T,
n=2,m=5,y=(20000,70000,35000,50000,85000)T,
X
=
[
1
4000
25
1
8000
30
1
5000
28
1
7500
33
1
12000
40
]
X = \left[ \begin{matrix} 1 & 4000 & 25 \\ 1 & 8000 & 30 \\ 1 & 5000 & 28 \\ 1 & 7500 & 33 \\ 1 & 12000 & 40 \\ \end{matrix} \right]
X=⎣⎢⎢⎢⎢⎡111114000800050007500120002530283340⎦⎥⎥⎥⎥⎤
MATLAB求解代码:
clc,clear;
X = [1 , 4000 , 25;
1 , 8000 , 30;
1 , 5000 , 28;
1 , 7500 , 33;
1 , 12000 , 40];
y = [20000;70000;35000;50000;85000];
theta = inv(X'*X)*X'*y
根据上述模型结论可解得 θ = ( 62005 , 15 , − 3760 ) T . \theta=(62005,15,-3760)^T. θ=(62005,15,−3760)T.
故可得该问题线性回归模型为: y ( x ) = 62005 + 15 x 1 − 3760 x 2 y(x)=62005 + 15x_1 -3760x_2 y(x)=62005+15x1−3760x2 。
工资 | 年龄 | 额度 | 额度预测值 |
---|---|---|---|
4000 | 25 | 20000 | 28005 |
8000 | 30 | 70000 | 69205 |
5000 | 28 | 35000 | 31725 |
7500 | 33 | 50000 | 50425 |
12000 | 40 | 85000 | 91605 |
模型评估
从表中可以看到,有些值预测的误差还是比较小的,像额度70000时,预测为69205。该模型只是用线性方法取回归,而大多数模型是非线性的。所以我们为了增加模型的准确性,就需要去研究非线性模型。
模型还存在一个问题,模型的结论为: θ = ( X T X ) − 1 X T y \theta=(X^TX)^{-1}X^Ty θ=(XTX)−1XTy ,需要求 X T X X^TX XTX 的逆 ( X T X ) − 1 (X^TX)^{-1} (XTX)−1 ,而实际问题中大多数 X T X X^TX XTX 是不可逆的,这就导致可以解出多个 θ \theta θ 。
模型的目标是 m i n : J ( θ ) = 1 2 ∑ i = 1 m ( y ( j ) − θ T x ( j ) ) 2 min:J(\theta)=\frac{1}{2}\sum_{i=1}^m(y^{(j)}-\theta^Tx^{(j)})^2 min:J(θ)=21∑i=1m(y(j)−θTx(j))2 。
由于 m m m 是常数,故目标等价于 m i n : J ( θ ) = 1 2 m ∑ i = 1 m ( θ T x ( j ) − y ( j ) ) 2 min:J(\theta)=\frac{1}{2m}\sum_{i=1}^m(\theta^Tx^{(j)}-y^{(j)})^2 min:J(θ)=2m1∑i=1m(θTx(j)−y(j))2 。这时我们还可以利用 梯度下降法 对 θ \theta θ 进行迭代求解,就不需要求解逆矩阵了。考虑其中的一种 批量梯度下降法 。
J
(
θ
)
J(\theta)
J(θ) 对
θ
i
\theta_i
θi 求偏导:
δ
J
(
θ
)
δ
θ
i
=
−
1
m
∑
j
=
1
m
(
y
(
j
)
−
θ
T
x
(
j
)
)
x
i
j
,
\frac{\delta J(\theta)}{\delta \theta_i}=-\frac{1}{m}\sum_{j=1}^m(y^{(j)}-\theta^Tx^{(j)})x_i^j,
δθiδJ(θ)=−m1∑j=1m(y(j)−θTx(j))xij,
θ
\theta
θ 的更新公式(
α
\alpha
α为收敛速度,一般取值为0到1之间):
θ
i
′
=
θ
i
−
α
∗
δ
J
(
θ
)
δ
θ
i
.
\theta_{i}^{'}=\theta_i-\alpha*\frac{\delta J(\theta)}{\delta \theta_i}.
θi′=θi−α∗δθiδJ(θ).
(批量梯度下降法详细代码步骤见下一篇文章,发出后第一时间更新。谢谢支持,希望对您有用,有问题可评论回复!)