您的位置:首页 > 其它

“Spark上流式机器学习算法实现”中期检查报告

2014-08-04 09:04 337 查看
从7月初到现在已经快一个月左右了,我们的项目总体进展比较顺利,本次中期检查报告主要分为两部分:前期工作总结和后期展望。

一、前期工作总结
项目前期我们的工作主要是围绕“基于spark的流式广义线性模型算法实现”这个目标去做的。万事开头难,要实现算法,必须首先得搭建开发环境。

1、搭建基于linux和windows的spark和scala的开发环境

由于在windows上有支持Scala语言的scala-IDE这个软件,编程非常清晰和方便,如下图所示。



另外,由于基于spark库的程序在linux上运行起来更方便,通过spark-submit这个应用就可以运行基于spark的程序,还可以方便地修改配置参数,因此我们在linux机器上也装好了scala语言和spark的开发环境(详见博文“基于linux的spark与scala开发环境搭建”)。

1、学习scala语言和运行spark程序

由于刚开始接触scala语言,对其并不是很熟悉,熟悉一种语言的最好的办法当然是看它的源代码并且运行程序。

我们通过对spark1.0.0版本的一些简单例程的学习,如单词统计(如下图)、计算π等例子,慢慢熟悉并掌握了Scala语言的基本的函数式编程技巧和代码风格。



目前我们开发基于spark程序的方法是现在scalaIDE这个软件中写好scala的代码,并导出为jar文件,然后将jar文件上传到linux环境下,通过spark-submit命令加上其他一些参数来执行和测试我们的程序(如下图所示为测试单词统计程序的linux命令)。



3、学习广义线性模型和仿真

在对流式学习广义线性模型这个算法编程前,我们先仔细学习了广义线性模型主要包含了线性模型、logistic模型、岭回归、Lasso等几种模型,并充分认识到要进行流式机器学习必然要用到随机梯度下降算法,因此在进行scala编程前,我们先对算法理论推导进行了充分的分析并基于python进行了算法的仿真分析(详见博文“基于python的在线学习logistic回归”)。

4、基于spark streaming的logistic回归
在前面做好了充分的准备后,我们将算法基于scala语言进行了编写和测试,主要在spark streaming这部分测试的时候碰到了一些问题,因为spark streaming运行的时候是每隔几秒钟接收一定的数据,并进行模型的训练和更新,这里就必须区分在代码中哪些数据是需要每次学习更新的,哪些数据是需要保留下来为下次模型更新做准备的。在经过一段时间的调试和测试后,我们将流式的logistic模型代码调试成功(详见博文“基于spark_streaming的logistic流式机器学习”)。

5、基于spark streaming的线性最小二乘和岭回归

我们在logistic回归的基础上,对代码中计算梯度的部分稍作修改,即可得到基于spark streaming的线性最小二乘和岭回归。因为logistic回归,线性最小二乘,岭回归,都属于广义线性模型,在代码上它们的结构总体一致,只是在梯度下降时计算梯度有所不同,因此我们可以复用大部分的Logistic回归的代码。具体的模型介绍和算法结果将在下一次博客更新中介绍。

6、对spark和scala进一步学习和提高

在完成流式的logistic机器学习代码后,我们与导师进行了充分的沟通,导师对我们的工作表示了认可,同时也对我们工作的不足之处提出了详细的意见。我们系统地将scala语言学习了一遍并且对spark执行的机制有了更深刻的认识。(详见博文“对spark和scala的进一步学习”)。

二、后期工作展望
很快就进入了8月份,我们的项目今后该走向何方,我们再此做出一个小小的展望。

1、完成广义线性模型的流式机器学习算法

有了前面的基础,我们认为我们可以较快地完成广义线性模型的其他几个算法的流式机器学习代码的撰写(主要是lasso,因为它使用了L1的正则项,无法直接计算梯度,因此需要用Huber Function进行平滑,具体我们将在下一次博客更新中给出),并调整代码风格,争取提交给spark的开发小组。

2、完成基于spark streaming的在线PCA

我们打算利用spark提供的RowMatrix类中已经提供的各种矩阵运算,完成在线的PCA算法,可以将其利用到人脸识别上。

3、完成基于协同过滤算法的简易推荐系统

经过我们充分调研,我们认为基于协同过滤算法的推荐系统是非常适合基于spark进行流式机器学习的,因此我们希望在这个方向做出自己一点小小的贡献。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: