紧接上一篇博客,多变量梯度下降法的表达式形式与单变量一致,只是变量的扩充以及每次迭代需要对每个变量进行操作(同样是所有变量一次性更新)。假设函数、代价函数和梯度下降的表达式分别如下:
h
θ
(
x
)
=
θ
T
x
h_\theta(x)=\theta^Tx
hθ(x)=θTx
J
(
θ
)
=
1
2
m
∑
i
=
0
m
(
h
θ
(
x
i
)
−
y
i
)
2
J(\theta)=\frac{1}{2m}\sum_{i=0}^{m}(h_\theta(x_i)-y_i)^2
J(θ)=2m1i=0∑m(hθ(xi)−yi)2KaTeX parse error: No such environment: align at position 7: \begin{̲a̲l̲i̲g̲n̲}̲\theta_j:=\thet…
对于多变量,往往每个特征变量的取值范围差异很大,在利用梯度下降法进行迭代运算求
J
(
θ
)
J(\theta)
J(θ)的最小值时,迭代路径受数值大的变量影响较大,而数值小的变量可能会在最优值附近反复振荡,造成迭代路径的曲折,收敛缓慢。因此为了更快收敛,一般把各变量归一化成取值范围大概一致(feature scaling)。一般取
−
1
≤
x
i
≤
1
-1\leq x_i \leq 1
−1≤xi≤1或者
−
0.5
≤
x
i
≤
0.5
-0.5 \leq x_i \leq 0.5
−0.5≤xi≤0.5,(不是严格规定)。对于一个一般变量,通常取
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是取值范围(max - min),或者
s
i
s_i
si取为标准差。
[外链图片转存失败(img-69raoK7f-1562665150709)(https://img-my.csdn.net/uploads/201206/28/1340891220_5273.jpg)]
对于回归问题,显然假设函数 h θ ( x ) h_\theta(x) hθ(x)并不是与每个特征变量均成线性关系,可能会出现如$h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2^2 $的形式,这称为多项式回归(Polynomial Regression)。
但是,可以通过适当变形把其转变为线性回归。在此例子中,令 x 2 = x 2 2 x_2=x_2^2 x2=x22,则 h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2 hθ(x)=θ0+θ1x1+θ2x2。此外,可令 x 3 = x 1 x 2 x_3=x_1x_2 x3=x1x2, x 4 = x 1 x_4=\sqrt{x_1} x4=x1等各种不同方式对变量变形,使其成为线性回归问题。运用变形后,变量范围的归一化就变得尤为重要。
另一种解线性回归问题的方法是标准方程法(Normal Equation),运用该方法,可以不需要迭代而直接求出
θ
\theta
θ。该方程如下:
θ
=
(
X
T
X
)
−
1
X
T
y
\theta=(X^TX)^{-1}X^{T}y
θ=(XTX)−1XTy
这里
θ
=
[
θ
0
θ
1
θ
2
.
.
.
]
\theta =\left[\begin{matrix}\theta_0\\\theta_1\\\theta_2\\...\end{matrix}\right]
θ=⎣⎢⎢⎡θ0θ1θ2...⎦⎥⎥⎤,
y
=
[
y
0
y
1
y
2
.
.
.
]
y=\left[\begin{matrix}y_0\\y_1\\y_2\\...\end{matrix}\right]
y=⎣⎢⎢⎡y0y1y2...⎦⎥⎥⎤,
X
=
[
x
0
(
1
)
x
1
(
1
)
x
2
(
1
)
.
.
.
x
0
(
2
)
x
1
(
2
)
x
2
(
2
)
.
.
.
x
0
(
3
)
x
1
(
3
)
x
2
(
3
)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
]
X=\left[\begin{matrix}x_0^{(1)}&x_1^{(1)}&x_2^{(1)}&...\\x_0^{(2)}&x_1^{(2)}&x_2^{(2)}&...\\x_0^{(3)}&x_1^{(3)}&x_2^{(3)}&...\\...&...&...&...\end{matrix}\right]
X=⎣⎢⎢⎢⎡x0(1)x0(2)x0(3)...x1(1)x1(2)x1(3)...x2(1)x2(2)x2(3)...............⎦⎥⎥⎥⎤
例子如下:
这个结论来源于线性代数中的投影,具体推导参考http://open.163.com/movie/2010/11/J/U/M6V0BQC4M_M6V2AJLJU.html
梯度下降法和标准方程法的比较:
Gradient Descent | Normal Equation |
---|---|
需要选择合适的参数 α \alpha α | 不需要选择参数 |
需要多次迭代 | 不需要迭代 |
算法复杂度 O ( k n 2 ) O(kn^2) O(kn2) | O ( n 3 ) O(n^3) O(n3),因要计算 X T X X^TX XTX的逆矩阵 |
当样本数n很大时依然高效 | 样本数n很大时计算慢 |
如果
X
T
X
X^TX
XTX不可逆,有以下两方面原因:
1、存在多余的特征变量,如其中两个特征变量存在线性关系,如
x
2
=
2
x
1
x_2=2x_1
x2=2x1;
2、相比较样本数据,特征变量太多,即
m
<
n
m<n
m<n,这里
m
m
m是样本个数,
n
n
n是特征变量个数
在Octave/Matlab中,用pinv()代替inv()实现矩阵取逆,即使矩阵不可逆时也可以得到正确的结果。
即标准方程的代码实现为:
theta = pinv(X'*X)*X'*y;