云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

文件存储_校园文化建设网站_新注册优惠

小七 141 0

SparkR中的广义线性模型和MLlib中的R公式支持

要开始使用SparkR,请下载apachespark1.5或立即注册参加为期14天的Databricks免费试用。apachespark1.5增加了对SparkR数据帧上分布式机器学习的初始支持。为了给R用户提供一个直观的界面,SparkR扩展了R用于拟合和评估模型的本地方法,以使用MLlib进行大规模的机器学习。在这篇博文中,我们将介绍如何在SparkR中使用广义线性模型,以及如何在MLlib中使用新的R公式支持来简化机器学习管道。这项工作是由Spark 1.5中的Databricks提供的。我们还要感谢Alteryx为早期设计提供的投入。广义线性模型广义线性模型通过对模型族和连接函数的规范,统一了各种统计模型,如线性回归和logistic回归。在R中,可以通过将R模型公式、族和训练数据集传递给glm()函数来拟合这些模型。Spark 1.5扩展了glm()来对Spark数据帧进行操作,Spark数据帧是由Spark管理的分布式数据集合。我们也支持这些模型的弹性网络正则化,与R的glmnet包中的一样。拟合模型由于我们扩展了R的模型拟合的本地方法,所以接口非常相似。R允许您以紧凑的符号形式指定响应变量的建模。例如,公式y~f0+f1表示响应y由变量f0和f1线性建模。在1.5中,我们支持可用的R公式运算符的子集。这包括+(包含)、-(排除)。(包括全部)和截获运算符。为了在SparkR中演示glm,我们将在下面的示例中通过一个12gb数据集(超过1.2亿条记录)拟合模型。这种大小的数据集由于其大小,很难在一台机器上训练。预处理我们将使用的数据集是公开可用的航空公司数据集,其中包含20年的飞行记录(从1987年到2008年)。我们感兴趣的是根据航班起飞延误、飞机类型和飞行距离来预测航班到达延误。首先,我们使用spark CSV包从CSV格式读取数据,并将其与一个辅助平面表连接起来,该表包含了各个飞机的详细信息。>航空公司平面加入训练showDF(选择(培训,"飞机类型"、"距离"、"ArrDelay"、"deplaya"))飞机类型|距离| DepDelay | ArrDelay----------------------------|----------|-----------|----------"气球"| 23 | 18 | 20"固定翼多引擎"| 815 | 2 |-2"固定翼单引擎"| 174 | 0 | 1培训下一步是通过使用指定模型变量的公式调用glm()来使用MLlib。我们在这里指定高斯族来表示我们想要执行线性回归。MLlib缓存输入数据帧并启动一系列Spark作业,以适应分布式数据集上的模型。>型号总结(模型)$系数估计(截距)-0.5155037863延迟0.9776640253距离-0.0009826032飞机_u型固定翼多引擎0.3348238914飞机型固定翼单引擎0.2296622061飞机型气球0.5374569269请注意,aircraft_type(飞机型号)功能是分类的。在引擎盖下,SparkR会自动对这些特性进行一次热编码,这样就不需要手动进行编码了。除了字符串和双类型特性之外,为了与其他MLlib组件兼容,还可以覆盖MLlib向量特性。为了评估我们的模型,我们也可以像R一样使用predict()。我们可以传入训练数据或包含测试数据的另一个数据帧。>preds错误显示(示例(错误,F,.0001))总之,SparkR现在提供了数据帧与常见的R建模功能的无缝集成,使得R用户更容易利用MLlib的分布式机器学习算法。要了解更多关于SparkR及其与MLlib的集成,请参阅最新的SparkR文档。其他语言的R公式支持SparkR将R模型公式的解释实现为MLlib特性转换器,以便与ML管道API集成。RFormula转换器提供了一种方便的方法来指定像R中那样的特征转换。为了了解如何使用RFormula转换器,让我们从前面相同的airlines数据集开始。在Python中,我们使用上一节中使用的相同公式创建RFormula转换器。>>>进口pyspark.ml.功能R公式>>>公式=公式(公式="ArrDelay~deplaya+距离+飞机型号")转换之后,返回一个附加了features和label列的DataFrame。注意在调用transform()之前,必须对数据集调用fit()。fit()步骤确定将分类特征值映射到输出中的向量索引,以便拟合的RFormula可以跨不同的数据集使用。>>> 公式.fit(训练).transform(训练).show()+--------------+---------+---------+---------+--------------------+------+|飞机类型|距离| DepDelay | ArrDelay |特征|标签|+--------------+---------+---------+---------+--------------------+------+|气球| 23 | 18 | 20 |[0.0,0.0,23.0,18.0]| 20.0||多引擎| 815 | 2 |[0.0,1.0815.0,2.0]|-2.0||单引擎| 174 | 0 | 1 |[1.0,0.0174.0,0.0]| 1.0|+--------------+---------+---------+---------+--------------------+------+任何ML管道都可以包含RFormula转换器作为管道阶段,这实际上是SparkR实现glm()的方式。在我们为所需模型族创建了适当的RFormula transformer和估计器之后,拟合GLM模型只需一步:>>>进口pyspark.ml.管道>>>进口pyspark.ml.回归线性回归>>>估计器=线性回归()>>>模型=管道(阶段=[公式,估算器])。拟合(训练)当管道执行时,公式引用的特征将被编码成输出特征向量,供线性回归阶段使用。我们希望RFormula能够通过提供一种简洁的方式来表达复杂的特性转换,从而简化ML管道的创建。从spark1.5开始,RFormula转换器可用于Python、Java和Scala。下一步是什么?在Spark 1.6中,我们增加了对R模型公式更高级特性的支持,包括特性交互、更多模型族、链接函数和更好的摘要支持。作为这篇博文的一部分,我们要感谢Alteryx的danputler和chrisfreeman在SparkR中实现该功能期间所进行的有益讨论,并感谢Hossein Falaki对内容的输入。免费试用Databricks。今天就开始吧