本人也是入门,主要是学习吴恩达的课程,网上学习和总结,数学上的解释无法深入,主要是将代码和公式对上号,从简单线性回归开始,场景是给出一堆点,要求找出一条线来,能最大程度的穿过最多的点,如下图

辅助回归 辅助回归模型_辅助回归

 

在老师的课程里面,有几个概念:假设函数Hypothesis,代价函数Cost Function,梯度下降Gradient Descent

 

1.假设函数 Hypothesis,就是我们先假设我们要求的这条线的公式是个啥样

简单的假设函数就是 

辅助回归 辅助回归模型_辅助回归_02

,这里我们可以假想右边theta0其实还乘以了一个x0,不过x0的值永远为1,有助于理解多元时候的表达式当扩展到多元的时候,函数就变成了

辅助回归 辅助回归模型_迭代_03

这里表达式中间是代表两个(1 * n)的matrix的相乘,大家了解下矩阵转置和矩阵乘法就很容易理解该等式了。

 

2.代价函数Cost Function,即要求我们要找的那条线,集合中所有的点到它的直线距离和最小,所以采用了方差计算。

简单时公式是

辅助回归 辅助回归模型_辅助回归_04

扩展到多元是

辅助回归 辅助回归模型_梯度下降_05

其中

辅助回归 辅助回归模型_迭代_06

代表当时的theta向量,和对应的第i组x的向量和,即上面提到的假设函数,辅助回归 辅助回归模型_迭代_07代表数据集中第i组x向量

 

3.梯度下降Gradient Descent,这个公式我自己也还没有完全理解数学含义,只是知道大概是利用求导,即变化的速率,当变化

速率达到0的时候,就趋近于局部最优。

简单时是

辅助回归 辅助回归模型_迭代_08

多元时是

辅助回归 辅助回归模型_迭代_09

 

 

主要的概念差不多就是上面的,然后来实现

辅助回归 辅助回归模型_迭代_10

1.这里X代表我们数据集,如果有m行数据,我们有n个向量,那么X就是一个m*n的matrix,别忘了我们的假设公式里面还有个x0,所以上面的n其实是代表的n+1,只是为了方便,省略为n

2.theta为1*n的matrix,所以X * theta.T将得到一个m*1的matrix

3.其中X代表数据集中的特性向量数据,y代表结果向量数据,theta即我们要求的参数

 

辅助回归 辅助回归模型_辅助回归_11

1.alpha和iters是设置参数,alpha代表下降的步长,iters代表迭代的次数,这里都将写死,但是这并不科学 ,后续研究

2.temp,用作theta集合计算过程中,记录theta中间值

3.parameters,记录特征向量数,即n+1,用于在下降过程中控制theta的所有元素的计算

4.cost,用于记录在不断迭代过程中,CostFunction返回的值

5.其中i控制的循环是我们设定的迭代次数,j控制的循环是梯度下降数学公式中的for循环

6.第52行现在看可能会有疑问,我们的theta0对应的x0从哪里来,别急,因为我们会要对原始数据集做处理

7.注意theta的计算,一定要完成一次全部特征计算后,才能更新到theta,所以54行一定到放到j循环的外面

 

最后就是进行执行计算了

辅助回归 辅助回归模型_梯度下降_12

1.第61行就是我们上面说的对数据集的加工,构造了我们上面说的x0,而且它的值全部为1

2.第67行,因为是一元线性回归,所以只要构造1*2的matrix就行了,需要根据具体的特征数进行调整

运行结果如下

辅助回归 辅助回归模型_数据集_13

可以看到方差值还是有明显改善

 

这只是一个简单例子,就像上面说的,本人对梯度下降数学含义也不十分清晰;alpha和iters的设定,应该是自适应调整的,即alpha刚开始应该较大,越往后越小;还有alpha和iters如何调整,应该用matplotlib画出相应的图,才能比较直观的看到下降的趋势,才能更好的进线调参。

记录下自己的又一次进步把。