斯坦福机器学习笔记-第二周

从单变量到多变量

在前面的学习中,假设函数$h_{\theta}(x)=\theta_0+\theta_1x$,当变量多于一个时,假设函数变为

$$h_{\theta}(x)=\theta_0+\theta_1x_1+\theta_2x_2+…+\theta_nx_n$$

进一步,该式子可以使用向量表示为:

$$h_\theta(x)=\theta^TX$$

其中:

$$\theta=\left[\begin{matrix}\theta_0\ \theta_1 \ …\ \theta_n \end{matrix}\right]\in R^{n+1}\quad X=\left[\begin{matrix}x_0\ x_1\ …\ x_n\end{matrix}\right]\in R^{n+1}$$

多变量的梯度下降

多变量的梯度下降类似于单变量,仍旧满足以下迭代公式:

$\theta_j:=\theta_j-\alpha\frac{1}{m}\sum\limits_{i=1}^m\left[h_\theta(x^i)-y^i\right]\cdot x_j^i\quad j:=0,1,…,n$

特征缩放(Feature scaling)

通常,在存在多个特征时,不同特征可能具有不同的尺度,比如$0<x_1<1;-1000<x_2<1000;…$。

在这种情况下,梯度下降可能存在迭代过慢、震荡频繁等问题。此时可以通过尺度缩放来避免这种问题。

特征缩放对梯度下降的影响

特征缩放可以采用均值归一化,其基本公式是:$x=\frac{x-\mu}{s}$,其中$\mu$代表均值,$s$代表最大最小值之差。

学习率的选择

学习率的影响

如上图,B:太小的学习率导致收敛速度非常缓慢、浪费时间;C:太大的学习率可能导致震荡甚至无法收敛。而A是较优的学习率。

正规方程解法

区别于梯度下降,对于线性回归,也可以使用正规方程进行求解,对每个参数求$J$的偏导数,可以得到参数$\theta=(X^TX)^{-1}X^Ty$

使用正规方程求解可以避免大量的迭代,使得过程简洁,但是对矩阵求逆是一个关于尺度的三次函数,也就是求解复杂度是$O(n^3)$,对于太大的矩阵,该操作也会非常耗时,因此什么时候使用梯度下降,什么时候使用正规方程呢?可以通过以下对比来抉择

梯度下降 正规方程
需要选择学习率 无需选择学习率
需要大量迭代 无需迭代
$O(kn^2)$ $O(n^3)$
对于n很大时也可以良好工作 如果n很大则会很慢

为了了解正规方程解法时间消耗对于n的敏感性,通过随机数来模拟得到如下结果:

正规方程解法时间花费随着n的变化

模拟代码在Octave上运行,代码如下:

%% normalization equation
%% author:yooongchun
%% time:2019-8-15 09:50:54

m=100;
N=[10 50 100 500 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900 2000 3000 4000 5000];
T=zeros(1,size(N)(2));
cnt=1;

for n=N
  X=randn(m,n+1);
  y=randn(m,1);
  tic
  theta=pinv(X'*X)*X'*y;
  T(cnt)=toc;
  disp(["calculate n: ",num2str(n)," time: ",num2str(T(cnt)),"s"]);
  cnt=cnt+1;
endfor

figure;
xlabel("size of n");
ylabel("time elapsed");
title("normalization equation time elapsed with size of n");
plot(N,T);

正规方程求解时的不可逆问题

当特征过多或者特征重复时会存在不可逆问题,在Octave编程中,可以使用pinv函数来求解(区别于inv函数),该函数总会得到一个结果,即时原矩阵不可逆,其结果称之为伪逆 。当然,也可以通过正则化 或者删除多余特征的方式来避免不可逆。

Octave 或Matlab的基本用法

Octave语法几乎跟Matlab一模一样,区别在于Matlab是收费软件,Octave是开源软件。

我有学过Matlab,所以没必要再去学习一遍,具体用法参考视频讲解。


   转载规则


《斯坦福机器学习笔记-第二周》查永春 采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。
  目录