线性回归

回归问题是根据一组特征(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

在实际使用梯度降低时,有几个技巧

  1. 把特征值尽可能归化到同一区间(在使用spark mllib的训练数据时发现训练集的数据大可能是0到1区间的double值,多是这个缘由)

  2. 根据实际操做状况调整learning rate的值。

相关文章
相关标签/搜索