个人的机器学习课程学习笔记,没有经过太多的处理,只是简要地说明原理和关键公式,详细讲解建议参考coursera上或B站上吴恩达的机器学习课程或者知乎或CSDN上的一些文章。 本系列共01~05五篇,后面看情况可能会加个简单的项目实例。
基本模型
已知
数据输入为\(x_i\)
输出为\(y_i\)
样本对数为\(m\)
假设函数
假设函数关系为
\[ y^{\left(i\right)}=h\left(x^{\left(i\right)}\right)=\theta_0+\theta_1x^{\left(i\right)} \]
显然有两个待定参量\(\theta_0,\theta_1\)
代价函数
表示假设函数与实际已知值的误差
一般用方差
\[ J\left(\theta_0,\theta_1\right)=\frac{1}{2m}\sum_{i=1}^{m}\left[h\left(x^{\left(i\right)}\right)-y^{\left(i\right)}\right]^2 \]
显然,我们希望确定\(\theta_0,\theta_1\)使得\(J\)最小。
梯度下降法
一种简单有效的方法就是按照\(J\left(\theta_0,\theta_1\right)\)梯度迭代参量,
使得代价函数减小,进而取到极小值。
repeat until convergence{
//simultaneously
\(\theta_j=\theta_j−\alpha\frac{\partial}{\partial\theta_j}J\left(\theta_0,\theta_1\right)\)
}
如上所述,重复迭代直到收敛,注意必须同步更新参量。
上图所示为一种可能的过程(对于不同起点,可能收敛到不同的区域极值)
学习速率α
影响迭代速率,
如果太小则速度慢,
如果太大可能会使得结果发散。
微分项的解释
代价函数求导就是梯度。
合理性显然,前面有个负号,梯度正就迭代减小,梯度负就迭代增大。
按照上面的假设函数和代价函数,有
repeat until convergence{
\(\theta_0=\theta_0−α⋅\frac{1}{m}\sum_{i=1}^{m}\left[h\left(x^{\left(i\right)}\right)-y^{\left(i\right)}\right]\)
\(\theta_1=\theta_1−α⋅\frac{1}{m}\sum_{i=1}^{m}{\left[h\left(x^{\left(i\right)}\right)-y^{\left(i\right)}\right]\cdot x^{\left(i\right)}}\)
}
\(\theta_0\)其实就是乘了\(x_0^{\left(i\right)}=1\),按这个思路编matlab程序用矩阵乘法可以简化代码。
注1
上面的准确来说叫Batch梯度下降法, 即"back watch all",每次计算梯度的时候都遍历了所有点。
注2
由于本节所述的x,y关系比较简单,
其实可以用最小二乘法或正规方程组直接解得\(J\left(\theta\right)\)的最小值和\(\theta\)的解。
对于更大、更复杂的数据,梯度下降法(或别的机器学习算法)有其优越性(因为推不出来解析解)。