文章目录
多维特征
- 目前为止,我们探讨了单变量/特征的回归模型,现在增添更多特征后,我们引入一系列新的注释:
- n 代表特征量的数目
- x ( i ) x^{(i)} x(i) 代表第 i 个训练样本的输入特征值,是特征矩阵中的第 i 行,是一个向量(vector)。
- x j ( i ) x_j^{(i)} xj(i) 代表第 i 个训练样本中的第 j 个特征量的值。
- 支持多变量的假设 h 表示为: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n h_\theta(x) = \theta_0 + \theta_1{x_1} + \theta_2{x_2} + \cdots + \theta_n{x_n} hθ(x)=θ0+θ1x1+θ2x2+⋯+θnxn 为了方便表示,引入 x 0 = 1 x_0 = 1 x0=1 ,这意味着,对于第 i 个样本,都有一个向量 x ( i ) x^{(i)} x(i),并且 x 0 ( i ) = 1 x^{(i)}_0 = 1 x0(i)=1,我们定义了一个额外的第 0 个特征量。则 x ( i ) = [ x 0 ( i ) , x 1 ( i ) , x 2 ( i ) , ⋯ x n ( i ) ] T x^{(i)} = [x^{(i)}_0,x^{(i)}_1,x^{(i)}_2,\cdots x^{(i)}_n ]^T x(i)=[x0(i),x1(i),x2(i),⋯xn(i)]T,是一个 n+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 维的向量 θ = [ θ 0 , θ 1 , θ 2 , ⋯ θ n ] T \theta = [\theta_0,\theta_1,\theta_2,\cdots\theta_n ]^T θ=[θ0,θ1,θ2,⋯θn]T,任何一个训练实例都是一个从 0 开始标记的 n + 1 维的向量 X = [ x 0 , x 1 , x 2 , ⋯ x n ] T X = [x_0,x_1,x_2,\cdots x_n ]^T X=[x0,x1,x2,⋯xn]T, 因此公式可以简化为: h θ ( x ) = θ T X h_\theta(x) = \theta^TX hθ(x)=θTX
- 举例:
- 如上图:
x 2 ( 2 ) = 3 , x 3 ( 2 ) = 2 x_2^{(2)} = 3,x_3^{(2)} = 2 x2(2)=3,x3(2)=2
- 如上图:
多变量梯度下降法
多变量线性回归:
- 假设函数: h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n = θ T x h_\theta(x) = \theta_0{x_0} + \theta_1{x_1} + \theta_2{x_2} + \cdots + \theta_n{x_n} = \theta^Tx hθ(x)=θ0x0+θ1x1+θ2x2+⋯+θnxn=θTx
- 参数向量: θ = [ θ 0 θ 1 , θ 2 , ⋯ θ n ] T \theta = [\theta_0\theta_1,\theta_2,\cdots\theta_n ]^T θ=[θ0θ1,θ2,⋯θn]T
- 代价函数: J ( θ 0 , θ 1 , ⋯ θ n ⏟ θ ) = J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\underbrace{\theta_0,\theta_1,\cdots\theta_n}_\theta) = J(\theta) = \frac{1}{2m}\sum_{i=1}^{m}{(h_\theta({x^{(i)}}) - y^{(i)})^2} J(θ θ0,θ1,⋯θn)=J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2 J 不再是 n + 1 个参数的函数,而是参数 θ \theta θ 这个向量的函数。 θ = [ θ 0 , θ 1 , θ 2 , ⋯ θ n ] T \theta = [\theta_0,\theta_1,\theta_2,\cdots\theta_n ]^T θ=[θ0,θ1,θ2,⋯θn]T
- 我们的目标和单变量线性回归问题中一样,是要找出使得代价函数最小的一系列参数。多变量线性回归的批量梯度下降算法为:
R
e
p
e
a
t
{
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
)
(
f
o
r
j
=
0
,
⋯
,
n
)
}
Repeat\{\\ \theta_j := \theta_j - \alpha \frac{\partial}{\partial\theta_j}J(\theta)\ \ (for \ j = 0,\cdots, n) \\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}
Repeat{θj:=θj−α∂θj∂J(θ) (for j=0,⋯,n) }
求导数后得到: R e p e a t { θ j : = θ j − α 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x j ( i ) ) } Repeat\{\\ \theta_j := \theta_j - \alpha\frac{1}{m}\sum_{i=1}^{m}{((h_\theta(x^{(i)}) -y^{(i)})\cdot x^{(i)}_j)} \\ \ \ \ \ \ \ \ \ \ \ \ \ \ \} Repeat{θj:=θj−αm1i=1∑m((hθ(x(i))−y(i))⋅xj(i)) } - 同时更新,当
n
≥
1
n \ge1
n≥1 时:
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x 0 ( i ) ) \theta_0 := \theta_0 - \alpha\frac{1}{m}\sum_{i=1}^{m}{((h_\theta(x^{(i)}) -y^{(i)})\cdot x^{(i)}_0)} θ0:=θ0−αm1i=1∑m((hθ(x(i))−y(i))⋅x0(i))
θ 1 : = θ 1 − α 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x 1 ( i ) ) \theta_1:= \theta_1 - \alpha\frac{1}{m}\sum_{i=1}^{m}{((h_\theta(x^{(i)}) -y^{(i)})\cdot x^{(i)}_1)} θ1:=θ1−αm1i=1∑m((hθ(x(i))−y(i))⋅x1(i))
θ 2 : = θ 2 − α 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x 2 ( i ) ) \theta_2:= \theta_2 - \alpha\frac{1}{m}\sum_{i=1}^{m}{((h_\theta(x^{(i)}) -y^{(i)})\cdot x^{(i)}_2)} θ2:=θ2−αm1i=1∑m((hθ(x(i))−y(i))⋅x2(i))
⋯ \cdots ⋯
我们开始随机选择一系列的参数值,计算所有的预测结果后,再给所有的参数一个新的值,如此循环直到收敛到全局最小值。
梯度下降法实践1-特征缩放(feature scaling)
- 在我们面对多维特征问题的时候,我们要保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛。
- 举例:以房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,尺寸的值为 0-2000平方英尺,而房间数量的值则是0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图能,看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。
- 一种有效的方法是进行特征缩放,使所有特征的取值都尽量缩放到**-1到1**之间
(
−
1
≤
x
i
≤
1
)
(- 1 \le x_i \le 1)
(−1≤xi≤1)。如图:
- 均值归一化的工作(不需要应用在
x
0
x_0
x0 上,因为
x
0
=
1
x_0 = 1
x0=1)
x i = x i − μ i s i x_i = \frac{x_i - \mu_i}{s_i} xi=sixi−μi μ i \mu_i μi 是训练集中特征 x i x_i xi 的平均值,而 s i s_i si 是该特征值的范围(最大值减最小值)或者把 s i s_i si 设为变量的标准差; x i = x i − μ i σ i \\x_i = \frac{x_i - \mu_i}{\sigma_i} xi=σixi−μi
- 均值归一化的工作(不需要应用在
x
0
x_0
x0 上,因为
x
0
=
1
x_0 = 1
x0=1)
梯度下降法实践2-学习率
- 梯度下降算法的更新规则:
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
)
\theta_j := \theta_j - \alpha \frac{\partial}{\partial\theta_j}J(\theta)
θj:=θj−α∂θj∂J(θ)
- “debugging”:如何确保梯度下降正确运行;
- 如何正确选择学习率 α。
- 梯度下降算法收敛所需要的迭代次数根据模型的不同而不同,我们不能提前预知,我们可以绘制迭代次数(横坐标) 和 代价函数(纵坐标) 的图表来观测算法在何时趋于收敛。
- 这条曲线显示的是梯度下降的每步迭代后代价函数的值,如果梯度下降算法正常工作的话,每一步迭代之后的 J ( θ ) J(\theta) J(θ) 都应该下降。这条曲线的一个用处在于,它可以帮你判断算法是否已经收敛。
- 也有一些自动测试是否收敛的方法,如果代价函数
J
(
θ
)
J(\theta)
J(θ) 一步迭代后的下降小于一个很小的值
ϵ
(
1
0
−
3
)
\epsilon(10^{-3})
ϵ(10−3),这个测试就判断函数已收敛。但通常要选择一个合适的阈值
ϵ
\epsilon
ϵ 是相当困难的,所以看上面这样的图表更好,看这种曲线图还可以告诉你或提前警告你,算法没有正常工作。
- 如果 α 太小:收敛速度慢,达到收敛所需的迭代次数会非常高。
- 如果 α 太大:每一次迭代过程中 J ( θ ) J(\theta) J(θ) 并不会下降, 将会不断的冲过最小值导致无法收敛。 J ( θ ) J(\theta) J(θ) 如下图所示:
- 当运行梯度下降算法时,通常可以考虑尝试一系列 α 值:0.001、0.01、0.1、1…每隔 10 倍取一个值,然后对于这些不同的 α 值绘制 J ( θ ) J(\theta) J(θ) 随迭代步数变化的曲线,然后选择使 J ( θ ) J(\theta) J(θ) 快速下降的一个 α 值。
特征和多项式回归
- 线性回归并不适用于所有数据,有时我们需要曲线来适应我们的数据,使用多元线性回归的方法,我们可以对算法做一个简单的修改,有时可以得到更好的模型。比如一个二次方模型: 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 。
- 更恰当的模型:
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)+θ2(size) - 注:如果我们采用多项式回归模型,在运行梯度下降算法前,特征缩放非常有必要。
正规方程
- 区别于梯度下降算法(迭代方法的直接解法),对于某些线性回归问题,正规方程方法可以更好地一次性求得参数 θ \theta θ 的最优值。
- 举例:
- m m m 是训练样本数量, n + 1 n+1 n+1 是特征变量数;
- 首先补充出 x 0 = 1 x_0 = 1 x0=1 这一列,然后写出包含训练样本所有特征变量的矩阵 X , m × ( n + 1 ) X ,m\times (n+1) X,m×(n+1) 维向量;构建一个训练集结果向量 y , m y,m y,m 维向量; x ( i ) = [ x 0 ( i ) , x 1 ( i ) , x 2 ( i ) , x 3 ( i ) , x 4 ( i ) ] T x^{(i)} = [x^{(i)}_0,x^{(i)}_1,x^{(i)}_2,x^{(i)}_3,x^{(i)}_4]^T x(i)=[x0(i),x1(i),x2(i),x3(i),x4(i)]T, X = [ x 0 , x 1 , x 2 , x 3 , x 4 ] T X = [x_0,x_1,x_2,x_3,x_4]^T X=[x0,x1,x2,x3,x4]T。
- 正规方程是通过求解
∂
∂
θ
j
J
(
θ
j
)
=
0
\frac{\partial}{\partial\theta_j}J(\theta_j) = 0
∂θj∂J(θj)=0 这个方程来找出使得代价函数最小的
θ
\theta
θ,利用正规方程解出向量
θ
=
(
X
T
X
)
−
1
X
T
y
\theta = (X^TX)^{-1}X^Ty
θ=(XTX)−1XTy
- 在 Octave 中,正规方程写作:
pinv(X'*X)*X'*y
正规方程在矩阵不可逆情况下的解决方法
- 不可逆矩阵被称为奇异或退化矩阵,通常有两种最常见的原因:
- 包含了多余的特征,如同时包含英尺为单位的尺寸和米为单位的尺寸两个线性相关的特征(1 米等于 3.28 英尺)。
- 特征数量 n 大于训练集的数量 m。
梯度下降与正规方程的比较
梯度下降 | 正规方程 |
---|---|
需要选择学习率 α | 不需要 |
需要多次迭代 | 一次运算得出 |
当特征数量 n 大时也能较好适用 | 需要计算 ( X T X ) − 1 (X^TX)^{-1} (XTX)−1如果特征数量 n 较大则运算代价大,因为矩阵逆的计算时间复杂度为 O ( n 3 ) O(n^3) O(n3),通常来说当 n 小于10000 时还是可以接受的 |
适用于各种类型的模型 | 只适用于线性模型,不适合逻辑回归模型等其他模型 |