Spark0.9分布式运行MLlib的二元分类算法


MLlib是的Spark实现一些常见的机器学习(ML)的功能并且提供一些相关的测试和数据生成器的功能。 MLlib目前支持4种常见的类型的机器学习问题的设定,即,二元分类,回归,聚类和协同过滤,以及一个原始梯度下降优化。这个指南将概述在MLlib所支持的功能,并且还提供了如何调用MLlib的一些例子。

依赖库

MLlib使用jblas线性代数库,它本身取决于本地Fortran程序。如果不是已经安装在你的节点,你可能需要安装gfortran运行时库。如果不能自动检测到这些库,MLlib将抛出一个链接错误。
使用MLlib在Python中,您将需要安装1.7或更新版本的NumPy和Python 2.7。

二元分类含义

二元分类是一种监督学习算法问题,我们想将实体为两种不同的类别或标签,如,预测邮件是否是垃圾邮件。这个问题涉及到通过执行一组打标签的数据集来进行学习的算法,比如,一组通过(数值)来代表特性以及分类标签的数据实体。算法会返回训练模型,该训练模型可以预测那些未知标签的新实体的标签。
MLlib目前支持两种标准的二元分类模型,即线性支持向量机(向量机)和逻辑回归以及对于每个算法模型的随机变量的L1和L2规则化算法。所有的算法都会利用原始梯度下降训练算法的(在下面描述),并采取作为输入正则化参数(regParam)以及各种数与梯度下降相关的参数(stepSize,numIterations miniBatchFraction)。
可用的二元分类算法:
SVMWithSGD
LogisticRegressionWithSGD

scala模板建立

为了让sbt正确工作,我们需要正确放置SimpleApp位置。scala和simple.scalat根据下面典型的目录结构来放置。一旦建立好了模板,我们可以通过编译来创建一个JAR包,它包含应用程序的代码,然后使用sbt/sbt run来执行我们编写的程序。



二元分类代码

下面的代码片段说明了如何加载一个样本数据集,对训练数据集执行训练算法,在代码中我们使用静态对象,并计算出实际结果和预测模型计算训练结果之间的误差。

执行结果

默认SVMWithSGD.train()方法执行L2正规化算法,正则化参数设置为1.0。如果我们想要配置这个算法,我们可以进一步设定SVMWithSGD的属性,可以直接通过创建一个新的SVMWithSGD对象和调用setter方法。所有其他MLlib算法都可以用这种方式来定制。例如,下面的代码通过正则化参数设置为0.1来产生的L1正规化随机变量向量机,迭代200次来运行这个训练算法。



相关内容