吴恩达ML WEEK2 线性回归+MATLAB


0 总结

学习时间:2022.9.5 ~ 2022.9.11

  • 学习了多变量的线性回归的公式表达、梯度下降方法,以及如何进行特征缩放,如何选择学习率。
  • 学习了多变量的线性回归的另一种求解参数的方法——正规方程,以及正规方程中不可逆的情况的求解方法。
  • 比较了梯度下降和正规方程两种方法的优劣,学会在何种情况下使用何种方法的诀窍。
  • 复习了matlab对数据的基本操作,包括:矩阵的运算、切片、绘图等等,还复习了while、for语句的语法、函数的编写方法。
  • 学习如何用向量代替循环,从而使运算速度加快。

1 多变量线性回归


1.1 多维特征

变量写法及定义
在这里插入图片描述

n n n=特征的数量,比如这个例子中,有4个特征(四列)——房子大小( x 1 x_1 x1)、卧室数量( x 2 x_2 x2)、有几层( x 3 x_3 x3)、房子使用时间( x 4 x_4 x4)。
m m m=样本大小,比如这个例子中,有47行,47个样本
x ( i ) x^{(i)} x(i)=样本的第i个输入,如图中粉色线条所示, x ( 2 ) = [ 1416 3 2 40 ] x^{(2)}=\begin{bmatrix} 1416 \\ 3 \\ 2 \\ 40 \end{bmatrix} x(2)= 14163240
x j ( i ) x^{(i)}_j xj(i)=第i个输入的第j个特征, x 3 ( 2 ) x^{(2)}_3 x3(2)=2

多元线性回归表达式
在这里插入图片描述


1.2 多元梯度下降

在这里插入图片描述

从上到下依次是:
假设函数
参数:n+1维向量
代价函数
梯度下降法

在这里插入图片描述

左侧是之前推倒的只有一个特征的梯度下降方法。
右侧是多元线性规划的梯度下降方法,注意, x 0 x_0 x0=1,两者本质上是一样的。


1.3 梯度下降法实践——特征缩放

Q:为什么要进行特征缩放?
A:以房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,尺寸的值为 0-
2000 平方英尺,而房间数量的值则是 0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图能, 看出图像会显得很扁梯度下降算法需要非常多次的迭代才能收敛(因为梯度下降走得路径很曲折)。解决的方法是尝试将所有特征的尺度都尽量缩放到-1 到 1 之间

归一化(mean mormalization)
x n ( i ) = x n ( i ) − u n s n x_n^{(i)}=\frac{x_n^{(i)}-u_n}{s_n} xn(i)=snxn(i)un其中, u n u_n un是平均值, s n s_n sn是标准差,也可以用最大值-最小值代替。这样算得的x会在-0.5到0.5之间。


1.4 梯度下降法实践——学习率

Q:如何判断梯度下降已经收敛了?
A:在进行迭代的过程中画出下面的图,横坐标表示迭代次数,纵坐标表示对应的 J ( θ ) J(\theta) J(θ)的值。在每次迭代之后 J ( θ ) J(\theta) J(θ)应该不断减小。可以看到,第300次迭代和第400次迭代 J ( θ ) J(\theta) J(θ)的值都差不多,因此可以选择迭代300次。(另:也可以在每次迭代后判断 J ( θ ) J(\theta) J(θ)是否小于某个很小的数比如 1 0 − 3 10^{-3} 103来判断收敛。但是这个很小的数不好取值)
在这里插入图片描述

学习率 α \alpha α的选择
α \alpha α太小:收敛慢
α \alpha α太大: J ( θ ) J(\theta) J(θ)在每次迭代不一定会减小,甚至不会收敛
解决方法:尝试不同的学习率(…,0.001,0.01,0.1,1,…),通过观察 J ( θ ) J(\theta) J(θ)曲线判断学习率是否可行。


1.5 特征和多项式回归


1.6 正规方程

