first week of machine learning on Coursera
@(Coursera)
惯例是,先在Matlab/octava上实现算法原型,确定可用再迁移到其他编译环境。因为Matlab/octava集成了很多机器学习算法和常用的计算,对于算法实现速度很快,而且代码比较简单。
平方误差函数是解决回归问题最常用的代价函数(cost function)。
我们的目的是使我们作出的假设函数hypothesis function最接近于实际的训练集样本点集
(x,y)
,假设函数用
h(θ)=θ1x+θ0
表示衡量假设函数拟合训练样本的情况是通过代价函数来衡量的,代价函数用
J(θ)
来表示,
J(θ)
是
θ1
和
θ0
的函数。
所以我们的目的就是找到一组
θ1
和
θ0
,使得
J(θ)
的值最小。
我们使用梯度下降法来寻找
θ1
和
θ0
的值。
梯度下降法的直观描述就是,当人在山顶,每次迈出一步长
α
,他可以选择任意方向来下山,但是需要以最短时间下山。那么肯定选择和自身位置等高线垂直的方向下山,此时正好是梯度下降的方向。
这里的 α 代表学习速率,也就是下山时的步长。
temp0: =θ0−α∂J(θ0,θ1)∂θ0
temp1: =θ1−α∂J(θ0,θ1)∂θ1
θ0:=temp0
θ1:=temp1
通过梯度下降不断的更新 θ0和θ1 ,知道 J(θ) 收敛为止。如下图的 J(θ) 是个凸函数(Convex function)它收敛时为全局最小值。
步长太大可能会导致无法收敛:
![Alt text](./屏幕快照 2017-09-23 下午7.14.33.png)
线性模型时:
假设函数
hθ(xi)=θ1x+θ0
成本函数cost function:
J(θ0,θ1)=12m∑mi=1(hθ(xi)−yi)2
这里为什么乘以
12m
系数呢,乘以
1m
是使用均方误差来衡量平方误差,这是数理统计中经常使用的方法;乘以
12
是因为后续对
J(θ0,θ1)
求导时会多出个2,用
12
来抵消,是式子看起来更简便。因为我们的目的就是求cost function最小化时的
θ0和θ1
,前面乘以个系数并不影响。
此时,
Batch:表示步长,也称为学习速率,就是上式中的 α .
Vector:an N*1 matrix
矩阵计算:
单位矩阵(Identity matrix):对角线元素为1,其余元素为0的方阵。
矩阵乘法: A×B≠B×A
除非: A×I=I×A
矩阵的逆,当矩阵是个方阵时, m×m ,并且矩阵 A 存在逆矩阵,则满足