机器学习 第二周 总结 知识点

第二周重点是梯度下降算法的实现和正规方程,附带的有特征,多项式回归,octave的使用也十分重要

机器学习 第二周 总结 知识点

n 代表特征的数量

x(i)代表第 i 个训练实例,是特征矩阵中的第 i 行,是一个向量(vector)。

比方说,上图的


机器学习 第二周 总结 知识点

代表特征矩阵中第 i 行的第 j 个特征,也就是第 i 个训练实例的第 j 个特征。 

如上图的

机器学习 第二周 总结 知识点

支持多变量的假设 h 表示为: 

这个公式中有 n+1 个参数和 n 个变量,为了使得公式能够简化一些,引入 x0=1,则公式

转化为:  

机器学习 第二周 总结 知识点

此时模型中的参数是一个 n+1 维的向量,任何一个训练实例也都是 n+1 维的向量,特

征矩阵 X 的维度是 m*(n+1)。因此公式可以简化为:,其中上标 T 代表矩阵

转置。


多变量梯度下降

与单变量线性回归类似,在多变量线性回归中,我们也构建一个代价函数,则这个代价

函数是所有建模误差的平方和,即: 

其中:

我们的目标和单变量线性回归问题中一样,是要找出使得代价函数最小的一系列参数。

多变量线性回归的批量梯度下降算法为:


机器学习 第二周 总结 知识点

机器学习 第二周 总结 知识点

机器学习 第二周 总结 知识点

机器学习 第二周 总结 知识点

我们开始随机选择一系列的参数值,计算所有的预测结果后,再给所有的参数一个新的

值,如此循环直到收敛。

 

 

为更好实现梯度下降,我们要进行特征缩放



机器学习 第二周 总结 知识点

机器学习 第二周 总结 知识点机器学习 第二周 总结 知识点机器学习 第二周 总结 知识点机器学习 第二周 总结 知识点

在梯度下降算法的实现过程中,还要考虑学习率的选取,梯度下降算法的每次迭代受到学习率的影响,如果学习率α 过小,则达到收敛所需的迭代次数会非常高;如果学习率 α 过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。

通常可以考虑尝试些学习率:α=0.01,0.03,0.1,0.3,1,3,10

 

 

线性回归可能无法应用于所有的回归场景,我们引入多项式回归

注:如果我们采用多项式回归模型,在运行梯度下降算法前,特征缩放非常有必要。

 

在多项式回归中,我们可能通过赋值将多项式回归转换成线性回归,例如

机器学习 第二周 总结 知识点

对于某些问题而言,正规方程是一个很好的解决方法,此时我们使用正规方程而不是用梯度下降

正规方程是通过求解下面的方程来找出使得代价函数最小的参数的

机器学习 第二周 总结 知识点

假设我们的训练集特征矩阵为 X(包含了 x0=1)并且我们的训练集结果为向量 y,则利用正规方程解出向量

机器学习 第二周 总结 知识点

上标 T 代表矩阵转置,上标-1 代表矩阵的逆。设矩阵 A=XTX,则:(XTX)-1=A-1机器学习 第二周 总结 知识点机器学习 第二周 总结 知识点

 

在 Octave 中,正规方程写作

pinv(X'*X)*X'*y

注:正规方程无法用于不可逆的矩阵


第五章主要讲octave的使用,这是需要熟记的内容(实践操作,注意平时要多练习)

默认情况下

max(A)返回的是每一列的最大值,如果你想要找出整个矩阵 A 的最大值,你可以输入

max(max(A)),或者你可以将 A 矩阵转成一个向量,然后键入max(A(:)),这样做就是把 A 当

做一个向量,并返回 A 向量中的最大值

 

prod 意思是 product(乘积),它将返回元素的乘积。

floor(a) 是向下四舍五入,因此对于 a 中的元素 0.5 将被下舍入变成 0。

还有 ceil(a),表示向上四舍五入,所以 0.5 将上舍入变为最接近的整数,也就是 1。

 

假如我输入 max(A,[],1),这样做会得到每一列的最大值。

相对地,如果我键入 max(A,[],2),这将得到每一行的最大值

sum(A,1),这样就得到每一列的总和,

求每一行的和,键入 sum(A,2),这样就得到了 A 中每一行的和

flipup/flipud 表示向上/向下翻转。

 

plot(t, y1),得到正弦函数,我使用函数 hold on,hold on 函数 的功能是将新的图像绘制在旧的之上

我现在绘制 y2,输入:plot(t, y2)。

我要以不同的颜色绘制余弦函数,所以我在这里输入带引号的 r 绘制余弦函数,r 表示

所使用的颜色:plot(t, y2,’r’),再加上命令 xlabel('time'),来标记 X 轴即水平轴,输入

ylabel('value'),来标记垂直轴的值。

 

同时我也可以来标记我的两条函数曲线,用这个命令 legend('sin', 'cos')将这个图例放在

右上方,表示这两条曲线表示的内容。最后输入 title('myplot'),在图像的顶部显示这幅图的

标题。

 

如果你想保存这幅图像,你输入 print –dpng 'myplot.png',png 是一个图像文件格式,如

果你这样做了,它可以让你保存为一个文件。

Octave 也可以保存为很多其他的格式,你可以键入help  plot。

最后如果你想,删掉这个图像,用命令 close 会让这个图像关掉。

 

subplot 命令,我们要使用subplot(1,2,1),它将图像分为一个 1*2 的格子,也就是前两

个参数,然后它使用第一个格子,也就是最后一个参数 1 的意思。

 

最后一个命令,你可以改变轴的刻度,比如改成[0.5 1 -1 1],输入命令:axis([0.5 1 -1 1])

也就是设置了右边图的 x 轴和 y 轴的范围。具体而言,它将右图中的横轴的范围调整至 0.5到 1,竖轴的范围为-1 到 1。

 

 

如果指令后面是;而不是,  则不会输出任何信息。逗号在octave中可以看到函数调用

 

可以通过设置你的 indices (索引) 等于 1 一直到 10,来做到这一点。这时

indices 就是一个从 1 到 10 的序列。

你也可以写 i = indices,这实际上和我直接把 i 写到 1 到 10 是一样。你