如何让Hadoop结合R语言做大数据分析?

Python06

如何让Hadoop结合R语言做大数据分析?,第1张

R语言和Hadoop让我们体会到了,两种技术在各自领域的强大。很多开发人员在计算机的角度,都会提出下面2个问题。问题1: Hadoop的家族如此之强大,为什么还要结合R语言?\x0d\x0a问题2: Mahout同样可以做数据挖掘和机器学习,和R语言的区别是什么?下面我尝试着做一个解答:问题1: Hadoop的家族如此之强大,为什么还要结合R语言?\x0d\x0a\x0d\x0aa. Hadoop家族的强大之处,在于对大数据的处理,让原来的不可能(TB,PB数据量计算),成为了可能。\x0d\x0ab. R语言的强大之处,在于统计分析,在没有Hadoop之前,我们对于大数据的处理,要取样本,假设检验,做回归,长久以来R语言都是统计学家专属的工具。\x0d\x0ac. 从a和b两点,我们可以看出,hadoop重点是全量数据分析,而R语言重点是样本数据分析。 两种技术放在一起,刚好是最长补短!\x0d\x0ad. 模拟场景:对1PB的新闻网站访问日志做分析,预测未来流量变化\x0d\x0ad1:用R语言,通过分析少量数据,对业务目标建回归建模,并定义指标d2:用Hadoop从海量日志数据中,提取指标数据d3:用R语言模型,对指标数据进行测试和调优d4:用Hadoop分步式算法,重写R语言的模型,部署上线这个场景中,R和Hadoop分别都起着非常重要的作用。以计算机开发人员的思路,所有有事情都用Hadoop去做,没有数据建模和证明,”预测的结果”一定是有问题的。以统计人员的思路,所有的事情都用R去做,以抽样方式,得到的“预测的结果”也一定是有问题的。所以让二者结合,是产界业的必然的导向,也是产界业和学术界的交集,同时也为交叉学科的人才提供了无限广阔的想象空间。问题2: Mahout同样可以做数据挖掘和机器学习,和R语言的区别是什么?\x0d\x0a\x0d\x0aa. Mahout是基于Hadoop的数据挖掘和机器学习的算法框架,Mahout的重点同样是解决大数据的计算的问题。\x0d\x0ab. Mahout目前已支持的算法包括,协同过滤,推荐算法,聚类算法,分类算法,LDA, 朴素bayes,随机森林。上面的算法中,大部分都是距离的算法,可以通过矩阵分解后,充分利用MapReduce的并行计算框架,高效地完成计算任务。\x0d\x0ac. Mahout的空白点,还有很多的数据挖掘算法,很难实现MapReduce并行化。Mahout的现有模型,都是通用模型,直接用到的项目中,计算结果只会比随机结果好一点点。Mahout二次开发,要求有深厚的JAVA和Hadoop的技术基础,最好兼有 “线性代数”,“概率统计”,“算法导论” 等的基础知识。所以想玩转Mahout真的不是一件容易的事情。\x0d\x0ad. R语言同样提供了Mahout支持的约大多数算法(除专有算法),并且还支持大量的Mahout不支持的算法,算法的增长速度比mahout快N倍。并且开发简单,参数配置灵活,对小型数据集运算速度非常快。\x0d\x0a虽然,Mahout同样可以做数据挖掘和机器学习,但是和R语言的擅长领域并不重合。集百家之长,在适合的领域选择合适的技术,才能真正地“保质保量”做软件。\x0d\x0a\x0d\x0a如何让Hadoop结合R语言?\x0d\x0a\x0d\x0a从上一节我们看到,Hadoop和R语言是可以互补的,但所介绍的场景都是Hadoop和R语言的分别处理各自的数据。一旦市场有需求,自然会有商家填补这个空白。\x0d\x0a\x0d\x0a1). RHadoop\x0d\x0a\x0d\x0aRHadoop是一款Hadoop和R语言的结合的产品,由RevolutionAnalytics公司开发,并将代码开源到github社区上面。RHadoop包含三个R包 (rmr,rhdfs,rhbase),分别是对应Hadoop系统架构中的,MapReduce, HDFS, HBase 三个部分。\x0d\x0a\x0d\x0a2). RHiveRHive是一款通过R语言直接访问Hive的工具包,是由NexR一个韩国公司研发的。\x0d\x0a\x0d\x0a3). 重写Mahout用R语言重写Mahout的实现也是一种结合的思路,我也做过相关的尝试。\x0d\x0a\x0d\x0a4).Hadoop调用R\x0d\x0a\x0d\x0a上面说的都是R如何调用Hadoop,当然我们也可以反相操作,打通JAVA和R的连接通道,让Hadoop调用R的函数。但是,这部分还没有商家做出成形的产品。\x0d\x0a\x0d\x0a5. R和Hadoop在实际中的案例\x0d\x0a\x0d\x0aR和Hadoop的结合,技术门槛还是有点高的。对于一个人来说,不仅要掌握Linux, Java, Hadoop, R的技术,还要具备 软件开发,算法,概率统计,线性代数,数据可视化,行业背景 的一些基本素质。在公司部署这套环境,同样需要多个部门,多种人才的的配合。Hadoop运维,Hadoop算法研发,R语言建模,R语言MapReduce化,软件开发,测试等等。所以,这样的案例并不太多。

《R的极客理想——高级开发篇》(张丹)电子书网盘下载免费在线阅读

资源链接:

链接:https://pan.baidu.com/s/1WCZyrIsDcDz2aJRSoSRvrA

提取码:rgo6

书名:R的极客理想——高级开发篇

作者:张丹

豆瓣评分:6.8

出版社:机械工业出版社

出版年份:2015-7

内容简介:

【编辑推荐】

资深R语言用户多年实战经验的结晶,介绍R语言本身的核心技术以及R语言在不同领域的跨学科综合应用,借助每日中国天气的应用案例和游戏开发的案例,揭秘完整的R包开发流程,帮助读者创建自己的R包,打开R语言产品化的思路。

【内容简介】

R的极客理想”系列图书以作者多年开发经验为素材,系统地梳理了R语言的知识。在《R的极客理想——工具篇》中介绍了R语言的30多个工具包的使用方法,并以IT人的视角,告诉读者如何高效地使用第三方R包。

《R的极客理想——高级开发篇》则以R语言的高级编程为主,辅以跨界知识的综合运用。书中首先阐释如何用R语言实现数学、统计计算以及模型建立,应用包括协同过滤算法、基于矩阵的PageRank算法、遗传算法和金融交易策略模型等。详细介绍了R语言的环境空间、文件系统管理、S3、S4、RC和R6四种面向对象的程序设计。还介绍完整的R包开发流程,并提供每日中国天气的应用案例和游戏开发的案例,帮助读者创建自己的R包,打开R语言产品化的思路。

书中介绍了多个场景案例,不仅从学术的角度完成了模型设计,而且用计算机的方法把产品实现。通过案例的学习,可以让不同学科背景的R语言使用者,站在其他人的角度,找到新的思维方法。

《R的极客理想——量化投资篇》将介绍R语言在金融领域的应用,真正地让技术人员把自己的知识变成价值。

作者简介:

张丹,R语言资深用户,系统架构师,况客科技联合创始人(Qutke.com)。有10年IT程序开发和系统架构设计的经验,精通Java、R和Javascript三种编程语言,熟悉数据挖掘、统计和金融的多种算法。目前在互联网金融量化投资方向创业中,个人博客Alexa全球排名前10万。

文/Jongerden &Fu

买辆新车永远是令人兴奋的事情,尤其当这辆车还是你的第一辆车的时候。有研究显示,年轻人在挑选座驾时会更倾向选择父母曾拥有的品牌。这种趋势可能是出于品牌忠诚度,也或许是由于他们在这个品牌身上拥有美好回忆。但是,也可能仅仅是因为他们并不懂得如何在不同品牌之间做选择,于是只好选择自己熟悉的品牌。而且,哪怕是那些喜欢尝鲜,希望选购不同品牌车型的人,也会觉得现有购车网站并没太大帮助,因为它们往往会让你在搜索前就先选定品牌或型号。数据侠Steven Jongerden和Huanghaotian Fu为了弥补这一空缺,让人们能在做决定时掌握更多信息,用机器学习和数据分析打造了一个购车推荐平台。

爬数据,寻找相关性

为了更好地帮助人们选择自己的理想座驾,我们需要能够将个人需求与品牌及型号信息进行匹配的数据。

(图片说明:项目设计流程)

由于这种数据并不是公开可以获取的,只能从现有的汽车销售网站上提取。而这些网站上的数据,也代表着当今市场上正在交易的汽车的信息。我们使用Python的Beautifulsoup对一个非常流行的汽车网站进行爬取,获得了12000辆车、覆盖20种品牌和37个特征维度的数据集。我们之后搭建的推荐系统,推荐的车型也将来自上述范围。

我们首先用R语言、使用K近邻算法(K Nearest Neighbor)对缺失数据进行处理和补充。缺失最多的是油耗信息(8.6%缺失)和加速数据(6.9%缺失)。我们基于车价、汽车品牌和汽车类型,使用欧式几何距离法(Euclidean Distance)以及等于根号n的K值,通过K近邻算法进行了补充,并最终得到一个完整的数据集。由于K近邻算法是无监督机器学习算法,我们没法量化它的表现和准确度,尤其是在一个多维的解空间里(Multidimensional Solution Space)。

(图片说明:各变量的交叉相关性分析)

初步的数据分析显示出很有意思的相互关系。比如,车价和引擎型号有很强关联,高价位的汽车往往有更大的引擎。另外,数据显示,更贵的车往往更耗油。总的来看,不同维度的变量之间有很强的相关性,这让我们可以用各种机器学习算法来进行分析。

调试机器学习的算法模型

为了预测那些对潜在购车者来说很重要的特征,同时让我们的推荐平台能独立于外部数据源,我们使用机器学习算法对一些特定的特征进行了预测。

由于数据是通过特定方式收集(比如,设计相似的汽车会被放置在数据组的同一个类别下,因为在爬取时它们的数据收集是按照品牌顺序进行的),数据集中存在序列相关(Serial Correlation)现象。为了消除序列相关,我们在使用机器学习算法分析数据前,对数据组的次序进行随机排列。另外,为了验证效果,我们将数据组按照4比1的比例分成一个训练集和一个测试集。

首先,我们使用与车价高度相关的特征,搭建了一个多元线性回归模型。得出的R调整平方值(使用测试集计算得出)为0.899。在对预估模型进行Breusch-Godfrey测试后,观测到数据集是按照汽车产商和型号排列,检测到了序列相关性关系。为了解决这个问题,我们使用了开头提到的方法进行处理。另外,残差还发现存在异方差性,意味着残差中,对于不同车价来说,方差并不均等。尽管这不符合Gauss Markov假设中的一个最优线性无偏估计,但检查模型的残差图(Residual Plot)并未发现异方差性很高的残差,因此这个模型可以成立。

其次,我们使用了多元线性回归模型及前向逐步选择法(Forward Stepwise Selection)。这个算法将每个可能的模型与一个包含所有特征的模型进行比较,并选出贝叶斯信息量(Bayesian Information Criterion)最低的最佳组合。得出的R调整平方值(使用测试数据集计算得出)为0.914。

为了进一步提高线性模型的表现,我们使用一个预先设定的来代表车价,并对这个变量执行Box-Cox变换。Box-Cox变换是一种常见的数据变换,用于连续的响应变量不满足正态分布的情况,变换之后,可以一定程度上减小不可观测的误差和预测变量的相关性。经过Box-Cox变换,我们的数据更接近正态分布。这个模型得出的R调整平方值为0.9,与第一个手动调整的多元线性回归模型相比,并没有太多提升。

接下来,我们使用收缩方式,或称为正则化(Shrinkage/Regularization Method)来提高前面模型得到的数据。传统的收缩方式(Lasso回归和岭回归)在处理包含与因变量有强相关性的多元变量的数据集时,存在缺陷。假如使用Lasso回归,大多数系数会被减至0,但其实他们可能对结果有很强的解释力。而Elastic Net模型可以通过引入一个额外的超参数来平衡Lasso回归和岭回归,进而克服上面提到的问题。

此外,第二个引入的超参数则用于确定模型的均方差和复杂性之间的平衡。为了确定最佳的超参数,进而将均方差减小到最小,同时保证模型是最简单的,我使用了10折交叉验证。得出的R调整平方值为0.9218。

最后,为了进一步提升预测准确度,我使用了提升树模型(Gradient Tree Boosting Model)。它由7000个决策树组成,根据超参数的交叉验证所得的平均数,决策树的深度(Interaction Depth)等于4,收缩率(Shrinkage Factor)等于0.1。而它的R调整平方值十分惊艳,为0.9569,也就是说,我们测试的所有模型中,提升树模型拥有最强的预测能力。

