广义线性模型在MLlib SparkR和R公式支持
与SparkR开始,下载Apache火花1.5或注册一个14天的免费试用今天砖。
Apache 1.5增加了火花最初支持分布式机器学习在SparkR DataFrames。为R用户提供一个直观的界面,SparkR扩展了R的本地方法拟合和评估模型使用MLlib大规模机器学习。在这篇文章中,我们将介绍如何使用SparkR广义线性模型,以及如何使用新的R公式支持MLlib简化机器学习管道。这项工作是由砖1.5火花。我们还要感谢Alteryx提供输入的早期设计。
广义线性模型
广义线性模型统一各种统计模型,如线性和逻辑回归模型的规范家庭和链接功能。在R,这种模型可以通过安装一个R模型公式,家庭,和训练数据集全球语言监测机构()
函数。1.5扩展了火花全球语言监测机构()
操作在火花DataFrames,这是分布式数据收集由火花。我们也支持这些模型elastic-net正规化,R的一样glmnet
包中。
拟合模型
因为我们扩展R的本机方法对模型拟合,接口非常相似。R允许您指定在一个紧凑的响应变量的建模符号形式。例如,公式y ~ f0 + f1
显示的响应y
由变量线性建模f0
和f1
。在1.5中我们支持的一个子集R公式运算符可用。这包括+
(包含)- - - - - -
(排除)。
(包括所有)和拦截操作符。SparkR漠视来演示,我们将步行通过拟合模型在12 GB数据集(超过1.2亿条记录),下面的例子。数据集的大小是很难在单个机器上火车,因为它们的大小。
预处理
我们将操作的数据集是公开的航空公司的数据集,其中包含20年的飞行记录(从1987年到2008年)。我们感兴趣的是预测根据航班延误,航空公司延误飞机类型和距离。
首先,我们从CSV格式使用读取数据spark-csv包和加入一个辅助飞机表对个人飞机的细节。
>航空公司的飞机了我们使用的功能从DataFrame API来应用一些预处理来输入。作为部分的预处理,我们决定来下降行包含零值通过应用dropna ()来DataFrame。<精准医疗> >培训showDF (选择(培训、“aircraft_type”、“距离”,“ArrDelay”、“DepDelay”))aircraft_type|距离|DepDelay|ArrDelay- - - - - - - - - - - - - - - - - - - - - - - - - - - - - | - - - - - - - - - - - | | - - - - - - - - - - - - - - - - - - - - - - - - -“气球”|23|18|20.“固定翼多引擎”|815年|2|2“固定翼单引擎”|174年|0|1
培训
下一步是使用MLlib通过调用全球语言监测机构()
用一个公式指定变量的模型。我们指定高斯家庭来表明我们想执行线性回归。MLlib缓存输入DataFrame和发射一系列的火花工作适合我们的模型在分布式数据集。
>模型请注意,参数可以使用“λ”与全球语言监测机构来添加正则化和“阿尔法”来调整弹性- - - - - -净常数。<h3>评价</h3>作为与R的本地模型系数可以检索使用< a href = " https://spark.apache.org/docs/latest/api/R/summary.html " >摘要()< / >函数。< pre > >总结(模型)美元的系数估计(拦截)-0.5155037863DepDelay 0.9776640253距离-0.00098260320.3348238914 aircraft_type__Fixed翼多引擎aircraft_type__Fixed翼单0.2296622061aircraft_type__Balloon 0.5374569269
请注意,aircraft_type
功能分类。在引擎盖下,SparkR自动执行一个炎热的编码的特性,这样就不需要手动完成的。字符串和双类型特性之外,还可以配合MLlib向量特性,与其他MLlib组件的兼容性。
评估我们的模型我们也可以使用预测()
就像在r .我们可以通过训练数据或另一个DataFrame包含测试数据。
>仅仅错误自从返回DataFrame包含原始列在除了标签,特性,和预测的值,它是容易检查结果。这里我们利用了-在可视化从砖检查误差分布与对飞机类型。< pre > >显示(样本(错误,F,。))
总之,SparkR现在提供无缝集成的DataFrames常见R建模功能,使R用户简单利用MLlib的分布式机器学习算法。
更多地BOB低频彩了解SparkR及其集成MLlib,看到最新的SparkR文档。
R公式支持其他语言
SparkR公式作为实现了R的解释模型MLlib特性变压器集成毫升管道API。的RFormula变压器提供了一种方便的方法来指定功能转换的R。
看到RFormula变压器可以使用,让我们从相同的航空公司开始之前的数据集。在Python中,我们创建一个RFormula变压器与前一节中使用的相同的公式。
> > >进口pyspark.ml.feature.RFormula> > >公式= RFormula (公式=“ArrDelay ~ DepDelay +距离+ aircraft_type”)
转换后,DataFrame功能和附加标签列返回。请注意
我们需要打电话符合()
我们可以把之前在一个数据集变换()
。的符合()
步骤决定了分类特征的映射值在输出向量指标,以便安装RFormula可以使用在不同的数据集。
> >>formula.fit(培训).transform(培训)。显示()+- - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +|aircraft_type|距离|DepDelay|ArrDelay|特性|标签|+- - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +|气球|23|18|20.|(0.0,0.0,23.0,18.0]|20.0||多- - - - - -引擎|815年|2|2|(0.0,1.0,815.0,2.0]|-2.0||单- - - - - -引擎|174年|0|1|(1.0,0.0,174.0,0.0]|1.0|+- - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
管道可以包括任何毫升RFormula变压器作为一个管道阶段,事实上SparkR如何实现全球语言监测机构()
。之后我们已经创建了一个适当的RFormula变压器和家庭的一个估计量所需的模型,拟合GLM模型只需要一个步骤:
> > >进口pyspark.ml.Pipeline> > >进口pyspark.ml.regression.LinearRegression> > >估计量= LinearRegression ()> > >模型=管道(阶段=[公式,估计]).fit(培训)
当管道执行时,公式引用的特性将被编码到一个输出特征向量线性回归使用的阶段。
我们希望RFormula简化毫升的创建管道通过提供一个简洁的方式表达复杂的功能转换。在火花1.5 RFormula变压器开始使用在Python中,Java, Scala。
接下来是什么?
在火花1.6 R的我们添加支持更先进的特性模型公式,包括功能的交互,更多的家庭模式,链接功能,更好的总结支持。
作为这篇文章的一部分,我们要感谢丹Putler和克里斯·弗里曼Alteryx有用的讨论在SparkR这个功能的实现,和Hossein Falaki输入内容。