到目前为止,我们都在使用梯度下降算法,但是对于某些线性回归问题,正规方程方法
是更好的解决方案。
正规方程是通过求解下面的方程来找出使得代价函数最小的参数的:
∂ J ( θ j ) ∂ θ j = 0 \frac{\partial J(\theta_j)}{\partial \theta_j}=0 θjJ(θj)=0
假设有m个训练样本 ( x ( 1 ) , y ( 1 ) ) , . . . , ( x ( m ) , y ( m ) ) (x^{(1)},y^{(1)}),...,(x^{(m)},y^{(m)}) (x(1),y(1)),...,(x(m),y(m));n个特征,则:
x ( i ) = [ x 0 ( i ) x 1 ( i ) x 2 ( i ) ⋮ x n ( i ) ] x^{(i)}=\begin{bmatrix} x^{(i)}_0 \\ x^{(i)}_1 \\ x^{(i)}_2 \\ \vdots \\ x^{(i)}_n\end{bmatrix} x(i)= x0(i)x1(i)x2(i)xn(i) x ( i ) x^{(i)} x(i)表示第i个输入样本,是n+1维向量。则:
X = [ ( x ( 1 ) ) T ( x ( 2 ) ) T ( x ( 3 ) ) T ⋮ ( x ( m ) ) T ] X=\begin{bmatrix} (x^{(1)})^T \\ (x^{(2)})^T \\ (x^{(3)})^T \\ \vdots \\ (x^{(m)})^T\end{bmatrix} X= (x(1))T(x(2))T(x(3))T(x(m))T ,X是 m × ( n + 1 ) m\times(n+1) m×(n+1)的设计矩阵。利用正规方程解出向量 θ = ( X T X ) − 1 X T y \textcolor{Red}{\theta=(X^TX)^{-1}X^Ty} θ=(XTX)1XTy
以下表示数据为例:
在这里插入图片描述

如图,每一列表示特征,每一行表示每个样本,一共4个样本,即m=4,n=4
由此得到训练集特征矩阵为 X X X(包含了 x 0 = 1 x_0=1 x0=1),并且训练结果为 y y y,利用正规方程解出向量 θ = ( X T X ) − 1 X T y \textcolor{Red}{\theta=(X^TX)^{-1}X^Ty} θ=(XTX)1XTy

Q:什么时候用正规方程法,什么时候用梯度下降?
A:特征个数小于10000时可以选择使用正规方程法。

梯度下降正规方程
需要选择学习率不需要选择学习率
需要多次迭代一次运算得出
当特征数量 n 大时也能较好适用如果特征数量 n 较大则运算代价大,因为矩阵逆的计算时间复杂度为 O(n3),通常来说当 n 小于 10000 时还是可以接受的
适用于各种类型的模型只适用于线性模型,不适合逻辑回归模型等其他模型

1.7 正规方程及不可逆性

Q:什么时候 X X T XX^T XXT会不可逆?
A:①特征多余——删除多余的特征
②特征数远大于样本数( n ≥ m n\geq m nm)——删除部分的特征或正则化


2 Octave教程


2.1 基本操作

命令代码结果
次方2^62的6次方为64
赋值a=‘12’给a赋值为字符串‘12’
判断等于1==2结果为0
不等于1~=2结果为1
1&&0结果为0
1||0结果为1
异或XOR(1,0)结果为1
圆周率pi
输出dispdisp(a)输出a的值;
disp(sprintf(‘%0.2f’,a))
建立矩阵A=[1 2;3 4;5 6]三行两列的矩阵
V=1:0.1:2集合V是一组值,从数值 1 开始,增量或说是步长为 0.1,直到增加到 2,按照这样的方法对向量 V 操作,可以得到一个行向量[1, 1.1, 1.2, …,1.9, 2]
ones(2,3)
2*ones(2,3)
生成2行3列单位阵
生成2行3列值都为2的矩阵
zeros(1,3)生成1行3列的零矩阵
rand(3,3)生成3行3列的矩阵,每个数都是(0,1)之间的随机数
randn(1,3)生成1行2列的矩阵,每个数满足期望为0、方差为1的高斯分布
hist(w)
hist(w,50)
绘制直方图
绘制50条的直方图
eye(6)生成6x6的单位阵

2.2 移动数据

size
假设A是一个3x2的矩阵,size(A)返回的是[3 , 2];size(A,1)将返回3,即A的第一个维度;size(A,2)将返回2,即A的第二个维度。

length
假设有一个向量v=[1 2 3 4], length(v)返回4;length(A)返回3,因为A最大维度是3。

读取和储存数据
载入数据load(‘featureX.dat’)
删除某个变量clear featuresX
将变量v储存在hello.mat文件中save hello.mat v || save hello.txt v -ascii(将数据v以askii码形式存储在hello.txt中)

操作数据
!矩阵索引从1开始
假设 A = [ 1 2 3 4 5 6 ] A=\begin{bmatrix}1&2\\3&4\\5&6\end{bmatrix} A= 135246

操作解释结果
A(3,2)索引到A矩阵的第三行第二列数据6
A(2,:)返回第二行的所有元素 [ 3 4 ] \begin{bmatrix}3&4\end{bmatrix} [34]
A([1 3] ,: )取 A 矩阵第一个索引值为 1 或 3 的元素, 也就是说取 A 矩阵的第一行和第三行的每一列,冒号表示的是取这两行的每一列元素 [ 1 2 5 6 ] \begin{bmatrix}1&2\\5&6\end{bmatrix} [1526]
A(:,2)= [ 10 ; 11 ; 12 ] \begin{bmatrix}10;&11;&12\end{bmatrix} [10;11;12]取 A 矩阵的第二列, 然后将它赋值为 10 11 12 A = [ 1 10 3 11 5 12 ] A=\begin{bmatrix}1&10\\3&11\\5&12\end{bmatrix} A= 135101112
A = [A, [100, 101, 102]]在原矩阵的右边附加了一个新的列矩阵 A = [ 1 10 100 3 11 101 5 12 102 ] A=\begin{bmatrix}1&10&100\\3&11&101\\5&12&102\end{bmatrix} A= 135101112100101102
C=[A B]矩阵 A 在左边, 矩阵B 在右边, 这样组成了 C 矩阵
C = [A; B]把两个矩阵放在一起, 只不过现在是上下排列, 所以现在 A 在上面 B 在下面

2.3 计算数据

初始化:
A = [ 1 2 3 4 5 6 ] , B = [ 11 12 13 14 15 16 ] , C = [ 1 1 2 2 ] , V = [ 1 2 3 ] A=\begin{bmatrix}1&2\\3&4\\5&6\end{bmatrix},B=\begin{bmatrix}11&12\\13&14\\15&16\end{bmatrix},C=\begin{bmatrix}1&1\\2&2\end{bmatrix},V=\begin{bmatrix}1\\2\\3\end{bmatrix} A= 135246 ,B= 111315121416 ,C=[1212],V= 123

操作解释结果
A( : )将矩阵中的元素按列存储得到一个长列向量 [ 1 3 5 2 4 6 ] \begin{bmatrix}1\\3\\5\\2\\4\\6\end{bmatrix} 135246
A .* B矩阵 A 中的每一个元素与矩阵 B 中的对应元素相乘
A .^ 2矩阵 A 中每一个元素平方
1 ./ A得到 A 中每一个元素的倒数(点号表示对每一个元素进行操作)
log(A)
exp(A)
abs(A)
-A
A+1
每个元素进行求对数运算
每个元素进行指数运算
每个元素取绝对值
每个元素取相反数
每个元素加一
v+ones(length(v),1)每个元素加一
A’转置
val=max(V)
[val, ind] = max(V)
求向量A的最大值
注意V 是一个矩阵的话, 这样做就是对每一列求最大值
val=3,ind=3
max(A, B)
max(A,[],1)
max(A,[],2)
逐元素比较A和B的最大值,返回3x3的矩阵
得到每一列的最大值,这里的 1 表示取 A 矩阵第一个维度的最大值
得到每一行的最大值
A<3将进行逐元素的运算, 元素小于3的返回1,否则返回 0 [ 1 1 0 0 0 0 ] \begin{bmatrix}1&1\\0&0\\0&0\end{bmatrix} 100100
find(A<3)寻找小于3的元素的下标
[r,c] = find( A>=7 )找出所有 A 矩阵中大于等于 7 的元素, 因此, r 和c 分别表示行和列, 这就表示, 第一行第一列的元素大于等于 7, 第三行第二列的元素大于等于 7, 第二行第三列的元素大于等于 7 r = [ 1 3 2 ] r=\begin{bmatrix}1\\3\\2\end{bmatrix} r= 132
c = [ 1 2 3 ] c=\begin{bmatrix}1\\2\\3\end{bmatrix} c= 123
A = magic(3)magic 函数将返回一个矩阵, 称为魔方阵或幻方 (magic squares), 它们具有以下这样的数学性质: 它们所有的行和列和对角线加起来都等于相同的值 [ 8 1 6 3 5 7 4 9 2 ] \begin{bmatrix}8&1&6\\3&5&7\\4&9&2\end{bmatrix} 834159672
sum(A)
prod(a)
把 a 中所有元素起来
product(乘积), 它将返回所有元素的乘积
floor(a)
ceil(a)
向下四舍五入, 0.5 将被下舍入变成 0
向上四舍五入, 0.5 将上舍入变为最接近的整数, 也就是 1
pinv(A)求A矩阵的逆矩阵(A的逆矩阵乘以A等于单位阵)

