Spark0.9分布式运行MLlib的线性回归算法

2014-11-24 01:09:15 · 作者: · 浏览: 4

1 什么是线性回归


线性回归是另一个传统的有监督机器学习算法。在这个问题中,每个实体与一个实数值的标签 (而不是一个像在二元分类的0,1标签),和我们想要预测标签尽可能给出数值代表实体特征。MLlib支持线性回归以及L2(ridge)和L1(lasso)正则化参数调整。Mllib还有一个回归算法,原始梯度下降(在下面描述),和上面描述的有相同的参数二元分类算法。


可用线性回归算法:


LinearRegressionWithSGD


RidgeRegressionWithSGD


LassoWithSGD。


注意:


(1)因为是线性回归,所以学习到的函数为线性函数,即直线函数;


(2)因为是单变量,因此只有一个x;


我们能够给出单变量线性回归的模型:



我们常称x为feature,h(x)为hypothesis;


2. Gradient Descent(梯度下降)


但是又一个问题引出了,虽然给定一个函数,我们能够根据cost function知道这个函数拟合的好不好,但是毕竟函数有这么多,总不可能一个一个试吧?


因此我们引出了梯度下降:能够找出cost function函数的最小值;


梯度下降原理:将函数比作一座山,我们站在某个山坡上,往四周看,从哪个方向向下走一小步,能够下降的最快;


当然解决问题的方法有很多,梯度下降只是其中一个,还有一种方法叫Normal Equation;


方法:


(1)先确定向下一步的步伐大小,我们称为Learning rate;


(2)任意给定一个初始值:;


(3)确定一个向下的方向,并向下走预先规定的步伐,并更新;


(4)当下降的高度小于某个定义的值,则停止下降;


算法:



特点:


(1)初始点不同,获得的最小值也不同,因此梯度下降求得的只是局部最小值;


(2)越接近最小值时,下降速度越慢;


3.线性回归代码


下面的示例演示如何加载训练数据,把它解析成 LabeledPoint的RDD对象(弹性分布式数据集)。这个例子然后使用LinearRegressionWithSGD构建一个简单的线性模型来预测标签值。最后我们计算均方误差对拟合优度进行评估。


执行结果如下:


相关阅读