斯坦福机器学习笔记-第二周
大约 3 分钟
这篇文章是斯坦福大学吴恩达老师机器学习课程第二周的笔记
从单变量到多变量
在前面的学习中,假设函数
进一步,该式子可以使用向量表示为:
其中:
多变量的梯度下降
多变量的梯度下降类似于单变量,仍旧满足以下迭代公式:
特征缩放(Feature scaling)
通常,在存在多个特征时,不同特征可能具有不同的尺度,比如
在这种情况下,梯度下降可能存在迭代过慢、震荡频繁等问题。此时可以通过尺度缩放来避免这种问题。
特征缩放可以采用均值归一化,其基本公式是:
学习率的选择
如上图,B:太小的学习率导致收敛速度非常缓慢、浪费时间;C:太大的学习率可能导致震荡甚至无法收敛。而A是较优的学习率。
正规方程解法
区别于梯度下降,对于线性回归,也可以使用正规方程进行求解,对每个参数求
使用正规方程求解可以避免大量的迭代,使得过程简洁,但是对矩阵求逆是一个关于尺度的三次函数,也就是求解复杂度是
梯度下降 | 正规方程 |
---|---|
需要选择学习率 | 无需选择学习率 |
需要大量迭代 | 无需迭代 |
对于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,所以没必要再去学习一遍,具体用法参考视频讲解。