本篇教程将引领大家,通过使用spark的机器学习性能和 Scala ,练习一个基于超出内存可加载范围的数据集的逻辑回归分类器(即LR分类器)。
假如你想创建一个机器学习模型,但却发现你的输入数据集与你的计算机内存不相符?对于多机器的计算集群环境中通常可以使用如Hadoop和Apache Spark分布式计算工具。然而,Apache Spark能够在本地机器独立模式上,甚至在当输入数据集大于你的计算机内存时通过创建模型处理你的数据。
36大数据专稿,原文作者:Dmitry Petrov 本文由36大数据翻译组-元曜+BI+刘亭亭翻译,任何不标明译者和出处以及本文链接http://www.36dsj.com/archives/37699 的均为侵权。
在这篇文章里,通过使用一个34.6千兆字节的输入数据集创建一个二进制分类模型,为您展现一个Apache Spark的端对端脚本。
可以在您的计算机上运行进行测试。
1.输入数据和预期结果
在上一篇文章我们讨论了“How To Find Simple And Interesting Multi-Gigabytes Data Set”,本文将使用上文中提及数据集的Posts.xml文件。文件大小是34.6千兆字节,这个xml文件包含stackoverflow.com文章数据作为xml属性:
-
标题 – 文章标题
-
主体 – 文章文本
-
标签 – 文章的标签列表
-
10+ 更多的xml -我们不需要使用的属性
关于stackoverflow.com的Posts.xml完整数据集信息请点击:https://archive.org/details/stackexchange.
另外我创建一个较小版本的这种文件,里面只有10个条目或文章。此文件包含一个小尺寸的原始数据集,这个数据是被知识共享许可批准的。
如你所料,这个小文件并不是模型训练的最好的选择(这个小模型训练文件并不是最好的选择),这个文件仅适用于实验数据准备代码。然而,本文中的端对端Spark脚本也适用于这个小文件,文件下载请点击这里。
我们的目标是创建一个可基于主体和标题预测文章标签的预测模型。为了精简任务和减少代码数量,我们将联接标题和主体并作为一个单独的文本列。
可想而知,这个模型在stackoverflow.com网站上是怎样工作的——用户键入一个问题,网站自动给予标签建议。
假设我们需要尽可能多的正确的标签,并且用户将消除不必要的标签。由于这个假设我们将选择撤销作为我们的模型高优先级目标。
2.二进制和多标签分类
栈溢出标记预测问题属于多标签分类的一种但并不唯一,因为模型应当预测许多分类。相同的文本将被归类为“Java”和“多线程”。注意多标签分类是不同的问题的一个泛化 ——多分类问题,从一组类预测为仅仅一个类。为了简化我们的第一个Apache Spark问题以及减少代码数量,让我们开始简化问题吧。取代练习一个多标记分类器,我