吴恩达机器学习课程
在网上找了很多的机器学习教程,感觉还是吴恩达大佬讲得好,所以决定写这个博客来记录一下我的笔记。我会省略里面的高数,线代基础概念的解释,只是写一些我觉得需要注意的点。同样也可以看一下我的github,这一章我用python实现了梯度下降和正规方程两种方式进行单变量线性拟合,用于数据是从一位研究生学长的公众号中下载的名字叫:SuperMP,大家可以关注下哦!
我的github
假设函数
这就是课程中给出的单变量线性假设函数,其实和我们学的y=kx+b没啥区别。
代价函数
这个函数的目的就是度量我们的假设函数得到的预测值与训练样本的差距,这里右上角的i就是指第几组训练样本,这里相当于用两者差值平方的一半来计算一组样本的差距,然后把所有样本的差距累加起来球平均值。我们在做这个线性回归的时候的目的就是通过算法找到合适的theta值让这个函数的值尽量减小。
这里我感觉需要注意三个问题:
1.不用差的绝对值是因为绝对值不好求导。
2.这里前面乘上了½是为了求导之后式子更简洁
3.关于h,y的顺序问题也是要注意的,虽然对于这个代价函数的值来说并没有什么不同,但是在对theta求导之后会有正负号的区别,这点在自己实现梯度下降更新参数的时候需要注意。
梯度下降
这个算法就是机器学习里面一个经典的算法,其主要步骤就是:
1.初始化theta
2.不断的改变theta的值,让损失函数不断减小。
至于如何改变请自行百度梯度下降算法,我在这里只是说最需要注意的几点:
1.一般采用随机初始化的方式来完成对theta的初始化,但是需要注意的是初始化值的不同可能会导致找到的局部最小值不同,但是凸函数在其他参数设置合理的情况下会找到一个全局最小值。
2.梯度算法更新theta的时候一定要注意同时性,如果没有高数基础可以这样比较形象地理解,梯度下降在选择下坡路的时,要选择的梯度方向在平面上面是由theta0和theta1同时决定的,如下图:
当然不是说不同时更新就不能实现梯度下降,但是不同时更新的算法就不是我们平常说的梯度下降算法而是另一种算法。
实现梯度下降同时更新的伪代码:
3.同样学习率的选择也十分重要,如何选择学习率的技巧我会在以后的文章里面详细地说明的。
线性回归的梯度下降
在掌握了梯度算法之后自然就可以实现线性回归了,另外再说一点就是,这里的梯度下降算法又叫做Batch Gradient Descent也就是每次更新的时候会遍历全部的训练集。