跳至主要內容

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

yczha大约 3 分钟Machine LearningMachine Learning

这篇文章是斯坦福大学吴恩达老师机器学习课程第二周的笔记

从单变量到多变量

在前面的学习中,假设函数hθ(x)=θ0+θ1x,当变量多于一个时,假设函数变为

hθ(x)=θ0+θ1x1+θ2x2+...+θnxn

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

hθ(x)=θTX

其中:

θ=[θ0θ1...θn]Rn+1X=[x0x1...xn]Rn+1

多变量的梯度下降

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

θj:=θjα1mi=1m[hθ(xi)yi]xjij:=0,1,...,n

特征缩放(Feature scaling)

通常,在存在多个特征时,不同特征可能具有不同的尺度,比如0<x1<1;1000<x2<1000;...

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

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

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

学习率的选择

学习率的影响
学习率的影响

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

正规方程解法

区别于梯度下降,对于线性回归,也可以使用正规方程进行求解,对每个参数求J的偏导数,可以得到参数θ=(XTX)1XTy

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

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

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

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

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

%% normalization equation
%% author:yooongchun
%% time:2019-08-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,所以没必要再去学习一遍,具体用法参考视频讲解。