回归问题是根据一组特征(feature),预测一个值,和分类问题不一样,这个值是连续的,分类问题的预测值是离散的。spa
m:训练集的记录条数orm
x:训练集中的一条记录的输入变量部分,或者说特征值spark
y:训练集中的记录的输出变量,或者说目标值io
假设特征的个数是1,即有一组(x, y)的值,针对新的x的值,预测y的值。模型以下:function
问题转化为求θ0和θ1的值。变量
最小二乘法,得出cost function:技巧
问题转化为求上面②式的最小值。方法
最小值求解问题有多种解法,下面介绍梯度降低法和normal equation法。im
梯度降低法:数据
从一组θ0和θ1的值开始,每次迭代都改变θ0和θ1的值,使得②式的值愈来愈小,直到收敛。
上式中,α称为learning rate,这个值既不能太大也不能过小(须要在实际操做时,没迭代n次,记下J(θ0, θ1)的值,观察J(θ0, θ1)是否愈来愈小),若是太大,J(θ0, θ1)可能没法收敛,若是过小,要迭代的次数太多,运行时间会很长。
上图表示J(θ0, θ1)对θj的偏导数。
同时改变θ0和θ1的值,θ0 := θ0 - α(J(θ0, θ1)对θ0的偏导数),θ1 := θ1 - α(J(θ0, θ1)对θ1的偏导数),直到J(θ0, θ1)的值收敛(例如,两次迭代,J(θ0, θ1)的值减少的程度小于0.001)。
normal equation:
两种方法的比较:
梯度降低 vs normal equation
梯度降低须要选定一个α,normal equation不须要
梯度降低须要迭代不少次,normal equation不须要
梯度降低须要考虑scale问题,normal equation不须要
梯度降低在特征数目很大的时候,works well,normal equation在矩阵计算时会很expensive,(特征数大概10000左右时能够考虑用梯度降低)
还有一些其余更复杂的方法:
conjugate gradient(共轭梯度法)
BFGS(拟牛顿法)
L-BFGS
等
在实际使用梯度降低时,有几个技巧
把特征值尽可能归化到同一区间(在使用spark mllib的训练数据时发现训练集的数据大可能是0到1区间的double值,多是这个缘由)
根据实际操做状况调整learning rate的值。