回归与梯度降低:算法
回归在数学上来讲是给定一个点集,可以用一条曲线去拟合之,若是这个曲线是一条直线,那就被称为线性回归,若是曲线是一条二次曲线,就被称为二次回归,回归还有不少的变种,如locally weighted回归,logistic回归,等等,这个将在后面去讲。机器学习
用一个很简单的例子来讲明回归,这个例子来自不少的地方,也在不少的open source的软件中看到,好比说weka。大概就是,作一个房屋价值的评估系统,一个房屋的价值来自不少地方,好比说面积、房间的数量(几室几厅)、地 段、朝向等等,这些影响房屋价值的变量被称为特征(feature),feature在机器学习中是一个很重要的概念,有不少的论文专门探讨这个东西。在 此处,为了简单,假设咱们的房屋就是一个变量影响的,就是房屋的面积。函数
假设有一个房屋销售的数据以下:学习
面积(m^2) 销售价钱(万元)优化
123 2503d
150 320blog
87 160数学
102 220it
… …io
这个表相似于帝都5环左右的房屋价钱,咱们能够作出一个图,x轴是房屋的面积。y轴是房屋的售价,以下:
若是来了一个新的面积,假设在销售价钱的记录中没有的,咱们怎么办呢?
咱们能够用一条曲线去尽可能准的拟合这些数据,而后若是有新的输入过来,咱们能够在将曲线上这个点对应的值返回。若是用一条直线去拟合,多是下面的样子:
绿色的点就是咱们想要预测的点。
首先给出一些概念和经常使用的符号,在不一样的机器学习书籍中可能有必定的差异。
房屋销售记录表 - 训练集(training set)或者训练数据(training data), 是咱们流程中的输入数据,通常称为x
房屋销售价钱 - 输出数据,通常称为y
拟合的函数(或者称为假设或者模型),通常写作 y = h(x)
训练数据的条目数(#training set), 一条训练数据是由一对输入数据和输出数据组成的
输入数据的维度(特征的个数,#features),n
梯度降低法是一个最优化算法,一般也称为最速降低法。最速降低法是求解无约束优化问题最简单和最古老的方法之一,虽然如今已经不具备实用性,可是许多有效算法都是以它为基础进行改进和修正而获得的。最速降低法是用负梯度方向为搜索方向的,最速降低法越接近目标值,步长越小,前进越慢。
下面是一个典型的机器学习的过程,首先给出一个输入数据,咱们的算法会经过一系列的过程获得一个估计的函数,这个函数有能力对没有见过的新数据给出一个新的估计,也被称为构建一个模型。就如同上面的线性回归函数。
咱们用X1,X2..Xn 去描述feature里面的份量,好比x1=房间的面积,x2=房间的朝向,等等,咱们能够作出一个估计函数:
θ在这儿称为参数,在这儿的意思是调整feature中每一个份量的影响力,就是究竟是房屋的面积更重要仍是房屋的地段更重要。咱们令X0 = 1,就能够用向量的方式来表示了:
咱们程序也须要一个机制去评估咱们θ是否比较好,因此说须要对咱们作出的h函数进行评估,通常这个函数称为损失函数(loss function)或者错误函数(error function),描述h函数很差的程度,在下面,咱们称这个函数为J函数
在这儿咱们能够作出下面的一个错误函数:
这个错误估计函数是去对x(i)的估计值与真实值y(i)差的平方和做为错误估计函数,前面乘上的1/2是为了在求导的时候,这个系数就不见了。
如何调整θ以使得J(θ)取得最小值有不少方法,其中有最小二乘法(min square),是一种彻底是数学描述的方法,在stanford机器学习开放课最后的部分会推导最小二乘法的公式的来源,这个在不少的机器学习和数学书上均可以找到,这里就不提最小二乘法,而谈谈梯度降低法。
梯度降低法是按下面的流程进行的:
1)首先对θ赋值,这个值能够是随机的,也可让θ是一个全零的向量。
2)改变θ的值,使得J(θ)按梯度降低的方向进行减小。
为了更清楚,给出下面的图:
这是一个表示参数θ与偏差函数J(θ)的关系图,红色的部分是表示J(θ)有着比较高的取值,咱们须要的是,可以让J(θ)的值尽可能的低。也就是深蓝色的部分。θ0,θ1表示θ向量的两个维度。
在上面提到梯度降低法的第一步是给θ给一个初值,假设随机给的初值是在图上的十字点。
而后咱们将θ按照梯度降低的方向进行调整,就会使得J(θ)往更低的方向进行变化,如图所示,算法的结束将是在θ降低到没法继续降低为止。
固然,可能梯度降低的最终点并不是是全局最小点,多是一个局部最小点,多是下面的状况:
上面这张图就是描述的一个局部最小点,这是咱们从新选择了一个初始点获得的,看来咱们这个算法将会在很大的程度上被初始点的选择影响而陷入局部最小点
下面我将用一个例子描述一下梯度减小的过程,对于咱们的函数J(θ)求偏导J:(求导的过程若是不明白,能够温习一下微积分)
下面是更新的过程,也就是θi会向着梯度最小的方向进行减小。θi表示更新以前的值,-后面的部分表示按梯度方向减小的量,α表示步长,也就是每次按照梯度减小的方向变化多少。
一个很重要的地方值得注意的是,梯度是有方向的,对于一个向量θ,每一维份量θi均可以求出一个梯度的方向,咱们就能够找到一个总体的方向,在变化的时候,咱们就朝着降低最多的方向进行变化就能够达到一个最小点,无论它是局部的仍是全局的。
用更简单的数学语言进行描述步骤2)是这样的:
倒三角形表示梯度,按这种方式来表示,θi就不见了,看看用好向量和矩阵,真的会大大的简化数学的描述啊。