上一篇介绍了机器学习的基本概念以及这个系列中将要使用的各种表示法,建议手动画几次所谓的训练数据集的表格,加深对各个参数的理解。另,这个系列的主要目的是对整体ML提供一个有深度并兼顾广度的flavor,所以在这个系列中的programming练习将会用matlab实现,如果没有matlab权限的,用octave也是一样的。
1. Gradient Descent [梯度下降法]:
1.1 在上一点里已经介绍了对于一个相应线性回归模型中,可以利用代价函数来寻找相应的最小值Jmin,并介绍了轮廓图以观察J随变量θ的变化趋势。但是靠人眼来找相应的Jmin显然是不合理的。于是引入梯度下降法,这个利用这个方法可以更合理的找到相应的Jmin。
1.2 对于J(θ0,θ1)的过程,我们是根据根据θ0和θ1的域来绘制假设函数(实际上,我们是在把成本函数当成参数估计函数来描述)。因为我们不是在根据x和y变量本身进行函数绘制,而是将函数的参数当做自变量,并选择一组特定(x, y)参数从而产生相应的成本函数。
1.3 将传统的x轴变为θ0轴,而传统的y轴变为θ1轴,传统的z轴将变为成本函数值,即J(θ0, θ1).下图描述了相关结果:
1.4 当成本函数处于图中凹坑的底部时,它的值是最小值。红色的箭头表示图中最小的点。具体的实现方法是取成本函数的导数(切线的函数),切线的斜率是这一点的导数,它会给一个方向。沿着最陡下降的方向,即成本函数向下最快的方向走。每个下降步骤的大小由参数α决定,这称为学习速率。
1.5 注意,具体的最低处的位置,与起始点是有关的,如上图所示,当开始点不同但是两个很近的点时,最终到达的“底部”也是不同的。
1.6 用数学方式表述下降算法为:(重复迭代以下计算直到收敛,注意其中j = 0, 1)
1.7 最后需要注意的一点是,在上述迭代过程中会涉及到θ0和θ1的更新问题,一般梯度下降算法都是对两者同时进行更新,注意不要搞错,交替更新就不是梯度下降算法了,如下图:
2. Gradient Descent for Linear Regression [线性回归梯度下降]:
2.1 对于上一点提到的下降算法,进行一个求导简化如上:(如上,迭代直到收敛)。
2.2 这一切的重点是,如果从某假设的猜测点开始,然后反复应用这些梯度下降方程,我们的h(x)就会变得越来越准确。
2.3 Batch Gradient Descent [批量梯度下降]:如上所述的方法是原始成本函数的梯度下降算法,其中的每一步都是在全局数据上进行的。这里涉及到Batch [批量]的概念,对于机器学习中一类每一步都着眼于整体数据集的方法,都被称为是Batch类问题。
2.4 Convex Function [凸函数]:是指局部最小值即全局最小值的一类实数函数集。
3. 线性代数相关:
3.1 矩阵和向量相关Matlab实现:
3.2 矩阵和向量的标量乘法:
3.3 矩阵与向量的点乘:
3.4 矩阵与矩阵的点乘: