紧接上一篇博客,多变量梯度下降法的表达式形式与单变量一致,只是变量的扩充以及每次迭代需要对每个变量进行操作(同样是所有变量一次性更新)。假设函数、代价函数和梯度下降的表达式分别如下: 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 DescentNormal 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;