不过即便提升树模型预测能力最强,人们依然更喜欢简单的模型。而鉴于简单的多元线性回归模型表现良好,简单的线性回归模型将会用于我们的推荐平台。

基于协同过滤的汽车系统

能够预测汽车价格和其他有趣的特征,可以在推荐汽车时为用户提供更多的信息。

我们的推荐基于一个基本假设:拥有相同偏好的用户做出的打分是相似的。这也意味着,如果一个人喜欢一辆特定的汽车的所有特征,那么他就在整体上喜欢这辆车。

为了找到符合某一名用户需求的车,首先需要找到与他拥有同样需求的其他用户,并将这些用户选择的对应的车型进行合并。在对这名用户与其他用户比较时,使用了K近邻算法,距离由皮尔逊相关系数或余弦相似性来确定。当这些相似用户被确定,他们对汽车的打分会被整合,并基于此为新用户做出推荐。这个过程被称为基于用户的协同过滤(User Based Collaborative Filtering)。

基于用户的协同过滤是一种半监督的机器学习技术,使用训练数据集的评分矩阵中的特定项来确定测试评分矩阵中的不确定的项。因此,我们可以评断推荐的准确度。我们使用一个7个值已确定的10折交叉验证,通过观察它的ROC和PR曲线(Precision/Recall Graphs)的平均值来评估推荐的表现情况。

ROC曲线显示了True Positive (真正,对应y轴)和False Positive (假正,对应x轴)的关系。ROC的结果显示,多数推荐是正确的,仅有一小部分的False Positives(也就是假的预测)。ROC曲线向左上角靠近,说明这个模型的预测比较准确。

(图片说明:ROC曲线)

而PR曲线则显示了准确率(搜索结果到底有多大帮助)以及召回率(结果有多完整)之间的关系。从图中可以看出,对于一小部分推荐,准确度很高;然而,随着召回率提高,准确率趋向于0。

我们可以得出结论,这个模型在靠近图形右上角(代表着完美的模型)的时候表现良好。另外,将召回率限制在最多10个推荐的时候,准确率的降低会得到遏制。

(图片说明:PR曲线)

基于这个模型以及用户对车的具体需求,我们的推荐平台给用户推荐了10个汽车品牌以及相应的型号。

通过将推荐模型和机器学习模型结合,我们搭建了一个交互界面,当用户输入信息,比如他期待的汽车引擎马力、汽车类型等,系统就可以做出推荐。这些用户输入信息可以通过下拉菜单以及勾选等方式手动控制。此外,你还可以用一句话描述你的理想座驾,而推荐模型则会基于此为你推荐10辆你可能喜欢的汽车,它们的车价、排气量、油耗以及图片等信息也会展示出来,供用户进行简单比较。

当用户勾选“喜欢”,界面会重新将用户带到可以进行购买的网页。另外,用于推荐的信息以及用户喜欢的车的信息将在app外部存储。

(图片说明:推荐系统的可视化界面截图)

总之,这个推荐应用使用了基于用户的协同过滤以及回归技术,以实现准确度地基于一些特定的汽车特征来为用户推荐汽车品牌和型号的功能。性能验证显示,推荐算法和回归模型都表现良好,成功组成了一个可靠的推荐平台。

注:本文翻译自《Recommending your car brand》。内容仅为作者观点,不代表DT财经立场。

题图视觉中国

关于DTNYCDSA

DTNYCDSA是DT财经与纽约数据科学学院合作专栏。纽约数据科学学院(NYC Data Science Academy)是由一批活跃在全球的数据科学、大数据专家和SupStat Inc.的成员共同组建的教育集团。

数据侠门派

数据侠Steven Jongerden毕业于代尔夫特理工大学,获得航空航天工程专业本科学位,政策分析和工程学硕士学位。他现在是荷兰凯捷管理顾问公司的一名数据科学咨询师。Steven在纽约数据科学学院进修,提升了自己机器学习和大数据分析的技能。

数据侠Huanghaotian Fu毕业于纽约大学,拥有数学和经济学硕士。目前在美国斯蒂文斯理工攻读金融分析硕士。他于2017年暑期完成纽约数据学院的培训。

加入数据侠

“数据侠计划”是由第一财经旗下DT财经发起的数据社群,包含数据侠专栏、数据侠实验室系列活动和数据侠联盟,旨在聚集大数据领域精英,共同挖掘数据价值。了解数据侠计划详情请回复“数据侠计划”,投稿、合作请联系。