第2周:多维特征
第 3 章 多维特征
3.1 多维特征和向量化
h
θ
(
x
)
=
θ
0
x
0
+
θ
1
x
1
+
θ
2
x
2
+
⋯
+
θ
n
x
n
h_{\theta}(x) = \theta_0 x_0 + \theta_1 x_1 + \theta_2 x_2 + \cdots + \theta_n x_n
hθ(x)=θ0x0+θ1x1+θ2x2+⋯+θnxn
此时模型中的参数是一个n+1维的向量,任何一个训练实例也都是n+1维的向量,特征矩阵X的维度是m*(n+1)。 因此公式可以简化为:
h
θ
(
x
)
=
θ
T
X
h_{\theta}(x) = \theta^T X
hθ(x)=θTX.
3.2 多变量梯度下降
与单变量线性回归类似,在多变量线性回归中,我们也构建一个代价函数,则这个代价函数是所有建模误差的平方和,即
J
(
θ
0
,
θ
1
,
…
,
θ
n
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J(\theta_0, \theta_1, \ldots, \theta_n) = \frac{1}{2m} \sum_{i=1}^{m} \left( h_\theta (x^{(i)}) - y^{(i)} \right)^2
J(θ0,θ1,…,θn)=2m1∑i=1m(hθ(x(i))−y(i))2
其中,
h
θ
(
x
)
=
θ
0
x
0
+
θ
1
x
1
+
θ
2
x
2
+
⋯
+
θ
n
x
n
h_{\theta}(x) = \theta_0 x_0 + \theta_1 x_1 + \theta_2 x_2 + \cdots + \theta_n x_n
hθ(x)=θ0x0+θ1x1+θ2x2+⋯+θnxn
我们的目标和单变量线性回归问题中一样,是要找出使得代价函数最小的一系列参数。 多变量线性回归的批量梯度下降算法为:
Repeat
\text{Repeat}
Repeat{
θ
j
:
=
θ
j
−
α
∂
J
∂
θ
j
J
(
θ
0
,
θ
1
,
.
.
.
,
θ
n
)
\theta_j := \theta_j - \alpha \frac{\partial J}{\partial \theta_j} J(\theta_0, \theta_1, ... , \theta_n)
θj:=θj−α∂θj∂JJ(θ0,θ1,...,θn)
}
即
Repeat
\text{Repeat}
Repeat{
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
\theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j} \frac{1}{2m} \sum_{i=1}^{m} \left( h_\theta \left( x^{(i)} \right) - y^{(i)} \right)^2
θj:=θj−α∂θj∂2m1∑i=1m(hθ(x(i))−y(i))2
}
求导后得到:
Repeat
\text{Repeat}
Repeat{
θ
j
:
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
\theta_j := \theta_j - \alpha \frac{1}{m} \sum_{i=1}^{m} \left(h_\theta(x^{(i)}) - y^{(i)}\right) x_{j}^{(i)} \quad
θj:=θj−αm1∑i=1m(hθ(x(i))−y(i))xj(i)
(simultaneously update
θ
j
for
j
=
0
,
1
,
…
,
n
)
\text{(simultaneously update } \theta_j \text{ for } j=0,1,\ldots,n)
(simultaneously update θj for j=0,1,…,n)
}
3.3 梯度下降法实践1-特征缩放
3.3.1 目的
不进行特征缩放会很难收敛。 以房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,尺寸的值为 0-2000平方英尺,而房间数量的值则是0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图能,看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。
如果我们能保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛。
3.3.2 三种scaling的方式
- Dividing by Maximum: X i → X i m a x ( X 1 , X 2 , . . . , X n ) X_i→ \frac{X_i}{max(X_1, X_2, ... , X_n)} Xi→max(X1,X2,...,Xn)Xi
- Mean Scaling: X i → X i − μ m a x − m i n X_i → \frac{X_i - \mu}{max - min} Xi→max−minXi−μ
- Z-score Standardization: x n = x n − μ s , x_n=\frac{x_n-\mu}{s}, xn=sxn−μ,其中 μ \mu μ 是平均值, s s s是标准差。
3.4 梯度下降法实践2-判断梯度下降是否收敛
- 通过图像判断:
- Automatic Convergence Test:
Let
ϵ
\epsilon
ϵ be
1
0
−
3
10^{-3}
10−3. If
J
(
w
,
b
)
J(w,b)
J(w,b) decreases by ≤
ϵ
\epsilon
ϵ in one iteration, then declare convergence.
3.5 梯度下降法实践3-学习率 α \alpha α
问题: 如何选择合适的学习率大小?
当我们运行梯度算法迭代的时候,我们有时会发现代价函数J随着迭代次数的增加呈现上下摆动的趋势,这时候就要想到可能是选取了不合适的学习率。
例如,如果
α
\alpha
α选择得过大,算法就会在J的最低点处不断横跳,极坏的情况下可能会导致代价函数J会不断增大,最终无法收敛。这时候的解决方案便是减小学习率
α
\alpha
α。
如果学习率过小,则达到收敛所需的迭代次数会非常高;
如果学习率过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。
通常可以考虑尝试些学习率: α \alpha α = 0.01, 0.03, 0.1, 0.3, 1, 3, 10.
3.6 多项式回归
房价预测问题
h
θ
(
x
)
=
θ
0
+
θ
1
×
f
r
o
n
t
a
g
e
+
θ
2
×
d
e
p
t
h
h_{\theta}(x)=\theta_{0}+\theta_{1}\times frontage+\theta_{2}\times depth
hθ(x)=θ0+θ1×frontage+θ2×depth
x
1
=
f
r
o
n
t
a
g
e
(
临街宽度
)
,
x
2
=
d
e
p
t
h
(
纵向深度
)
,
x
=
f
r
o
n
t
a
g
e
∗
d
e
p
t
h
=
a
r
e
a
(
面积
)
,则
:
x_{1}=frontage(临街宽度),x_{2}=depth(纵向深度),x=frontage*depth=area(面积),则:
x1=frontage(临街宽度),x2=depth(纵向深度),x=frontage∗depth=area(面积),则:
h
θ
(
x
)
=
θ
0
+
θ
1
x
h_{\theta}(x)=\theta_{0}+\theta_{1}x
hθ(x)=θ0+θ1x
线性回归并不适用于所有数据,有时我们需要曲线来适应我们的数据,比如一个二次方模型:
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
2
h_{\theta}(x)=\theta_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}^{2}
hθ(x)=θ0+θ1x1+θ2x22
或者三次方模型:
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
2
+
θ
3
x
3
3
h_{\theta}(x)=\theta_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}^{2}+\theta_{3}x_{3}^{3}
hθ(x)=θ0+θ1x1+θ2x22+θ3x33
通常我们需要先观察数据然后再决定准备尝试怎样的模型。另外,我们可以令:
x
2
=
x
2
2
,
x
3
=
x
3
3
x_{2}=x_{2}^{2},x_{3}=x_{3}^{3}
x2=x22,x3=x33,从而将模型转化为线性回归模型。
根据函数图形特性,我们还可以使:
h
θ
(
x
)
=
θ
0
+
θ
1
(
s
i
z
e
)
+
θ
2
(
s
i
z
e
)
2
h_{\theta}(x)=\theta_{0}+\theta_{1}(size)+\theta_{2}(size)^{2}
hθ(x)=θ0+θ1(size)+θ2(size)2
或者:
h
θ
(
x
)
=
θ
0
+
θ
1
(
s
i
z
e
)
+
θ
2
s
i
z
e
h_{\theta}(x)=\theta_{0}+\theta_{1}(size)+\theta_{2}\sqrt{size}
hθ(x)=θ0+θ1(size)+θ2size
注:如果我们采用多项式回归模型,在运行梯度下降算法前,特征缩放非常有必要。
3.7 正规方程
3.7.1 定义与计算过程
正规方程是一种用于求解线性回归模型参数的方法,它直接通过数学公式计算得出参数的解析解。以下是正规方程的计算步骤:
假设我们有以下线性回归模型:
y
=
X
θ
+
ϵ
y = X\theta + \epsilon
y=Xθ+ϵ
其中:
- y y y是一个大小为 ( n , 1 ) (n, 1) (n,1)的向量,表示观测到的目标值。
- X X X是一个大小为 ( n , m ) (n, m) (n,m)的矩阵,表示特征值,每一行对应一个样本,每一列对应一个特征,并且 X X X通常包含一个全为1的列,代表截距项 θ 0 \theta_0 θ0。
- θ \theta θ是一个大小为 ( m , 1 ) (m, 1) (m,1)的向量,表示模型参数。
-
ϵ
\epsilon
ϵ是一个大小为
(
n
,
1
)
(n, 1)
(n,1)的向量,表示误差项。
正规方程的目标是最小化平方误差,即最小化以下损失函数:
J ( θ ) = 1 2 n ( X θ − y ) T ( X θ − y ) J(\theta) = \frac{1}{2n} (X\theta - y)^T (X\theta - y) J(θ)=2n1(Xθ−y)T(Xθ−y)
为了找到使 J ( θ ) J(\theta) J(θ)最小的 θ \theta θ,我们需要对 J ( θ ) J(\theta) J(θ)关于 θ \theta θ进行求导,并令导数等于零。以下是计算步骤:
-
变形:
J ( θ ) = 1 2 n ( X θ − y ) T ( X θ − y ) = 1 2 n ( θ T X T − y T ) ( X θ − y ) J(\theta)=\frac{1}{2n}(X\theta-y)^T(X\theta-y)=\frac{1}{2n}(\theta^TX^T-y^T)(X\theta-y) J(θ)=2n1(Xθ−y)T(Xθ−y)=2n1(θTXT−yT)(Xθ−y)
= 1 2 n ( θ T X T X θ − θ T X T y − y T X θ − y T y ) =\frac{1}{2n}(\theta^TX^TX\theta-\theta^TX^Ty-y^TX\theta-y^Ty) =2n1(θTXTXθ−θTXTy−yTXθ−yTy) -
求导:
∂ J ( θ ) ∂ θ = ∂ ∂ θ [ 1 2 n ( θ T X T X θ − θ T X T y − y T X θ − y T y ) ] \frac{\partial J(\theta)}{\partial \theta} = \frac{\partial}{\partial \theta} \left[ \frac{1}{2n}(\theta^TX^TX\theta-\theta^TX^Ty-y^TX\theta-y^Ty)\right] ∂θ∂J(θ)=∂θ∂[2n1(θTXTXθ−θTXTy−yTXθ−yTy)]
这里对矩阵求导,需要用到以下2个矩阵的求导法则:
d A B d B = A T \frac{dAB}{dB}=A^T dBdAB=AT
d X T A X d X = 2 A X \frac{dX^TAX}{dX}=2AX dXdXTAX=2AX -
应用法则:
∂ J ( θ ) ∂ θ = 1 2 n ( 2 X T X θ − X T y − ( y T X ) T − 0 ) \frac{\partial J(\theta)}{\partial \theta}=\frac{1}{2n}(2X^TX\theta-X^Ty-(y^TX)^T-0) ∂θ∂J(θ)=2n1(2XTXθ−XTy−(yTX)T−0)
= 1 2 n ( 2 X T X θ − X T y − X T y − 0 ) = 1 n X T X θ − X T y =\frac{1}{2n}(2X^TX\theta-X^Ty-X^Ty-0)=\frac{1}{n}X^TX\theta-X^Ty =2n1(2XTXθ−XTy−XTy−0)=n1XTXθ−XTy -
令导数等于零:
1 n X T ( X θ − y ) = 0 \frac{1}{n} X^T (X\theta - y) = 0 n1XT(Xθ−y)=0 -
求解 θ \theta θ:
θ = ( X T X ) − 1 X T y \theta = (X^T X)^{-1} X^T y θ=(XTX)−1XTy
这就是正规方程的解。注意,这里假设 X T X X^T X XTX是可逆的,即矩阵 X X X的列是线性独立的。如果 X X X包含一个全为1的列作为截距项,那么 X T X X^T X XTX通常总是可逆的。
3.7.2 Python代码实现
在实际应用中,计算 β \beta β时,我们会使用数值计算库(如 NumPy)来计算矩阵的逆和乘法,因为手动计算这些矩阵运算是非常复杂和耗时的。下面是一个使用 Python 和 NumPy 来计算正规方程解的简单示例:
import numpy as np
# 假设 X 是特征矩阵,y 是目标值向量
X = np.array([[1, x1], [1, x2], ..., [1, xn]]) # 包含截距项
y = np.array([y1, y2, ..., yn])
# 使用 NumPy 计算正规方程解
beta = np.linalg.inv(X.T @ X) @ X.T @ y
3.7.3 与梯度下降的比较
特性 | 正规方程 (Normal Equation) | 梯度下降 (Gradient Descent) |
---|---|---|
原理 | 一次运算,直接得出解析解 | 多次迭代,逐步逼近最优解 |
计算复杂度 | O ( n 3 ) O(n^3) O(n3),适用于特征较少的情况 | O ( k n 2 ) O(kn^2) O(kn2),k 是迭代次数,适用于特征较多的情况 |
适用性 | 特征数量较少时更有效,否则运算代价大。(通常适用n<10000) | 特征数量非常多时更适用 |
学习率 | 不需要选择学习率 | 需要选择合适的学习率,影响收敛速度和结果 |
优点 | 一次计算得出结果,不需要迭代 | 适用于大规模数据集,灵活性好 |
缺点 | 当特征非常多时,计算量大,可能不适用 | 需要多次迭代,学习率选择不当可能导致问题 |
数据要求 | 特征不能有严重的多重共线性 | 特征需要归一化,以保证收敛速度 |
局部最小值 | 对于线性回归,正规方程总能得到全局最小值 | 对于非线性问题,可能会卡在局部最小值 |
总结,只要特征变量的数目并不大,标准方程是一个很好的计算参数 θ \theta θ的替代方法。
标签:吴恩达,frac,TX,机器,梯度,特征,多维,theta,partial From: https://blog.csdn.net/bff66/article/details/140755367