2.4 绘图

绘制 s i n ( 8 π t ) sin(8\pi t) sin(8πt) c o s ( 8 π t ) cos(8\pi t) cos(8πt)

t=[0:0.01:0.98]; % t=[0,0.01,0.02,...,0.98]
y1=sin(2*pi*4*t);
y2=cos(2*pi*4*t);
plot(t,y1);
hode on; % 将新的图像绘制在旧的之上
plot(t,y2);
xlabel('time');ylabel('value'); % 标记x轴和y轴
legend('sin','cos') % 图例放在右上方
title('myplot'); % 显示标题


可视化矩阵

%% 生成一个颜色图像, 一个灰度分布图, 并在右边也加入一个颜色条。 
%% 所以这个颜色条显示不同深浅的颜色所对应的值
A=magic(5)
imagesc(A)
colorbar
colormap gray

2.5 控制语句

for语句

v = zeros(10,1);
for i=1:10, % i=1,i=2...,i=10
	v(i)=2^i;
end;

while语句

i=1while true,
	v(i) = 999;
	i=i+1;
	if(i==6)
		break; % i=6时停止循环
	end; % 结束if语句
end; % 结束while语句

if-else语句

if v(1)==1,
	disp('value = 1');
elseif v(1)==2,
	disp('value = 2');
else
	disp('value unknow');
end;

函数
定义的squarethisnumber函数保存在squarethisnumber.m中。

function y = squareThisNumber(x) % 函数需要输入一个参数x,函数返回的值保存在y中
	y=x^2;

复杂一点的例子(计算损失函数):

function J = costFunction(X, y, theta)
	% X 包含训练集的设计矩阵
	% y 是分类标签
	m = size(X,1);            % 训练集的个数(也就是X的行数)
	predictions = X*theta;    % 预测值,m维的向量
	sqrError = (predictions - y).^2
	J = 1/(2*m)*sum(sqrErrors); 

2.6 向量化

以之前的线性规划为例子
在这里插入图片描述

左侧为没有向量化的表达,因为matlab中矩阵下标从1开始,所以j是从1到n+1。
右侧为向量化的表达

梯度下降
在这里插入图片描述

θ \theta θ是每个特征前的参数。
假设有m个训练样本 ( x ( 1 ) , y ( 1 ) ) , . . . , ( x ( m ) , y ( m ) ) (x^{(1)},y^{(1)}),...,(x^{(m)},y^{(m)}) (x(1),y(1)),...,(x(m),y(m))n个特征,则:
x ( i ) = [ x 0 ( i ) x 1 ( i ) x 2 ( i ) ⋮ x n ( i ) ] x^{(i)}=\begin{bmatrix} x^{(i)}_0 \\ x^{(i)}_1 \\ x^{(i)}_2 \\ \vdots \\ x^{(i)}_n\end{bmatrix} x(i)= x0(i)x1(i)x2(i)xn(i) x ( i ) x^{(i)} x(i)表示第i个输入样本,是n+1维向量。则:
X = [ x 0 ( 1 ) x 1 ( 1 ) ⋯ x n ( 1 ) x 0 ( 2 ) x 1 ( 2 ) ⋯ x n ( 2 ) x 0 ( 3 ) x 1 ( 3 ) ⋯ x n ( 3 ) ⋮ ⋮ ⋮ x 0 ( m ) x 1 ( m ) ⋯ x n ( m ) ] X=\begin{bmatrix} x^{(1)}_0&x^{(1)}_1\cdots&x^{(1)}_n \\ x^{(2)}_0&x^{(2)}_1\cdots&x^{(2)}_n\\ x^{(3)}_0&x^{(3)}_1\cdots&x^{(3)}_n\\ \vdots &\vdots&\vdots&\\ x^{(m)}_0&x^{(m)}_1\cdots&x^{(m)}_n\end{bmatrix} X= x0(1)x0(2)x0(3)x0(m)x1(1)x1(2)x1(3)x1(m)xn(1)xn(2)xn(3)xn(m) ,X是 m × ( n + 1 ) m\times(n+1) m×(n+1)的设计矩阵。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值